Nel vasto mondo dei display per microcontrollori, il modulo ESP32 Miner Display TFT 2.8″ di Elecrow si distingue per l’integrazione di un processore potente e un’interfaccia utente immediatamente utilizzabile.
In questo post analizziamo in dettaglio questo prodotto, ideale per applicazioni che richiedono interfacce grafiche connessi a ESP32, dal mining solo alle dashboard IoT.
Disclaimer: ho ricevuto questo prodotto gratuitamente in cambio di una recensione. Tutte le opinioni espresse in questa recensione sono mie e si basano sulla mia esperienza personale con il prodotto.
Il mio feedback non è stato influenzato dall’azienda o da terze parti
Indice
Caratteristiche principali
Il display Elecrow ESP32 Mine LCD-2.8 “ è un modulo HMI (Human Machine Interface) dotato di un display TFT-LCD da 2,8″ con risoluzione 320 × 240 pixel e tecnologia touch resistiva.
Al suo interno è integrato un modulo ESP32-32E-N4 (spesso indicato come ESP32-WROOM-32E-N4) è un modulo microcontrollore dual-core prodotto da DOIT (o compatibile) basato sul chip Espressif ESP32-D0WD-V3.
Note
Questa scheda appartiene alla serie di schede dette ESP32 “CYD” ( Cheap Yellow Display) , sono una varietà di schede di sviluppo basate sul popolare microcontrollore ESP32, che integra funzionalità Wi-Fi e Bluetooth a basso consumo energetico. Queste schede sono progettate per offrire agli sviluppatori un ambiente versatile per la prototipazione e lo sviluppo di applicazioni IoT (Internet of Things).
Alcune Features
- Supporto multi-piattaforma per ambienti di sviluppo embedded, inclusi Arduino IDE, Espressif IDF, Lua RTOS, ESPHome (Home Assistant), PlatformIO e MicroPython.
- Compatibilità con la libreria grafica LVGL, con demo integrata e esempi applicativi per ambiente Arduino.
- Display TFT LCD da 2,8″ con risoluzione 320 × 240 pixel, controller grafico ILI9341V.
- Slot integrato per scheda TF (microSD) e numerose interfacce di espansione: USB, interfaccia audio per altoparlante, connettore per batteria e GPIO multipli, per applicazioni plug-and-play.
Applicazioni di mining
Compatibilità nativa con il software ufficiale NMMiner; operatività immediata tramite semplice procedura di flashing del firmware.

Nota: Il dispositivo può essere utilizzato per applicazioni di mining, se dotato di algoritmo ottimizzato con capacità di calcolo fino a 1000 kH/s.
Compatibilità nativa con il software ufficiale NMMiner; operatività immediata tramite semplice procedura di flashing del firmware.
Considerate che comunque il modulo non ha il firmware per mining precaricato. Per acquistare una licenza e la funzionalità flashing, occorre recarsi sul sito https://www.nmminer.com/product/nmlotto/
Riassunto caratteristiche
| Caratteristica | |
|---|---|
| Dimensione | 2,4 pollici |
| Processore Principale | ESP32-WROOM-32-N4 |
| Risoluzione | 320 x 240 |
| Tipo di Touch | Touch Screen Resistivo |
| Tipo di Display | Schermo TN |
| Schermo | Schermo TFT-LCD |
| Driver Display | ILI9341V |
| Alimentazione Esterna | DC 5V-2A |
| Tensione Batteria | 3,7-4,2V |
| Interfacce | 1 Slot TF Card, 1 I2C, 1 GPIO, 1 Altoparlante, 1 UART1, 1 UART0 |
| Pulsanti | Pulsante BOOT e Pulsante Reset |
| Area Attiva | 36,72 x 48,96 mm |
| Dimensioni | 51 x 78 mm |
| Temperatura Operativa | -20°C ~ 70°C |
| Temperatura di Stoccaggio | -30°C ~ 80°C |
| Peso Netto (1pz) | 52g |
Dettagli tecnici del chip ESP32 integrato
Processore e memoria
- Doppio core Tensilica® 32-bit LX6 con clock fino a 240 MHz , ottimo equilibrio tra potenza e consumo.
- Memoria Flash integrata: 4 MB, usata per firmware e dati.
Connettività wireless
- Wi-Fi 802.11 b/g/n (2,4 GHz) per connessioni LAN e Internet.
Potenza di uscita Wi-Fi fino a circa 19-20 dBm e velocità dati fino a 150 Mb/s, tipiche della famiglia ESP32. - Bluetooth v4.2 + BLE (Bluetooth Low Energy) per comunicare con sensori, smartphone e altri dispositivi.
Interfacce periferiche
Supporta numerose interfacce per collegare sensori e moduli esterni, questa versatilità lo rende adatto a tanti progetti embedded:
- GPIO digitali
- UART, SPI, I2C
- PWM
- ADC (convertitore analogico-digitale)
- DAC (convertitore digitale-analogico)
- Interfaccia SDIO / SD card
- Capacitive Touch
Sicurezza e funzioni avanzate
Accelerazione hardware per crittografia, supporto per secure boot e flash encryption per la protezione del firmware e dei dati.
Alimentazione e consumo
- Tensione operativa tipica: 3.0 – 3.6 V.
- Modalità di basso consumo con diverse opzioni di risparmio energia.
Com’è fatto l’ESP32 Miner Display LCD-2.8″di Elecrow
L’ ESP32 Miner Display LCD-2.8″di Elecrow si presenta come un modulo delle dimensioni di 78 x 51 mm per uno spessore di 14 mm di altezza. Il PCB ha un case in acrilico per la protezione del display e dei componenti elettronici interni.


