Skip to Content

Stazione meteo con LilyGO TTGO T5-4.7 E-Paper

Stazione meteo con LilyGO TTGO T5-4.7 E-Paper

Il LilyGO TTGO T5-4.7 E-Paper è un modulo di sviluppo integrato che combina un display E-paper (e-ink) da 4,7 pollici con un microcontrollore ESP32-S3.

Lo schermo E-paper della scheda funziona a una risoluzione di 540 × 960 pixel con 16 livelli di scala di grigi e richiede energia solo durante le operazioni di aggiornamento, il che minimizza il consumo energetico per dati che cambiano lentamente come quelli meteorologici.

In questo tutorial imparerai come iniziare con la scheda LilyGO TTGO T5-4.7 E-Paper. Inoltre, costruiremo una stazione meteo che recupera i dati da internet da OpenWeatherMap e li visualizza sull’E-Paper.

Componenti necessari

Puoi acquistare il LilyGO TTGO T5-4.7 E-Paper da DFRobot o Amazon usando i link qui sotto. Se vuoi alimentare il display a batteria, ti servirà anche una batteria.

Consiglio una batteria ricaricabile 18650 con il relativo supporto. Tuttavia, dovrai saldare i fili del supporto al connettore batteria del display LilyGO E-Paper. Non è difficile, ma serve un saldatore.

LilyGO TTGO T5-4.7 E-Paper

Batteria ricaricabile 18650

Supporto batteria 18650

Makerguides is a participant in affiliate advertising programs designed to provide a means for sites to earn advertising fees by linking to Amazon, AliExpress, Elecrow, and other sites. As an Affiliate we may earn from qualifying purchases.

Hardware del LilyGO TTGO T5-4.7 E-Paper

La piattaforma LilyGO TTGO T5-4.7 E-Paper è una scheda controller con display E Ink da 4,7 pollici che integra un modulo ESP32-S3 con un pannello E-paper in scala di grigi collegato.

Il design è pensato per applicazioni che beneficiano di informazioni persistenti sullo schermo e basso consumo medio, dove il contenuto del display può rimanere visibile senza aggiornamenti continui. La foto sotto mostra il fronte e il retro della scheda LilyGO TTGO T5-4.7 E-Paper.

Fronte e retro del LilyGO TTGO T5-4.7 E-Paper

Processore e sottosistema memoria

La scheda è costruita attorno al modulo ESP32-S3-WROOM-1-N16R18. Questa configurazione offre 16 MB di flash onboard per firmware e risorse, e 8 MB di PSRAM per supportare operazioni intensive di memoria come buffer grafici, rendering di font e gestione dati di rete.

L’ESP32-S3 abilita anche la connettività Wi-Fi e ha potenza di calcolo sufficiente per acquisizioni periodiche di dati, elaborazione locale e aggiornamenti del display tipici di una stazione meteo.

Caratteristiche del display E-Paper

Il pannello E-paper integrato ha una risoluzione di 540 × 960 pixel in orientamento verticale e supporta la resa in scala di grigi a 16 livelli. Il display permette aggiornamenti parziali, con aggiornamenti selettivi di aree per ridurre tempo ed energia quando cambia solo una parte del contenuto.

Tuttavia, il display non deve essere aggiornato parzialmente per lunghi periodi, altrimenti rimarranno immagini residue irreversibili!

Input utente e controlli a bordo

L’input fisico è supportato da tre pulsanti, incluso uno personalizzabile dall’utente per funzioni a livello applicativo. Gli altri pulsanti sono reset e boot.

Buttons of LilyGO TTGO T5-4.7 E-Paper
Pulsanti del LilyGO TTGO T5-4.7 E-Paper

La scheda espone anche un’interfaccia dedicata a 6 pin per collegare un pannello touchscreen, acquistabile separatamente.

Interfaccia alimentazione a batteria

Per l’alimentazione a batteria, la scheda include un connettore PH 2.0 progettato per una batteria da 3,7 V. La protezione di carica e scarica è fornita da un IC di protezione HX6610S.

Battery connector of LilyGO TTGO T5-4.7 E-Paper
Connettore batteria del LilyGO TTGO T5-4.7 E-Paper

Header di espansione e compatibilità host

