Realizzare un albero di Natale interattivo con ESP8266 e il firmware Tasmota

Come gestire luci LED Pixel usando l'apprezzato e diffusissimo chip ESP8266 insieme con il firmware opensource Tasmota.
Realizzare un albero di Natale interattivo con ESP8266 e il firmware Tasmota

Il microcontroller ESP8266 è un chip WiFi a basso costo oggi utilizzato in molteplici progetti per la smart home come a livello industriale. Offre infatti pieno supporto TCP/IP e da anni ha raccolto grande interesse da parte dei maker e dei professionisti di tutto il mondo che lo impiegano anche in progetti avanzati per l’Internet delle Cose (IoT).

In questa guida vogliamo illustrare come si possa realizzare facilmente un albero di Natale interattivo basato su luci a LED o, volendo, un qualunque sistema di illuminazione decorativa controllabile da browser web.

Il progetto si basa su varie tecnologie che, per ragioni di spazio, non potranno essere trattate in modo esaustivo in questo articolo. Saranno comunque descritti tutti gli aspetti necessari a comprendere il funzionamento del nostro “albero web“.

L’hardware: il chip ESP8266 e gli altri requisiti

Al di là della costruzione fisica dell’albero utilizzato per il nostro progetto, che può avere la forma che più piace, a livello elettronico troviamo una catena di LED “Pixel”, un microcontrollore ESP8266 (nel nostro caso su modulo NodeMCU) e un banale alimentatore a 5V di potenza adeguata al numero di LED impiegati (nel nostro caso 49).

La catena di LED è forse la parte più interessante. Questi diodi luminosi sono in realtà composti da due parti: un driver intelligente, generalmente il WS2811, e un led RGB vero e proprio o la versione WS2812b che integra driver e LED nello stesso componente.

La particolarità di queste catene, disponibili in vari formati, come filari, led strip, matrici, anelli e così via è la possibilità di stabilire in modo programmatico il colore e l’intensità luminosa di ogni singolo led, da cui deriva il nome di “pixel”.
Attenzione perché senza un microcontrollore questi dispositivi possono sembrare guasti poiché in assenza di dati non si accendono neanche quindi non vanno utilizzati come o in sostituzione delle comuni strisce led.

In ogni caso sono facilmente reperibili in rete librerie opensource per il controllo tramite diversi tipi di microcontrollori, come Arduino, Raspberry Pi ed altre piattaforme.

Il funzionamento della catena di LED Pixel

Il controllo dei led avviene tramite un’unica linea seriale. Senza scendere troppo nei dettagli tecnici, diciamo che si tratta di inviare un segnale ad onda quadra self-clocked, con codifca NZR (non zero return) che si basa su un principio simile a quello dello shift register anche se non funziona proprio allo stesso modo. In questo caso lo scorrimento dei dati segue la logica First-In-Last-Out e alla fine di ogni treno di dati il circuito aspetta una piccola pausa (a zero) del segnale per agganciare i dati alle uscite (latching).

In parole semplici, possiamo dire che la linea di controllo è collegata in serie ad ogni “pixel” in modo passante: ogni driver ha un entrata ed una uscita. Il microcontrollore invierà sequenzialmente tutti i 24 bit (8 per colore) del primo pixel poi quelli del secondo e così via.

Ciascun driver, se riceve 24 bit, li conserva per il suo led; se in seguito ne riceve altri, invece, passa i dati al led successivo conservando quelli di sua competenza.
In questo modo, “spingendo” una sequenza di colori, questa verrà passata di pixel in pixel fino a quando non sarà stato assegnato il colore desiderato a tutti i led della striscia che a questo punto riceve dal microcontrollore il comando di conferma (latch) e cambia il colore di tutti i led contemporaneamente.

Il processo è così rapido (si lavora a circa 800 kHz) che all’occhio umano tutti i led cambiano colore istantaneamente anche diverse volte al secondo. Per maggiori approfondimenti tecnici sul trasferimento dei dati suggeriamo la lettura di questo documento.

Come funziona e quali sono le caratteristiche del microcontrollore ESP8266

