Giocare con i NeoPixel per realizzare un simpatico #smartBulb IoT

“Le nostre vere scoperte vengono dal caos, dall’andare nella
direzione che sembra sbagliata e stupida e sciocca.”
Chuck Palahniuk

Non so voi ma adoro i led. Mi son sempre piaciuti tanto, sin da quando ero bambino e costruivo i primi oscillatori astabili a transistor, con il classico LED rosso che lampeggiava.

Oggigiorno sono disponibili, anche a livello hobbystico, tecnologie all’epoca neanche immaginabili, come i LED “NeoPixel”/WS2812: piccoli moduli con led RBG ad alta luminosità, con controller integrato, che possono essere collegati in serie sul medesimo BUS a tre fili: alimentazione, massa e bus dati IN e OUT.

ws2812 pinout

Il datasheet dei moduli ws2812, con tanto di spiegazione del flusso dati, è disponibile qui.

Questi moduli sono diventati ormai molto comuni, soprattutto come strisce LED che vengono vendute un po’ ovunque, con tanto di controller per divertirsi a cambiarne il colore. Possono essere usate in molte situazioni, dalla retroilluminazione per la TV alle lucine per gli addobbi natalizi.

In questo caso mi sono costruito, usando un modulo quadrato di 16 LED WS2812, un microcontrollore ESP8266 e un modulo gyro MPU6050, una smartlamp molto simpatica che è piaciuta subito a tutti, soprattutto a mio figlio.

L’idea

Volevo realizzare una simpatica alternativa alla lampada per l’abat-jour del mio comodino. Qualcosa che mi permettesse di spegnere e accendere la luce, regolare il colore, luminosità, tempo di accensione etc etc comodamente e anche da remoto.

Così, oltre alla possibilità di controllo via HTTP e MQTT, ho inserito un modulo con giroscopio sensibile al movimento, così da poter cambiare …con un tocco!

L’hardware

Lo schema è piuttosto banale, essendo praticamente composto da moduli già pronti per l’uso. L’MPU6050 è collegato via bus I2C all’ESP8266, così come il bus dati per controllare il modulo dei NeoPixels, attraverso una resistenza da 470 Ohm per proteggerlo da assorbimenti di corrente non desiderati (e potenzialmente dannosi). Idem per il buzzer, che in realtà serve solamente se vogliamo inserire nel progetto un feedback sonoro (es. sveglia).

schema

Ho montato il tutto su una basetta millefori, così da realizzare un modulo compatto da montare all’interno dell’abat-jour. Ho aggiunto anche un piccolo modulo di alimentazione 220v-5V (Aliexpress) ma, durante la fase di costruzione, potete anche usare l’alimentazione via USB direttamente dal modulo WeMos D1 mini lite.

BOM – Bill Of Materials

  • WeMos D1 mini lite ESP8266 (Aliexpress);
  • modulo NeoPixel WS2812 (Aliexpress). Ce ne sono di svariate forme: io ho usato un modulo quadrato da 16 led;
  • modulo MPU6050 (Aliexpress);
  • buzzer passivo 5V (Aliexpress);
  • 1 resistore 470 Ohm;
  • 1 resistore 22 Ohm;
  • 1 condensatore 10µF 16V;

Il costo dei materiali si aggira intorno ai 10€. È tuttavia necessario avere un minimo di esperienza e di manualità con l’elettronica e i suoi principi base. Ovviamente NON MI ASSUMO ALCUNA RESPONSABILITA’.

Il firmware

L’aspetto più divertente nel lavorare con questi moduli è dover costantemente unire gli aspetti progettuali del software con le peculiarità dell’hardware scelto. Lo sviluppo di firmware è forse il momento più critico del mondo embedded.

Il codice sorgente del firmware è su GitHub (github.com/michelep/ESP8266_SmartBulb) ed è compatibile con l’SDK di Arduino v1.8.10.

Per la compilazione, sono necessarie alcune librerie:

e la compilazione necessita dell’impostazione di almeno 256 KByte di SPIFFS per il file di configurazione config.json, che deve essere compilato con i dati di connessione alla rete WiFi casalinga (WPA/WPA2):

{ "wifi_essid":"[ESSID rete WiFi]", "wifi_password":"[password rete WiFi]", "hostname":"smartbulb", "broker_host":"[IP/Hostname broker MQTT o vuoto per disabilitare", "broker_port":1883, "client_id":"smartbulb", "ntp_server":"time.ien.it", "ntp_timezone":1 }

Utilizzo

Al momento il firmware permette di controllare il cambio di modalità dei led in due modi: attraverso il movimento (motion detection grazie al modulo MPU6050) oppure con l’interfaccia web, se connesso ad una rete WiFi (la modalità di DEBUG, abilitata di default, stampa sulla consolle seriale i parametri di connessione, IP compreso).

Le modalità disponibili sono:

  • All Off – Tutto spento;
  • LightGame – Riproduce giochi di luce che cambiano, a rotazione, ogni 15 secondi;
  • Mood – Permette di selezionale una palette di colore diversa, con poca animazione;
  • Manual – Controllo manuale del colore e della luminosità attraverso gli slider;

Periodicamente vengono inviati al broker MQTT, se abilitato, i parametri di stato e di configurazione.

ToDo

  • implementare gli allarmi;
  • migliorare la funzionalità suono attraverso il buzzer;
  • implementare la gestione via MQTT;
  • migliorare la gestione degli eventi del gyro MPU6050;

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.