Un header a 40 pin è presente sulla parte superiore della scheda ed è compatibile con l’interfaccia BUS Raspberry Pi. Ecco il pinout dell’header:

Pinout for 40-pin header
Pinout per header a 40 pin (source)

Nota che le interfacce I2C (SDA, SCL) e SPI (MISO, MOSI, CS) sono accessibili lì. L’immagine sotto mostra il pinout degli altri connettori della scheda:

Pinout of LilyGO TTGO T5-4.7 E-Paper
Pinout del LilyGO TTGO T5-4.7 E-Paper (source)

GPIO

La tabella seguente elenca i pin GPIO e il loro uso interno da parte dell’ESP32 integrato. Solo i pin GPIO 45, 10, 48 e 39 sono disponibili per applicazioni utente.

GPIO ESP32S3Collegato aLibero
1374HCT4094D CFG_DATA
1274HCT4094D CFG_CLK
074HCT4094D CFG_STR
38E-paper CKV
40E-paper STH
41E-paper CKH
8E-paper D0
1E-paper D1
2E-paper D2
3E-paper D3
4E-paper D4
5E-paper D5
6E-paper D6
7E-paper D7
21Pulsante
14ADC batteria
16SD MISO❌*
15SD MOSI❌*
11SD SCK❌*
42SD CS❌*
18SDA
17SCL
47TouchPanel IRQ
45Non collegato
10Non collegato
48Non collegato
39Non collegato
Pin GPIO (source)

Specifiche tecniche

La tabella seguente riassume le specifiche tecniche della stazione meteo con LilyGO TTGO T5-4.7 E-Paper:

MCUESP32-S3-WROOM-1-N16R8
Connettività wirelessWi-fi Bluetooth V5.0
Flash16MB
PSRAM8MB
Supporto PCF8563 RTCRilevamento capacità batteria
Driver ICEDO47TC1
Dimensioni4,7 pollici
Livelli di grigio16
Risoluzione540 x 960 pixel
Corrente in deep-sleep~170µA

Gli schemi elettrici della scheda display si trovano in github repo.

Versioni

Nota che esistono almeno tre versioni diverse del LilyGO TTGO T5-4.7 E-Paper. C’è una versione iniziale con cinque pulsanti e un supporto per batteria 18650. Vedi la foto sotto:

arly version of the LilyGO 4.7 E-Paper
Versione iniziale del LilyGO 4.7 E-Paper

Non possiedo questa versione e quindi non posso dirti se gli esempi di codice in questo tutorial funzionano con questa scheda.

Tuttavia, ho le schede per le due versioni più recenti V2.3 del 2021-06-10 e V2.4 del 2024-12-03. Ho testato il codice per entrambe le schede e funziona. Nota che queste schede hanno tre pulsanti e nessun supporto batteria. La foto sotto mostra le due schede con i numeri di versione visibili sul retro:

Two versions of the LilyGO TTGO T5-4.7 E-Paper
Due versioni del LilyGO TTGO T5-4.7 E-Paper

Installazione del Core ESP32

Il LilyGO TTGO T5-4.7 usa un ESP32 e dobbiamo installare una versione specifica (2.017) del core ESP32. Inizia aprendo il dialogo Preferenze selezionando “Preferences…” dal menu “File”. Si aprirà il dialogo Preferenze mostrato sotto.

Sotto la scheda Settings troverai una casella di modifica in fondo al dialogo etichettata “Additional boards manager URLs“:

Additional boards manager URLs in Preferences
URL aggiuntivi per il board manager nelle Preferenze

In questo campo incolla il seguente URL:

https://espressif.github.io/arduino-esp32/package_esp32_dev_index.json

Questo permetterà all’IDE Arduino di sapere dove trovare le librerie core ESP32. Successivamente installeremo le schede ESP32 usando il Boards Manager.

Apri il Boards Manager tramite “Tools -> Boards -> Board Manager”. Vedrai il Boards Manager apparire nella barra laterale sinistra. Inserisci “ESP32” nel campo di ricerca in alto e dovresti vedere due tipi di schede ESP32; le “Arduino ESP32 Boards” e le schede “esp32 by Espressif”. Vogliamo le librerie “esp32 by Espressif”.