Dicevamo in apertura che l’economico e diffusissimo microcontrollore ESP8266 di Espressif Systems in una delle sue varianti è la base del progetto. Il chip ESP8266 è il cuore pulsante di quasi la totalità dei dispositivi IoT come lampadine smart, prese controllate,… oggi presenti sul mercato: prodotti intelligenti come i SONOFF, Shelly, Tuya e moltissimi altri, contengono proprio questo microcontrollore che a tutti gli effetti un vero SoC con supporto completo al TCP/IP e interfaccia Wi-Fi (solo a 2,4 GHz).

Le sue caratteristiche (tanto per citarne alcune clock a 80 MHz, 1 o 4 MB di memoria flash, 64k di RAM, varie periferiche di I/O) hanno permesso la realizzazione e la diffusione di molti firmware sia commerciali che opensource nonché la disponibilità di svariati progetti domestici “DiY” realizzati facilmente da appassionati del settore vista oltretutto la possibilità di utilizzare diversi linguaggi di programmazione, compresa la piena compatibilità con l’IDE, il linguaggio e le librerie di Arduino.

Cos’è e a cosa serve il firmware Tasmota

Per il nostro progetto abbiamo deciso di servirci di uno dei firmware opensource più versatili oggi disponibili in rete, spesso utilizzato anche per modificare i dispositivi SONOFF e “slegarli” dal loro cloud.
Parliamo del firmware Tasmota, giunto alla versione 9.1.0 al momento della stesura di questo articolo. Tutta la documentazione, i sorgenti ed anche i file binari già compilati di questo firmware sono reperibili a questo indirizzo su GitHub.

Non possiamo in questa occasione descrivere tutte le potenzialità di questo potente firmware rimandando l’analisi approfondita a un successivo articolo. Per i più curiosi suggeriamo di fare riferimento alla documentazione ufficiale.

Descritte le caratteristiche del materiale necessario per il progetto andiamo meglio a vedere cosa e come è stato realizzato.

Si parte con il cavo LED da 50 Pixel e il modulo NodeMCU (scheda con ESP8266, alimentatore e chip FTDI USB-Seriale a bordo) entrambi facilmente reperibili su Amazon Italia.

Una volta caricato il firmware Tasmota nel dispositivo (tramite EspEasy Flasher) è possibile agganciarlo alla propria rete WiFi in almeno due modi:

1) Alla prima accensione con il firmware a bordo il dispositivo si comporta come un access point: basterà connettersi alla sua rete, prendere nota dell’indirizzo IP del gateway che ci viene assegnato dal suo server DHCP interno e puntare il browser a questo indirizzo.
Ci si troverà nella schermata principale del firmware dalla quale, cliccando su Impostazioni, Rete WiFi, sarà possibile inserire i dati di accesso di due reti WiFi alle quali il dispositivo proverà a connettersi dopo il riavvio. È possibile anche effettuare una scansione delle reti disponibili.

2) In alternativa ci si può collegare con un terminale seriale come l’ottimo Termite alla porta COMx creata dall’FTDI e digitare il seguente comando:

Backlog SSID1 myssid1; Password1 mypassword1; SSID2 myssid2; Password2 mypassword2

Riavviando il dispositivo questo tenterà la connessione alle due reti WiFi impostate (la seconda è facoltativa). In caso di fallimento tornerà nella modalità access point per procedere come al punto 1.

Una volta configurato il dispositivo, è necessario configurare il modulo per gestire correttamente i LED.
Si dovrà quindi entrare nuovamente nell’interfaccia di configurazione, cliccare su Impostazioni, Modulo e selezionare dal menu a tendina Generic (18) in corrispondenza di Tipo modulo e WS2812 (7) nella sezione D2 GPIO4 (sarà il pin al quale collegheremo la linea dati dei LED).

A questo punto non resta che provvedere ai collegamenti elettrici (rigorosamente in assenza di alimentazione). Le tensioni in gioco non sono assolutamente pericolose ma è facile danneggiare il modulo ESP se ci si lavora con alimentazione attiva.

I collegamenti sono molto semplici. La striscia led ha solo 3 fili: +5V – DataIn – GND che vanno collegati ai piedini del modulo; Vin per quanto riguarda l’alimentazione a 5V in comune con la striscia; D2 (terzo pin dall’alto a destra, tenendo l’antenna WiFi verso l’alto) va alla linea DataIn dei Led; uno qualunque dei piedini G alla terra (GND) dei LED.

