Adopereremo una ESP8266 (NodeMCU) per collegarci un display da 1,8″, integrato da lettore di MicroSD, per creare una decorazione per l’Albero di Natale e mostrare delle fotografie
Presentiamo un progetto tutto natalizio, utilizzando un NodeMCU con chip ESP8266 per creare una galleria fotografica da piazzare come decorazione sul nostro Albero di Natale. Per realizzare questo progetto, piccolo e semplice, ci servirà un display da 1,8″ che conosciamo già (LINK) e una MicroSD sulla quale caricare i nostri file.
Progetto
Vista l’aria natalizia non potevamo esimerci da realizzare un progetto di piccole dimensioni, ma molto carino, da esporre come decorazione sul nostro Albero di Natale. Quello che faremo è creare una palla decorativa, che poi sarà in realtà un cilindro, dentro al quale porremo un NodeMCU che leggerà dei file in formato bitmap da una MicroSD, per poi stamparli sul Display da 1,8″ ogni 10 secondi circa. In realtà, questo non è un progetto del tutto nuovo, ma ci siamo ispirati ad un nostro precedente progetto che troverete a questo LINK.
Componenti
Come già ripetuto, per il nostro addobbo natalizio tecnologico ci siamo affidati al NodeMCU dotato di chip ESP-12. Ad esso abbiamo collegato un display TFT da 1.8″ con chip ST7735, che integra un lettore di MicroSD. Per alimentare il progetto abbiamo utilizzato una batteria 18650 da 3,7V e 5800mAh, ma potete sostituirla con una batteria da 9V, più reperibile in commercio. Per aprire e chiudere il circuito, useremo uno switch. In ultimo, ma non per importanza, una MicroSD da 1GB che avevamo già in nostro possesso, ma che potete reperire in taglie più grandi.
Abbiamo disposto tutte queste componenti all’interno di una scocca che abbiamo realizzato noi con la nostra stampante 3D; i file li potete scaricare a questo LINK.
Vi preghiamo di adoperare le componenti riportare, perché la scocca su cui va inserito tutto è stata tarata sulle misure uniche dei componenti riportati in elenco. Noi abbiamo utilizzato i jumper per tutti i collegamenti, saldando qua e là dove possibie, ma vi consigliamo, se avete maggiore esperienza, di adoperare una scheda forata e saldare ogni componente direttamente su di essa:
- NodeMCU Lua: https://amzn.to/2W7K56g
- Display TFT 1.8″ SPI ST7735: https://amzn.to/2Wc47g0
- Batteria 18650 3,7V: https://s.click.aliexpress.com/e/_AWXsbJ
- Box batteria 18650: https://s.click.aliexpress.com/e/_9g01Jb
- Switch: https://amzn.to/344Wc8w
- Jumper: https://amzn.to/37eqpUL
- MicroSD: https://amzn.to/3a7vxM4
Collegamenti
Partiamo dicendo che il Display TFT e il lettore di MicroSD adoperano gli stessi pin MOSI, MISO e SCLK, mentre i pin CS sono differenti. Ricordiamo pure che i pin con la dicitura 3.3V funzionano anche per ricevere corrente alla medesima tensione, quindi collegheremo il polo positivo della batteria al pin 3.3V , quello negativo al GND.
Sebbene apparentemente siano semplici, tali collegamenti richiedono particolare attenzione. Lo switch lo abbiamo posto ad interrompere il passaggio di corrente dalla batteria al NodeMCU, il quale poi alimenterà il Display TFT che lavora regolarmente con i 3,3V.
Alcuni pin, come detto sopra, sono condividi tra display e card reader: per questa ragione prestate molta attenzione. Vi riportiamo in tabella i collegamenti nel dettaglio:
TFT Dispaly 1.8" SPI | ESP8266 |
---|---|
VCC | 3.3V |
GND | GND |
CLK/SCK | D5 |
SDA/MOSI | D7 |
RS/DC | D4 |
RST | D0 |
CS | D8 |
SD_CS | D2 |
SD_MOSI | D7 |
SD_MISO | D6 |
SD_SCK | D5 |
Codice
Per permettere al nostro progetto di funzionare correttamente dovremo adoperare la libreria Adafruit_GFX-Master, la libreria ST7735 per il display, mentre le librerie Adafruit_SPIFlash, SdFat e la libreria Adafruit-ImageReader per interagira con la MicroSD. Prima di procedere, però, c’è una cosa da raccomandarvi, ovvero per l’utilizzo di file BITMAP per questo progetto sarà meglio se già nella risoluzione del display che adoperiamo (128×160). Potete scaricare lo sketch QUI.
#include <Adafruit_GFX.h> #include <Adafruit_ST7735.h> #include <SdFat.h> // SD card FAT filesystem #include <Adafruit_SPIFlash.h> // SPI / QSPI flash library #include <Adafruit_ImageReader.h> // Funzione per la lettura dell'immagine
Passiamo poi definendo i pin a cui è connesso il display e il card reader, predisponendo poi la MicroSD all’utilizzo, leggendone il file system e creando gli oggetti SD e reader per la lettura dei file sulla MicroSD.
#define USE_SD_CARD #define TFT_CS D8 #define TFT_RST D0 #define TFT_DC D1 #define SD_CS D2 // Pin digitale CS SD-Card #define BLACK 0x0000 #define BLUE 0x001F #define RED 0xF800 #define GREEN 0x07E0 #define CYAN 0x07FF #define MAGENTA 0xF81F #define YELLOW 0xFFE0 #define WHITE 0xFFFF #if defined(USE_SD_CARD) SdFat SD; // File system SD Card Adafruit_ImageReader reader(SD); // oggetto da creare per la lettura #else // SPI o QSPI flash filesystem #if defined(__SAMD51__) || defined(NRF52840_XXAA) Adafruit_FlashTransport_QSPI flashTransport(PIN_QSPI_SCK, PIN_QSPI_CS, PIN_QSPI_IO0, PIN_QSPI_IO1, PIN_QSPI_IO2, PIN_QSPI_IO3); #else #if (SPI_INTERFACES_COUNT == 1) Adafruit_FlashTransport_SPI flashTransport(SS, &SPI); #else Adafruit_FlashTransport_SPI flashTransport(SS1, &SPI1); #endif #endif Adafruit_SPIFlash flash(&flashTransport); FatFileSystem filesys; Adafruit_ImageReader reader(filesys); #endif Adafruit_ST7735 tft = Adafruit_ST7735(TFT_CS, TFT_DC, TFT_RST); Adafruit_Image img; int32_t width = 0, height = 0;
Nel VOID SETUP procediamo avviando il monitor seriale, inizializziamo il display predisponendolo alla lettura delle foto, infine inizializziamo il card reader leggendo se è presenta una MicroSD o se ci sono problemi nella lettura della stessa.
ImageReturnCode stat; // Stato dalle funzioni di lettura delle immagini Serial.begin(9600); tft.initR(INITR_BLACKTAB); tft.setRotation(2); tft.fillScreen(ST77XX_BLACK); Serial.print(F("Initializing filesystem...")); #if defined(USE_SD_CARD) //La scheda SD è piuttosto semplice, una sola chiamata... if(!SD.begin(SD_CS, SD_SCK_MHZ(10))) { Serial.println(F("SD begin() failed")); for(;;); // Errore fatale, non continuare } #else // Il flash SPI o QSPI richiede due passaggi, uno per accedere alla stessa memoria flash // il secondo per accedere al file system della memoria if(!flash.begin()) { Serial.println(F("flash begin() failed")); for(;;); } if(!filesys.begin(&flash)) { Serial.println(F("filesys begin() failed")); for(;;); } #endif Serial.println(F("OK!")); tft.setRotation(2); // Ruoto il display tft.fillScreen(BLUE); // Coloro di blu il display delay(2000); tft.fillScreen(0); // Pulisco lo schermo
Per ultimo, nel VOID LOOP leggiamo i file presenti e li stampiamo a intervalli regolari di 10 secondi, usando la funzione img.draw() per definire il display e le dimensioni.
reader.drawBMP("/01.bmp", tft, 0, 0); // Leggo l'immagine BMP delay (1000); img.draw(tft,160,128); // Scrivo l'immagine BMP con risoluzione 240x320 delay(10000); reader.drawBMP("/02.bmp", tft, 0, 0); delay (1000); img.draw(tft,160,128); delay(10000); reader.drawBMP("/03.bmp", tft, 0, 0); delay (1000); img.draw(tft,160,128); delay(10000); reader.drawBMP("/04.bmp", tft, 0, 0); delay (1000); img.draw(tft,160,128); delay(10000);
Caricate correttamente lo sketch sul NodeMCU e quando avrete assemblato tutto, potrete chiudere la scocca usando 4 comunissime viti dal diametro da 2,5mm, le stesse usante per fissare le ventole del PC. Infine, potete riporre la vostra decorazione sul vostro Albero di Natale.