Nel menu a tendina per esp32 seleziona la versione 2.0.17 e poi premi il pulsante INSTALL. Dopo un’installazione riuscita, dovresti vedere l’immagine seguente:

Altre versioni (più vecchie) del core ESP32 probabilmente funzionano, ma non le ho provate. Quello che non funziona al momento sono le versioni più recenti 3.x.

Installazione delle librerie

Successivamente dobbiamo installare librerie specifiche e versioni di librerie. Prima clicca su questo EPD47 Library link della libreria e scarica il file “EPD47-master.zip”.

Estrai il file ZIP per ottenere il contenuto. Dovresti vedere i seguenti file in una cartella estratta chiamata “EPD47-master”:

Dobbiamo copiare la cartella “EPD47-master” nella cartella “libraries” dell’IDE Arduino. Su Windows la cartella “libraries” si trova tipicamente in:

C:\Users\<username>\OneDrive\Documents\Arduino\libraries

Poiché questa cartella contiene già librerie installate, ti consiglio di rinominarla temporaneamente, ad esempio in “_libraries”, e creare una nuova cartella chiamata “libraries”. Così eviti conflitti con le librerie già installate e non le perdi. Poi potrai facilmente tornare indietro. L’immagine sotto mostra come dovrebbe apparire la tua cartella “Arduino” con le librerie:

Ora copiamo la cartella “EPD47-master” nella nuova cartella “libraries” come mostrato sotto:

Infine, dobbiamo installare la versione 6.19.0 della libreria Arduinojson di Benoit Blanchon. Apri il LIBRARY MANAGER, inserisci “arduinojson” nella barra di ricerca e installa la libreria. Dopo un’installazione riuscita vedrai l’immagine seguente:

Se poi guardi di nuovo nella cartella delle librerie troverai ora la libreria EPD47-master e la libreria ArduinoJson:

Scheda ESP32-S3 e impostazioni

Il LilyGO TTGO T5-4.7 E-Paper usa un ESP32-S3 e quindi selezioniamo la scheda “ESP32S3 Dev Module”. Per farlo, clicca sul menu a tendina e poi su “Select other board and port…”:

Drop-down Menu for Board Selection

Si aprirà un dialogo dove puoi inserire “esp32s3 dev” nella barra di ricerca. Vedrai la scheda “ESP32S3 Dev Module” sotto Boards. Cliccaci sopra, seleziona la porta COM per attivarla e poi clicca OK:

Board Selection Dialog "ESP32S3 Dev Module" board

Nota che devi collegare la scheda tramite cavo USB al computer prima di poter selezionare una porta COM.

Impostazioni Tools

Prima di programmare la scheda, devi regolare le impostazioni. Vai su “Tools” e seleziona le impostazioni mostrate sotto:

Importanti sono “USB CDC On Boot: Enable” per permettere la comunicazione seriale con la scheda, “Flash Size : 16MB(128Mb)”, “Partition Scheme: 16M Flash(3M APP/9.9MB FATFS)” e “PSRAM: OPI PSRAM” per configurare la memoria. Le altre impostazioni di default vanno bene così.

Upload

Di solito puoi caricare il codice tramite Arduino IDE e la scheda passerà automaticamente in modalità upload. Tuttavia, se la scheda è in deep-sleep o bloccata in un loop di crash, puoi usare questa sequenza per forzarla in modalità upload:

  1. Premi e tieni premuto il pulsante BOOT(IO0)
  2. Mentre tieni premuto BOOT(IO0), premi RST
  3. Rilascia RST
  4. Rilascia il pulsante BOOT(IO0)

Esempio di codice: Pulsante

In questo primo esempio di codice verifichiamo solo che possiamo programmare la scheda, rilevare la pressione di un pulsante e che la comunicazione seriale funzioni:

#define BTN 21

void setup() {
  Serial.begin(112500);
  pinMode(BTN, INPUT);
  Serial.println("running...");
}

void loop() {
  if (!digitalRead(BTN)) {
    Serial.println("pressed");
    delay(100);
  }
}

Iniziamo definendo il pin GPIO 21 per il pulsante etichettato SENSOP_VN sulla scheda.

#define BTN 21

Questo è l’unico pulsante che possiamo usare per input utente. È il pulsante accanto allo slot per la scheda SD:

Nella funzione setup inizializziamo la comunicazione seriale, dichiariamo il pin del pulsante come input e stampiamo “running…” sul monitor seriale. Il pulsante è cablato internamente con una resistenza di pullup, quindi non serve abilitare i pullup impostando il pin mode.

void setup() {
  Serial.begin(112500);
  pinMode(BTN, INPUT);
  Serial.println("running...");
}

Nella funzione loop leggiamo lo stato attuale del pulsante e se il valore restituito è false, sappiamo che il pulsante è premuto e stampiamo “pressed” sul monitor seriale.

void loop() {
  if (!digitalRead(BTN)) {
    Serial.println("pressed");
    delay(100);
  }
}

Prova prima questo codice per assicurarti di poter programmare la scheda e vedere l’output seriale. Se hai problemi, verifica che le impostazioni Tools siano corrette.

Esempio di codice: Display

Il secondo esempio mostra come controllare il display E-paper. Disegneremo un cerchio e stamperemo il testo “Makerguides” sul display:

Dai un’occhiata veloce al codice completo e poi ne analizziamo i dettagli:

#include "epd_driver.h"
#include "firasans.h"

uint8_t *framebuffer = NULL;

void create_framebuffer() {
  size_t framesize = EPD_WIDTH * EPD_HEIGHT / 2;
  framebuffer = (uint8_t *)ps_calloc(sizeof(uint8_t), framesize);
  if (!framebuffer) {
    Serial.println("alloc memory failed !!!");
    return;
  }
  memset(framebuffer, 0xFF, framesize);
}

void init_display() {
  create_framebuffer();
  epd_init();
  epd_poweron();
  epd_clear();
}

void setup() {
  Serial.begin(115200);
  delay(1000);
  init_display();

  epd_draw_circle(EPD_WIDTH / 2, EPD_HEIGHT / 2, 150, 0, framebuffer);
  
  const char *text= "Makerguides";
  int cursor_x = 355;
  int cursor_y = 270;
  writeln((GFXfont *)&FiraSans, text, &cursor_x, &cursor_y, framebuffer);

  epd_draw_grayscale_image(epd_full_screen(), framebuffer);
  epd_poweroff_all();
}

void loop() {
}

Importazioni

Iniziamo includendo due file header che forniscono l’API del driver display e una definizione di font. “epd_driver.h” espone funzioni come inizializzazione, controllo alimentazione, primitive di disegno e invio del buffer pixel al pannello, mentre “firasans.h” fornisce i dati dei glifi usati dalla routine di rendering del testo.

#include "epd_driver.h"
#include "firasans.h"

Stato globale

Creiamo un puntatore globale chiamato framebuffer per memorizzare l’indirizzo di un buffer pixel allocato dinamicamente in memoria. Le funzioni del driver display in questo sketch disegnano prima in questo buffer, e solo dopo l’intero buffer viene inviato al pannello E-paper per la visualizzazione.

uint8_t *framebuffer = NULL;

create_framebuffer

La funzione create_framebuffer() si occupa di allocare RAM per l’immagine in scala di grigi da visualizzare. L’idea chiave è che il pannello E-paper si aspetta una rappresentazione compatta, e l’espressione EPD_WIDTH * EPD_HEIGHT / 2 riflette quanti byte servono quando ogni pixel usa 4 bit (mezzo byte). Con la scala di grigi a 4 bit, due pixel possono essere memorizzati per byte, quindi il totale dei pixel è diviso per due.

Dopo aver calcolato la dimensione, la funzione usa ps_calloc per allocare e azzerare la memoria. Su target ESP32, questo allocatore è tipicamente usato per posizionare grandi buffer in PSRAM quando disponibile, importante perché un buffer a frame completo in scala di grigi può essere troppo grande per la RAM interna. Se l’allocazione fallisce, la funzione stampa un messaggio diagnostico sulla console seriale e ritorna.

Infine, il buffer viene riempito con 0xFF. In molti formati di buffer per E-paper, 0xFF corrisponde a “bianco” o al valore di grigio più chiaro su tutto il buffer, quindi questo passaggio crea effettivamente una tela bianca pulita prima di qualsiasi disegno.