Ci sarebbe da fare una precisazione: i LED lavorano a 5V mentre l’ESP8266 lavora a 3,3V. La corretta alimentazione è garantita dal regolatore di tensione presente a bordo del modulo NodeMCU quindi è sufficiente fornire i 5V sulla linea Vin. Il problema potrebbe però porsi nella comunicazione tra microcontrollore e LED poiché il livello logico 1 del microcontrollore è espresso da una tensione pari a quella della sua alimentazione ovvero 3,3V mentre nel caso dei LED, l’1 logico equivale a +5V.
Nella realtà questo non costituisce un problema perché la totalità dei LED che abbiamo provato, sia nei formati filari che led-strip, rileva l’1 anche a soli 3,3V quindi tutto funziona senza problemi. Nel caso in cui dovesse capitare una catena Led particolarmente “ostica” che non rileva il segnale 1 a 3,3V occorre necessariamente introdurre nel circuito un level shifter come questo, dal costo irrisorio.

Fatti i collegamenti si può alimentare il tutto e puntare all’indirizzo IP assegnato al modulo dal proprio router. Ci si ritroverà in una schermata simile a questa:

Da qui è già possibile testare il funzionamento dei LED selezionando colore, intensità, saturazione e stato. Tramite questa interfaccia web tutti i led della striscia assumeranno lo stesso valore. Scendiamo nel dettaglio su come controllare ogni singolo LED.

Cliccando su Console ci si reca appunto nella console di gestione del modulo dalla quale è possibile inviare comandi oltre che leggere alcune informazioni sullo stato del dispositivo ed eventuali feedback dei comandi inviati.

Il primo comando da dare serve ad indicare al modulo il numero di LED impiegati, nel nostro caso 49, quindi:

Pixels 49

A questo punto, per provare qualcosa di più divertente, digitare il seguente comando:

Led1 ffffff

Il primo LED della catena si accenderà di bianco assumendo il valore RGB assegnato ffffff ovvero 255,255,255 corrispondente alla massima luminosità di tutti e tre i canali rosso, verde e blu. La stessa cosa è valida per tutti i led cambiando l’indice e per qualunque colore RGB. Ad esempio Led23 cc9900 accenderà di giallo/arancio il ventitreesimo LED.

Il modulo contiene al suo interno alcuni effetti colorati preimpostati: per provarli è sufficiente dare il comando Scheme x, con x che va da 0 a 12, dove 0 è il comportamento normale, da 1 a 4 sono effetti che cambiano il colore a tutti i LED contemporaneamente (nascono per essere utilizzati sulle comuni strisce LED RGB).
La 5 è una (divertentissima) “modalità clock” utile per realizzare un particolare orologio luminoso (ci torneremo in un successivo articolo) mentre i valori da 6 a 12 sono relativi a variopinti effetti che animano tutti i led in modo diverso l’uno dall’altro.

Ma non finisce qui perché il firmware permette di inviare comandi al modulo anche tramite una semplice chiamata HTTP. Gli stessi comandi precedentemente presentati possono quindi essere inviati da una pagina web locale creando dei tasti o degli script di controllo.

Ad esempio per inviare il primo comando che ha acceso il led1 di bianco, è sufficiente accedere alla seguente url (in questo caso per inviare Led1 ffffff):

http://indirizzo_ip/cm?cmnd=Led1%20ffffff

È fondamentale sostituire gli spazi con la codifica urlencode %20 ed è inoltre possibile accodare più comandi, fino ad un massimo di 30 per ogni chiamata, separandoli con un ; ed uno spazio che codificati diventano %3B%20.
Per accendere due o più led con una sola chiamata è possibile inviare il comando con una chiamata simile a questa:

http://indirizzo_ip/cm?cmnd=Led1%20ffffff%3B%20Led5%20ff0000

Oltre a questo metodo di controllo è disponibile per l’utilizzo anche il più efficiente protocollo MQTT sul quale è possibile far successivamente ricadere la propria attenzione.

Ti consigliamo anche

Link copiato negli appunti