Non è necessario aprirlo poiché tutti i connettori, i pulsanti di Reset e di Boot, sono accessibili anche con il plexiglas montato, e la loro funzione è visibile attraverso il plexiglas trasparente
Dove trovare l’ ESP32 Miner Display LCD-2.8″
L’ ESP32 Miner Display LCD-2.8″ può essere acquistato presso il sito della Elecrow, il suo costo al momento della scrittura del post si aggira sui 26 €
Il display è arrivato ben confezionato in una scatola e avvolta a sua volta in un foglio millebolle.

Nella scatola troviamo:
- n° 2 modulo ESP32 2.8” Miner LCD Display già assemblato avvolto in una foglio millebolle
- n° 2 cavi Crowtail/Grove a 4 pin per la connessione tramite UART/I²C
- n° 2 penne per pannello touch resistivo
NOTA: nelle foto del sito, la foto della confezione sono mostrati due piccoli cacciaviti per lo smontaggio della custodia in acrilico, non presenti nella confezione e comunque non citati nell’elenco.

Il modello ESP32 Miner Display LCD-2.8″ non è il solo disponibile ne esiste anche uno da 2.4″ con la stessa riduzione 320×240 con le dimensioni leggermente minori 78×51 mm.
Schema elettrico
La Elecrow ha rilasciato sulla pagina Wiki dedicata al dispositivo sia lo schema elettrico che il PCB. Per cui nei capitolo seguenti è riportata l’analisi delle varie sezioni del circuito.
Nota: nella cartella Eagle_SCH&PCB troverete i file degli schemi CAD Eagle ( .sch) e dei layout PCB ( .brd). Questi file sono stati utilizzati per la progettazione dei circuiti e la produzione di PCB.
Controller principale
Il dispositivo è basato su ESP32-WROOM-32-N4 (datasheet) , modulo con microcontrollore dual-core a 32 bit e connettività Wi-Fi e Bluetooth integrata. Il modulo è alimentato a 3,3 V e supportato da condensatori di disaccoppiamento dedicati per garantire stabilità e immunità ai disturbi.

Il circuito include i classici segnali di BOOT e RESET (EN), implementati tramite pulsanti e rete RC, che consentono sia l’avvio normale da flash SPI sia l’ingresso in modalità download/programmazione. Le linee GPIO sono esposte e assegnate a periferiche come display TFT, touch panel, UART, I²C e SPI, rendendo il controller il centro di gestione di tutte le funzioni del dispositivo.
Porta USB Type-C
La funzione della porta USB, in questo caso di tipo C è compatibile con alimentatori USB standard, fornisce alimentazione e comunicazione dati in un unico connettore moderno.