void create_framebuffer() {
  size_t framesize = EPD_WIDTH * EPD_HEIGHT / 2;
  framebuffer = (uint8_t *)ps_calloc(sizeof(uint8_t), framesize);
  if (!framebuffer) {
    Serial.println("alloc memory failed !!!");
    return;
  }
  memset(framebuffer, 0xFF, framesize);
}

init_display

La funzione init_display() centralizza la sequenza di avvio per l’hardware E-paper e assicura che il buffer esista prima di qualsiasi chiamata di disegno. Chiama prima create_framebuffer() così che le funzioni di disegno successive abbiano una destinazione valida.

La chiamata a epd_init() tipicamente inizializza il controller display, configura GPIO/SPI e prepara lo stato interno del driver. epd_poweron() abilita le linee di alimentazione del pannello e porta l’hardware in uno stato operativo. E epd_clear() pulisce il pannello, utile su E-paper perché il contenuto vecchio può persistere se il pannello non viene esplicitamente aggiornato.

void init_display() {
  create_framebuffer();
  epd_init();
  epd_poweron();
  epd_clear();
}

setup

La funzione setup() viene eseguita una volta all’avvio e svolge tutto il lavoro in questo sketch, perciò loop() è vuota. Iniziamo inizializzando la porta seriale a 115200 baud per permettere l’output di debug. Poi aspettiamo brevemente per assicurare che la connessione seriale sia stabile prima di continuare. Successivamente chiamiamo init_display() per allocare il buffer e accendere e pulire il pannello.

void setup() {
  Serial.begin(115200);
  delay(1000);
  init_display();

Dopo l’inizializzazione, disegniamo un cerchio nel buffer. Il cerchio è centrato sullo schermo usando metà larghezza e altezza del display. Il raggio è 150, e il valore colore 0 è passato come livello di grigio. Nelle convenzioni tipiche a 4 bit usate da molti driver E-paper, valori numerici più bassi corrispondono a pixel più scuri, quindi 0 è comunemente usato per il nero. L’ultimo argomento è framebuffer, che rende esplicito che l’operazione di disegno modifica il buffer di memoria invece di aggiornare subito il display.

  epd_draw_circle(EPD_WIDTH / 2, EPD_HEIGHT / 2, 150, 0, framebuffer);

Poi prepariamo una stringa C da renderizzare e impostiamo le coordinate del cursore. La chiamata a writeln() disegna la stringa usando il font FiraSans nel buffer alla posizione di partenza specificata.

  const char *text= "Makerguides";
  int cursor_x = 355;
  int cursor_y = 270;
  writeln((GFXfont *)&FiraSans, text, &cursor_x, &cursor_y, framebuffer);

Una volta che cerchio e testo sono disegnati in RAM, lo sketch esegue l’aggiornamento dello schermo. La chiamata a epd_draw_grayscale_image() invia il buffer al display. Il primo argomento, epd_full_screen(), indica che la regione di aggiornamento è l’intero display e non un sotto-rect, coerente con il fatto che lo sketch ha preparato un buffer a frame completo. Infine, epd_poweroff_all() spegne l’alimentazione dell’E-paper, dato che l’E-paper può mantenere l’immagine senza energia una volta completato l’aggiornamento.

  epd_draw_grayscale_image(epd_full_screen(), framebuffer);
  epd_poweroff_all();
}

loop

La funzione loop() è vuota perché lo sketch è progettato come un rendering one-shot. Il dispositivo si inizializza, disegna nel buffer, aggiorna il display una volta, spegne il pannello e poi non fa altro. Questo schema è tipico per progetti E-paper alimentati a batteria che si svegliano, aggiornano il contenuto e tornano in deep-sleep.

Altri esempi

Per altri esempi, ad esempio come disegnare linee, rettangoli e immagini in scala di grigi, vedi la cartella sotto Xinyuan-LilyGO/LilyGo-EPD47/tree/esp32s3/examples.

Esempio di codice: Stazione meteo

In quest’ultimo esempio imparerai come far funzionare una stazione meteo sul LilyGO TTGO T5-4.7 E-Paper. I dati meteo sono ricevuti da internet dal servizio OpenWeatherMap, che è gratuito ma richiede la registrazione – ne parleremo più avanti.