I componenti principali sono : Connettore USB-C, resistenze CC, Linee VBUS e USB D+/D−
Da USB a porta seriale
Permette la programmazione diretta dell’ESP32 via USB senza hardware esterno, permettendo la conversione USB ↔ UART per programmazione e debug.

Basata sul chip U6 tipo CH340C (datasheet), sono poi riportate le linee USB D+ / D− e le linee UART
Sono poi presenti dei condensatori di bypass.
Del circuito fa parte anche la sezione Auto Download (BOOT automatico) che consente il flashing automatico del firmware senza intervento manuale sui pulsanti, con gestione automatica delle linee BOOT e RESET durante la programmazione.
Formato da transistor di controllo Q9 e Q10 tipo S9013, resistenze di polarizzazione, Linee DTR / RTS.
Alimentazione 3,3 V
Sezione di alimentazione basata su convertitore DC/DC step-down (buck) con IC RY3420 (datasheet), che genera una linea 3,3 V stabile a partire da VIN. La tensione di uscita è impostata tramite partitore resistivo (R20/R21) con riferimento interno da 0,6 V.
Induttore e condensatori di ingresso/uscita garantiscono alta efficienza, basso ripple e buona stabilità, rendendo il circuito adatto ad applicazioni embedded a basso consumo.

Power LED
Indicazione visiva dello stato di alimentazione, indica la presenza della tensione a 3,3 V sul sistema.
Formato da un LED rosso con relativa resistenza di limitazione R3 da 1 kΩ.

Batteria e gestione alimentazione
Il circuito integra la gestione di una batteria Li-ion/Li-Po con ricarica da VBUS (USB) e commutazione automatica dell’alimentazione. Il caricabatteria U26 (4054A datasheet) ,gestisce la ricarica lineare a 500 mA, con corrente impostata tramite R9 e filtraggio su ingresso e batteria.
La distribuzione della potenza è affidata a un PMOS 3401 (datasheet) da 4A (Q3 ) che realizza un power path automatico: il sistema viene alimentato da VBUS quando presente, oppure dalla batteria in assenza di alimentazione esterna.
I diodi Schottky 1N5817 (datasheet) garantiscono isolamento e protezione contro correnti inverse, mentre la rete resistiva sul gate del PMOS controlla la commutazione in modo stabile e sicuro.
Il risultato è una gestione efficiente e trasparente della batteria, ideale per dispositivi portatili ricaricabili.

Interfaccia LCD + Touch Panel
Collegamento diretto del display TFT con touch resistivo con driver ILI9341. Supporta display TFT SPI con controllo completo di grafica, touch e backlight, rendendo il dispositivo adatto a interfacce grafiche avanzate.
Troviamo il Connettore LCD, le linee di gestione SPI connesse ai pin SPI SCL (IO14 ), D/C (IO2), CS (IO15), SDA (IO13) . Le linee touch X/Y, e il circuito di gestione del RESET.
Abbiamo infine il circuito di controllo della retroilluminazione gestita dal pin IO27 tramite Q6 un MOSFET canale Tipo N tipo 2N7002 (datasheet)

Driver Touch Panel – XPT2046
Gestione del touch resistivo del display. Controller touch affidabile e diffuso, garantisce una buona precisione per interfacce utente embedded con carico minimo sul microcontrollore.
Componenti principali: IC U3 tipo XPT2046 (datasheet), Interfaccia SPI, Linea PENIRQ (interrupt), Filtraggio su alimentazione e riferimenti

Amplificatore audio speaker
La sezione audio utilizza un amplificatore di potenza tipo SC8002B (datasheet), pilotato direttamente da un GPIO 26 dell’ESP32 e alimentato a 3,3 V, ideale per la gestione di un piccolo speaker integrato. Il segnale audio in ingresso è filtrato e accoppiato in AC tramite una rete RC, che riduce rumore e componenti indesiderate provenienti dal microcontrollore.

L’amplificatore lavora in configurazione single-ended con bypass di riferimento per migliorare la stabilità e ridurre il rumore di fondo. I condensatori di disaccoppiamento sull’alimentazione e sulla massa analogica (AGND) garantiscono un funzionamento stabile anche durante i picchi di corrente audio.
L’uscita è collegata direttamente allo speaker tramite connettore dedicato.
Nota
La qualità audio è adeguata per beep, avvisi sonori e semplici riproduzioni vocali, con volume sufficiente per ambienti silenziosi o da scrivania. I limiti principali sono legati all’alimentazione a 3,3 V e alla potenza contenuta: non è pensato per musica ad alto volume o bassi pronunciati, ma rappresenta una scelta equilibrata per un dispositivo embedded compatto e a basso consumo.
TF Card (MicroSD)
Permette l’Interfaccia per scheda MicroSD tramite bus SPI. Consente storage esterno per log, file multimediali o dati applicativi, integrandosi facilmente con l’ESP32.
Formato dallo Slot TF Card, le linee SPI (CS, CLK, MOSI, MISO) collegate ai pin IO: 5, 23,18,19.
Troviamo poi le Resistenze di pull-up R16, 17, 23, 24, 67 da 10 KΩ e due condensatori di filtraggio sulle linee di alimentazione C10 sulla line 3.3V da 100 nF e C54 sulla linea GND da 4.7 μF.

GPIO A/D – Espansione porte
Circuito di espansione delle linee GPIO analogiche/digitali dell’ESP32 verso l’esterno.
Permette di accedere direttamente agli ingressi analogici dell’ESP32, Pin IO25 e IO32, utili per sensori esterni o segnali di controllo, con filtraggio base per ridurre il rumore. I suoi componenti principali sono : Connettore GPIO, Linee ADC dedicate, condensatori di filtro C13 da 100 nF.

Interfaccia I²C
Fornisce l’esposizione del bus I²C per periferiche esterne. Compatibile con sensori, RTC, display e moduli I²C standard, alimentati a 3,3 V direttamente dalla scheda.
Troviamo il connettore I²C, connesso ai pin IO 22 e IO 21 le due resistenze di Pull-up su SDA/SCL R26 e R27 da 1KΩ e un condensatore di bypass su 3,3 V C15 da 100 nF.

Interfaccia UART1
Porta seriale secondaria per comunicazione o debug , ideale per collegamento a moduli seriali esterni, console di debug o dispositivi di comunicazione aggiuntivi.
Rappresentata dal connettore UART, le linee TXD / RXD connesse ai pin IO 17 e IO 16
E poi presente un condensatore di disaccoppiamento sulla linea di alimentazione C16 da 100 nF