Il codice originale che uso qui è di David Bird del 2021 e varie versioni di questo codice si trovano su Xinyuan-LilyGO/LilyGo-EPD47/tree/esp32s3, Xinyuan-LilyGO/LilyGo-EPD-4-7-OWM-Weather-Display e DzikuVx/LilyGo-EPD-4-7-OWM-Weather-Display, per esempio. Tuttavia, nessuno di questi esempi funzionava bene sul mio LilyGO TTGO T5-4.7 E-Paper. Ho quindi fatto alcune modifiche.

Modifiche

Prima ho sistemato alcuni problemi con il layout dei dati meteo visualizzati. Se guardi il display creato dal codice originale, puoi vedere che il testo delle temperature non è ben allineato:

Così ho spostato un po’ gli elementi di testo per migliorare il layout:

Ho anche integrato l’immagine della luna e le icone per tramonto e alba dal DzikuVx/LilyGo-EPD-4-7-OWM-Weather-Display nel codice Xinyuan-LilyGO/LilyGo-EPD-4-7-OWM-Weather-Display.

Carica batteria

Poi ho notato che il display non funziona e non mostra l’icona di carica batteria quando alimentato a batteria. Questo perché 1) il codice originale blocca finché la comunicazione seriale non è stabilita, cosa che non succede senza connessione USB a un computer:

    Serial.begin(115200);
    while (!Serial) ;

Il codice while (!Serial) deve essere rimosso e sostituito da un breve ritardo, ad esempio delay(1000).

2) Il codice originale legge la tensione batteria dal pin 36 ma per i miei display la tensione batteria è misurata al pin 14:

float voltage = analogRead(14) / 4096.0 * 6.566 * (vref / 1000.0);

Con queste modifiche puoi alimentare il tuo LilyGO TTGO T5-4.7 E-Paper a batteria e l’icona batteria ti indicherà la carica residua.

Posizione città

Il codice originale usa il nome di una città per recuperare le informazioni meteo per quella località. Tuttavia, il servizio OpenWeatherMap permette anche di ottenere i dati meteo attuali per una posizione data da latitudine e longitudine:

https://api.openweathermap.org/data/2.5/weather?lat={lat}&lon={lon}&appid={API key}

Potenzialmente, questo è più preciso e non devi usare il nome specifico della città riconosciuto da OpenWeatherMap. Trovare latitudine e longitudine per la tua posizione è facile. Vai su Google Maps e fai clic destro. Apparirà un popup con i numeri di latitudine e longitudine in alto. Vedi lo screenshot seguente:

Latitude and Longitude from Google Maps
Latitudine e longitudine da Google Maps

Connessione USB

Infine, il codice originale aggiorna i dati meteo sul display una volta all’ora e va in deep-sleep tra gli aggiornamenti per risparmiare batteria. Questo è ottimo, ma rende difficili le modifiche al codice, perché la connessione USB si perde in deep-sleep e non puoi caricare il codice.

Devi resettare la scheda e temporizzare il caricamento in modo che inizi mentre la connessione USB è ancora attiva subito dopo il reset. Vedi la sezione Upload sopra. Poiché è difficile, ho aggiunto codice che impedisce l’entrata in deep-sleep quando il pulsante programmabile dall’utente SENSOP_VN è premuto:

  if(digitalRead(21)) {  // SENSOP_VN button NOT pressed
    BeginSleep();
  }

Questo significa che, se vuoi caricare nuovo codice, tieni premuto SENSOP_VN durante il caricamento. La scheda non entrerà in deep-sleep dopo il reset e la connessione USB rimarrà attiva. Una volta caricato, puoi premere RST di nuovo per riavviare la scheda con deep-sleep attivo.

Open weather map

Il codice usa il servizio gratuito OpenWeatherMap per ricevere dati meteo da internet. Tuttavia, prima di usare qualsiasi API di OpenWeather devi avere una chiave API e per questo serve un account. Per creare un account gratuito vai su sign-up page e inserisci i tuoi dati.

Sign-up page at OpenWeather
Pagina di registrazione su OpenWeather

Dopo vai alla pagina di creazione api-key e crea una chiave API. La chiave API è quella lunga stringa “sdfd87fakeby6apikeysf4z” che vedi nello screenshot sotto. La tua chiave sarà diversa.

Create API-key at OpenWeather
Crea chiave API su OpenWeather