Valutazione complessiva dello schema
Nel complesso, la scheda presenta un’architettura molto completa e ben bilanciata, con una chiara separazione tra alimentazione, gestione batteria, controllo logico e periferiche.
La scelta dell’ESP32, affiancata da display TFT, touch, audio, storage MicroSD e interfacce standard (USB, UART, I²C), rende il dispositivo estremamente versatile per applicazioni embedded, IoT e progetti stand-alone con interfaccia grafica.
I limiti principali sono quelli tipici delle soluzioni compatte: potenza audio contenuta, ricarica lineare e display SPI, ma sono compromessi coerenti con l’obiettivo di bassi consumi, semplicità e integrazione elevata. Nel complesso, una piattaforma solida, ben progettata e adatta sia a sviluppatori che a maker evoluti.
Ambienti di sviluppo e librerie
Nella pagina wiki dedicata al modulo viene riportata la compatibilità ai seguenti ambienti di sviluppo: Arduino IDE, PlatformIO, ESPHome, MicroPython, ESP-IDF ed è compatibile con la libreria grafica LVGL .
Supporta anche openHASP , fornendo una soluzione efficiente e affidabile per il mining di criptovalute.
Arduino IDE
Arduino IDE, (Integrated Development Environment) è un ambiente di sviluppo open-source progettato per semplificare la programmazione e il caricamento di codice su microcontrollori Arduino e compatibili. È un software fondamentale per chiunque voglia lavorare con la piattaforma Arduino e con dispositivi di elettronica embedded. (Integrated Development Environment) è un ambiente di sviluppo open-source progettato per semplificare la programmazione e il caricamento di codice su microcontrollori Arduino e compatibili. È un software fondamentale per chiunque voglia lavorare con la piattaforma Arduino e con dispositivi di elettronica embedded.
Squareline Studio
Squareline Studio è uno strumento indispensabile per chi vuole creare interfacce utente grafiche per dispositivi embedded in modo rapido ed efficiente. Riduce la complessità dello sviluppo, consente di risparmiare tempo e rende accessibile la progettazione grafica anche a sviluppatori con competenze limitate in design o programmazione grafica. Grazie all’integrazione con LVGL, è una scelta ideale per sistemi IoT, domotica e dispositivi embedded avanzati.
Nota: Programma a pagamento. O gratuito con limitazioni
Libreria grafica LVGL
LVGL (Light and Versatile Graphics Library) è una libreria grafica open-source scritta in C, progettata per creare interfacce grafiche (GUI) su sistemi embedded e microcontrollers come l’ESP32 con risorse limitate e offre:
- Widget pronti all’uso (bottoni, slider, grafici, menu, tastiere, ecc.)
- Supporto per touchscreen, mouse e tastiera
- Sistema di stili e temi personalizzabili
- Gestione di animazioni, layout e eventi
- Compatibilità con vari driver di display (SPI, RGB, HDMI, framebuffer, ecc.)
- Funzionamento senza sistema operativo o con RTOS (FreeRTOS, Zephyr, ecc.)
La libreria LVGL, gratuita è apprezzata perché consente di realizzare interfacce moderne e fluide anche su hardware con poca RAM e potenza di calcolo, mantenendo un buon equilibrio tra prestazioni e flessibilità.
PlatformIO
PlatformIO si distingue nel panorama degli ambienti di sviluppo integrati (IDE) per la sua capacità di operare come un plugin versatile, compatibile con numerosi IDE, tra cui Visual Studio Code, Atom ed Eclipse. Nonostante non sia un IDE autonomo, la sua integrazione, soprattutto con Visual Studio Code, offre agli sviluppatori un toolkit ricco di funzionalità per la programmazione di microcontrollori come Arduino, ESP8266 e ESP32.
ESPHome
ESPHome è una soluzione potente e versatile per creare dispositivi IoT basati su ESP8266 ed ESP32.
Grazie alla sua configurazione semplificata, integrazione con Home Assistant e supporto per una vasta gamma di sensori e attuatori, è ideale per sviluppatori di tutti i livelli che desiderano costruire sistemi di domotica e automazione personalizzata
ESPHome supporta una vasta gamma di sensori e attuatori, tra cui:
- Sensori di temperatura e umidità (DHT22, DS18B20, ecc.).
- Sensori di movimento (PIR).
- Moduli di comunicazione come IR, RF e UART.
- Driver per LED RGB e strip LED (WS2812, SK6812, ecc.).
Nota: Programma gratuito
Micro Python
Micro Python è un’implementazione software del linguaggio di programmazione Python 3, scritto in C, ottimizzato per l’esecuzione su un microcontrollore. MicroPython è un compilatore Python completo e runtime che funziona sull’hardware del microcontrollore.
Espressif IDF
Espressif IDF (Espressif IoT Development Framework) è il framework ufficiale sviluppato da Espressif Systems per programmare e gestire i microcontrollori della serie ESP32 (e i dispositivi correlati). È una piattaforma di sviluppo completa e modulare che consente agli sviluppatori di creare applicazioni avanzate per dispositivi IoT (Internet of Things).

OpenHASP
OpenHASP non è un linguaggio di programmazione nel senso tradizionale (come Python o Java), ma piuttosto un firmware che utilizza un sistema di configurazione dichiarativo basato sul formato JSONL (JSON Lines).
Installazione e configurazione
Vediamo ora come avviene il flashing tramite l’IDE di Arduino.
Il dispositivo viene fornito con un firmware demo. Per cui appena collegato saranno mostrate le sue capacità.
Per effettuare i test e utilizzare il display è sufficiente seguire le indicazioni fornite da Elecrow.
Sul loro sito è possibile trovare:
- Pagina Wiki di Elecrow con guida all’installazione
- Pagina Wiki di Elecrow con esempi di utilizzo
- Repository GitHub con codice sorgente e documentazione
Per l’installazione eseguire questi passaggi:
1 – Scaricare i file di libreria già preparate da Elecrow in formato zip da questo link, sarà poi necessario decomprimerle. Il mio consiglio è quello di creare un apposita cartella, per esempio:
C:\Users\vostronome\Documents\Arduino 2.8inch-ESP32-LCD-Display
in modo da non avere problemi con quelle che avete già caricato. Fatto questo sarà necessario indicare all’IDE la posizione delle librerie. Per tornare ad utilizzare le vostre librerie, sarà sufficiente indicare la precedente posizione. Ricordarsi di riavviare l’IDE, dopo la modifica per renderla attiva.

2 – Se non l’avete già fatto, caricare tramite il Board Manager il pacchetto relativo alle schede ESP32

3 – Scegliere il modello di scheda tramite Arduino IDE , per cui apriremo uno sketch con la IDE di Arduino, e andremo nella scheda Strumenti -> Scheda e selezioneremo tra le esp32 la ESP32S3-WROOM-DA Module

3 – Colleghiamo quindi al PC il display tramite il cavo ricevuto e indichiamo all’IDE la porta a cui è collegato il modulo

Facciamo qualche prova
Sia nella pagina WIKI sia nella apposita cartella nel sito github di Elecrow sono vari presenti esempi per i vari sistemi di programmazione.
Questi sono molto utili per eseguire i primi test.

Realizziamo in PIB-BOY con ESP32 Miner Display LCD
Per testare il display ho realizzato un codice che utilizzasse molte delle risorse disponibili:
- Interfaccia I²C: collegamento di un sensore DHT20 per rilevare temperatura e umidità, pin IO 22 e IO 21
- GPIO A/D : Due LED collegati alle porte Pin IO25 e IO32. Si è utilizzato un Modulo semaforo
- Amplificatore audio speaker: per collegare un piccolo altoparlante, pin GPIO 26
Questo per realizzare una sorta di Il Pip-Boy (in particolare il modello 3000 visto in Fallout 3, New Vegas, Fallout 4 e la serie TV) è un dispositivo da polso fondamentale nella serie Fallout che agisce come computer personale, navigatore, radio e, crucialmente, come rilevatore di radiazioni (Geiger counter)


Per il collegamento del semaforo a led e del sensore DHT20 si dovrà far uso di cavi dotati di connettore HY2.0-4P che troverete nella confezione.
Dovrete poi collegare un altoparlante da 4/8Ω 1W dotato di un connettore PH2.0-2P
Anche la batteria dovrà avere un connettore PH2.0-2P.

Programma utilizzato
Il programma è così strutturato:
-
All’accensione il dispositivo si connette alla rete WiFi configurata (ricordarsi di inserire SSID e password all’interno del programma) e sincronizza automaticamente l’ora locale tramite server NTP.
L’orario corrente viene visualizzato nell’angolo in alto a destra del display. -
Il sistema inizializza quindi un sensore DHT20, dal quale acquisisce i dati di temperatura e umidità ambientale. I valori vengono mostrati sia in formato numerico sia tramite barre grafiche animate, in stile Pip-Boy.

-
In condizioni normali il LED verde lampeggia per indicare il corretto funzionamento del sistema.
-
In caso di evento di radiazione (simulato), il LED verde si spegne e si attiva il LED rosso. Sul display compare la scritta lampeggiante in rosso: “!! RADIATION DETECTED !!”

-
Contemporaneamente l’altoparlante, collegato al GPIO 26, genera il suono di una sirena di allarme.
-
Al termine dell’evento (durata circa 8 secondi), il LED rosso si spegne, la sirena si arresta, il LED verde riprende a lampeggiare e il messaggio sul display viene sostituito dalla scritta: ALERT CLEARED”.

| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 | #include <TFT_eSPI.h> #include <SPI.h> #include <Wire.h> #include "Crowbits_DHT20.h" #include <WiFi.h> #include "time.h" int sirenFreq = 800; bool sirenUp = true; unsigned long lastSirenUpdate = 0; const char* ssid = "xxx"; // Vostra rete const char* password = "xxx"; // Vostra PW const char* ntpServer = "pool.ntp.org"; const long gmtOffset_sec = 3600; // Italia inverno const int daylightOffset_sec = 3600; // ora legale #define LED_RED 32 #define LED_GREEN 25 #define BACKLIGHT_PIN 27 #define SPEAKER_PIN 26 #define PIP_GREEN 0x07E0 #define PIP_BLACK TFT_BLACK #define PIP_DARK 0x0200 #define PIP_RED TFT_RED TFT_eSPI tft = TFT_eSPI(); Crowbits_DHT20 dht20; // Timing unsigned long lastSensorUpdate = 0; unsigned long lastBlink = 0; unsigned long lastAlarmCheck = 0; unsigned long alarmStart = 0; unsigned long lastBeep = 0; bool ledState = false; bool alarmActive = false; bool alarmTextVisible = true; // Valori float currentTemp = 0; float currentHum = 0; float smoothTemp = 0; float smoothHum = 0; // ===== Richiamo routine ===== void drawUI(); void updateSensor(); void animateBars(); void handleLed(); void handleRadiationEvent(); void handleAlarm(); void setup() { Serial.begin(115200); WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(500); } configTime(gmtOffset_sec, daylightOffset_sec, ntpServer); pinMode(LED_RED, OUTPUT); pinMode(LED_GREEN, OUTPUT); pinMode(BACKLIGHT_PIN, OUTPUT); pinMode(SPEAKER_PIN, OUTPUT); digitalWrite(LED_RED, LOW); digitalWrite(LED_GREEN, LOW); digitalWrite(BACKLIGHT_PIN, HIGH); Wire.begin(22, 21); dht20.begin(); tft.init(); tft.setRotation(1); tft.fillScreen(PIP_BLACK); randomSeed(analogRead(34)); drawUI(); } void loop() { handleLed(); updateSensor(); animateBars(); handleRadiationEvent(); handleAlarm(); drawClock(); } void drawClock() { struct tm timeinfo; if (!getLocalTime(&timeinfo)) return; char timeString[10]; strftime(timeString, sizeof(timeString), "%H:%M:%S", &timeinfo); tft.setTextColor(PIP_GREEN, PIP_DARK); tft.setTextSize(2); tft.setTextDatum(TR_DATUM); tft.drawString(timeString, 305, 12); // destra header } void drawUI() { tft.fillScreen(PIP_BLACK); tft.drawRect(5, 5, 310, 230, PIP_GREEN); tft.fillRect(5, 5, 310, 30, PIP_DARK); tft.drawFastHLine(5, 35, 310, PIP_GREEN); tft.setTextColor(PIP_GREEN, PIP_DARK); tft.setTextSize(2); tft.setCursor(15, 12); tft.println("PIP-BOY"); tft.setTextSize(1); tft.setCursor(80, 220); tft.println("WWW.ADRIROBOT.IT - VAULT 31"); tft.setTextColor(PIP_GREEN, PIP_BLACK); tft.setTextSize(2); tft.setCursor(20, 60); tft.print("TEMP"); tft.setCursor(20, 130); tft.print("HUM"); } void handleLed() { if (!alarmActive) { if (millis() - lastBlink >= 1000) { lastBlink = millis(); ledState = !ledState; digitalWrite(LED_GREEN, ledState); } } else { digitalWrite(LED_GREEN, LOW); } } void updateSensor() { if (millis() - lastSensorUpdate >= 2000) { lastSensorUpdate = millis(); currentTemp = dht20.getTemperature(); currentHum = dht20.getHumidity(); Serial.print("Temp: "); Serial.print(currentTemp); Serial.print(" Hum: "); Serial.println(currentHum); } } void animateBars() { smoothTemp += (currentTemp - smoothTemp) * 0.08; smoothHum += (currentHum - smoothHum) * 0.08; int tempBar = map(smoothTemp, 0, 50, 0, 180); int humBar = map(smoothHum, 0, 100, 0, 180); tft.fillRect(110, 85, 180, 20, PIP_BLACK); tft.fillRect(110, 85, tempBar, 20, PIP_GREEN); tft.drawRect(110, 85, 180, 20, PIP_GREEN); tft.fillRect(210, 60, 90, 25, PIP_BLACK); tft.setCursor(210, 60); tft.setTextColor(PIP_GREEN, PIP_BLACK); tft.setTextSize(2); tft.print(currentTemp, 1); tft.print(" C"); tft.fillRect(110, 155, 180, 20, PIP_BLACK); tft.fillRect(110, 155, humBar, 20, PIP_GREEN); tft.drawRect(110, 155, 180, 20, PIP_GREEN); tft.fillRect(210, 130, 90, 25, PIP_BLACK); tft.setCursor(210, 130); tft.print(currentHum, 1); tft.print(" %"); } void handleRadiationEvent() { if (!alarmActive && millis() - lastAlarmCheck > random(20000, 40000)) { lastAlarmCheck = millis(); alarmActive = true; alarmStart = millis(); Serial.println("!! RADIATION DETECTED !!"); } } void handleAlarm() { if (!alarmActive) return; digitalWrite(LED_RED, HIGH); // ---- SIRENA MODULATA ---- if (millis() - lastSirenUpdate > 15) { // velocità variazione lastSirenUpdate = millis(); if (sirenUp) { sirenFreq += 20; if (sirenFreq >= 2200) sirenUp = false; } else { sirenFreq -= 20; if (sirenFreq <= 800) sirenUp = true; } tone(SPEAKER_PIN, sirenFreq); } // Testo lampeggiante tft.setTextDatum(MC_DATUM); tft.setTextSize(2); if (millis() % 500 < 250) { tft.setTextColor(PIP_RED, PIP_BLACK); tft.drawString("!! RADIATION DETECTED !!", 160, 190); } else { tft.fillRect(10, 175, 300, 40, PIP_BLACK); } // Durata allarme 8 secondi if (millis() - alarmStart > 8000) { alarmActive = false; noTone(SPEAKER_PIN); sirenFreq = 800; sirenUp = true; digitalWrite(LED_RED, LOW); tft.fillRect(10, 175, 300, 40, PIP_BLACK); tft.setTextColor(PIP_GREEN, PIP_BLACK); tft.drawString("ALERT CLEARED", 160, 190); } } |
Punti di forza del ESP32 Miner Display LCD-2.8″
- Display integrato + ESP32 potente: non serve un microcontrollore esterno.
- Connettività Wi-Fi e Bluetooth integrata: ottimo per progetti IoT.
- Supporto a molte piattaforme e librerie grafiche: flessibilità di sviluppo.
- Espansioni hardware: slot TF, GPIO e altre connessioni inclusi.
- Disponibili vari programmi di esempio da prendere come base per crearne di propri.
Problematiche e alcune considerazioni
- Touch resistivo non capace quanto i touch capacitivi (meno reattivo e preciso).
- Display TN (non IPS): angolo di visione più limitato rispetto a moduli IPS.
- Risorse di esempio limitate: alcune librerie richiedono configurazioni manuali.
- Firmware mining non sempre aggiornato: verificare compatibilità con le ultime release di NMMiner.
Conclusione
In conclusione , il CrowPanel 2.8 inch‑ESP32 HMI Display‑320×240 TFT LCD è un display versatile, robusto e adatto sia a chi si avvicina per la prima volta al mondo ESP32 sia ai maker più esperti che cercano un modulo tutto-in-uno con connettività wireless.
Con un buon supporto software e capacità grafiche immediate, rappresenta un ottimo compromesso tra costo, funzionalità e espandibilità per applicazioni IoT interattive. Considerate poi che nella confezione troverete due display.
Prossimamente
In un prossimo post vedremo come trasformare CrowPanel 2.8 inch‑ESP32 HMI Display in una cornice digitale. State connessi!



