Una volta ottenuta la chiave API (e latitudine e longitudine della tua posizione), puoi provarla nel browser. Inserisci il seguente URL, con la tua chiave API, nel browser:

https://api.openweathermap.org/data/2.5/weather?lat=44.34&lon=10.99&appid={API key}

Nota che il browser Chrome ha un pulsante Pretty Print che puoi cliccare per vedere i dati meteo recuperati in JSON formattato bene:

Così puoi testare la tua chiave API e i valori di latitudine e longitudine. Se ti serve aiuto, dai un’occhiata al nostro tutorial: Simple ESP32 Internet Weather Station.

Scarica codice e imposta parametri

Dopo aver verificato la tua chiave API, puoi scaricare il codice per la stazione meteo come file ZIP: weather_lilygo_t5_epd.zip . Estrailo e apri il file “weather_lilygo_t5_epd.ino” nella cartella “weather_lilygo_t5_epd” nel tuo IDE Arduino.

Come ultimo passo devi impostare le credenziali Wi-Fi e i parametri dei dati meteo. Clicca sulla scheda “owm_credentials.h” e imposta SSID, Password, chiave API e le informazioni sulla posizione:

A seconda della tua posizione potresti voler cambiare anche i parametri Language, Hemisphere, Units e Timezone.

C’è anche un esempio di codice su come configurare la stazione meteo tramite interfaccia web: Xinyuan-LilyGO/LilyGo-EPD-4-7-OWM-Weather-Display/tree/web, se preferisci questo invece di impostare i parametri nel codice.

Dopo aver regolato le impostazioni, carica il codice sulla tua scheda LilyGO TTGO T5-4.7 e dopo un breve sfarfallio dovresti vedere i dati meteo apparire sul display:

Weather data on LilyGO TTGO T5-4.7 E-Paper
Dati meteo su LilyGO TTGO T5-4.7 E-Paper

Collegamento batteria 18650

La scheda LilyGO TTGO T5-4.7 E-Paper viene fornita con un connettore e circuito di ricarica per una batteria LiPo esterna. Ho collegato una batteria ricaricabile 18650. Puoi usare anche una batteria LiPo più piccola (flat) ma tendono a costare di più o avere meno capacità. La foto sotto mostra come collegare la batteria 18650:

18650 battery connected to LilyGO TTGO T5-4.7
Batteria 18650 collegata al LilyGO TTGO T5-4.7

Durata operativa

Una tipica batteria 18650 ha una capacità da 2300 a 3600mAh e la corrente di picco che l’ESP32 assorbe usando il Wi-Fi può arrivare a 400mA. La corrente in deep-sleep della scheda LilyGO TTGO T5-4.7 è circa 170µA, ma non l’ho misurata.

Se usiamo una 18650 da 3300mAh, e attiviamo il Wi-Fi per un secondo ogni ora per scaricare i dati meteo, otteniamo un’autonomia stimata di oltre un anno con una singola carica.

Ecco il calcolo: con una corrente media di 400mA × 1s / 3600s = 0.111mA per il Wi-Fi e una corrente in deep-sleep di 0.17mA, la corrente media totale è 0.111mA + 0.17mA = 0.281mA. Assumendo una batteria da 3300mAh, l’autonomia stimata è quindi 3300mAh / 0.281mA ≈ 11744h ≈ 1,34 anni.

Conclusioni

In questo tutorial hai imparato come costruire una stazione meteo con il display LilyGO TTGO T5-4.7 E-Paper. Per maggiori informazioni sul LilyGO TTGO T5 dai un’occhiata a Wiki e agli esempi di codice su Xinyuan-LilyGO/LilyGo-EPD47/tree/esp32s3/examples.

La documentazione menziona che lo schermo non dovrebbe essere aggiornato parzialmente per lunghi periodi, perché lascerebbe immagini residue irreversibili. Quindi fai attenzione quando costruisci applicazioni che usano Partial Refresh.

Per altri esempi su display E-paper dai un’occhiata ai nostri Weather Station on e-Paper Display, Simple ESP32 Internet Weather Station, Temperature Plotter on e-Paper Display, Monthly Calendar on E-Paper Display e ai tutorial Digital Clock on e-Paper Display.

Se hai domande sentiti libero di lasciarle nella sezione commenti.

Buon divertimento con il tinkering 😉