Site icon Renzo Mischianti

ESP32 e Display eInk SSD1683: come realizzare una Semplice Stazione Meteo (anche su CrowPanel 4.2″ HMI) con le API di OpenWeatherMap

Spread the love

Come abbiamo visto precedentemente, quando si lavora con display E-Ink da 4.2″ pilotati da un ESP32 e dal controller SSD1683, la gestione corretta di font e dimensioni del testo è fondamentale. I display e-paper sono diventati sempre più popolari nei progetti IoT grazie al consumo energetico ultraridotto, all’elevata leggibilità alla luce del giorno e alla capacità di mantenere un’immagine senza assorbire energia. In combinazione con un microcontrollore ESP32, aprono la strada ad applicazioni pratiche come cruscotti smart, pannelli informativi e stazioni meteo sempre attive alimentate a batteria.

In questa guida ci concentreremo sul display ePaper da 4.2″ basato su SSD1683 (400×300 pixel) e mostreremo come collegarlo a un ESP32 o ESP8266, configurare le librerie necessarie e visualizzare informazioni utili recuperate in tempo reale dalle API OpenWeatherMap. Imparerai a cablare il display, configurare la libreria grafica GxEPD2, fare il parsing delle risposte JSON e disegnare un’interfaccia utente pulita, basata su icone, che si aggiorna automaticamente una volta all’ora.

Il risultato è una stazione meteo minimalista che consuma quasi zero energia mantenendo i dati sempre visibili — un progetto perfetto per monitor da interno, dispositivi IoT a basso consumo o anche esperimenti didattici con la tecnologia ePaper.

Specifiche rapide

Collegare l’SSD1683 a un ESP32/ESP8266

Qui puoi trovare la selezione di ESP32 da acquistare ESP32 Dev Kit v1 - TTGO T-Display 1.14 ESP32 - NodeMCU V3 V2 ESP8266 Lolin32 - NodeMCU ESP-32S - WeMos Lolin32 - WeMos Lolin32 mini - ESP32-CAM programmer - ESP32-CAM bundle - ESP32-WROOM-32 - ESP32-S

Per interfacciare un display eInk SSD1683 generico con il tuo ESP32 o ESP8266, devi collegare i seguenti pin:

Pin SSD1683DescrizioneEsempio ESP32
VCCAlimentazione3.3V
GNDMassaGND
SDAMOSIGPIO 23
SDLSCKGPIO 18
CSChip SelectGPIO 5
DCDati/ComandoGPIO 17
RSTResetGPIO 16
BUSYOccupatoGPIO 4

Nota: verifica sempre i requisiti di tensione e il pinout del tuo specifico modulo display.

Qui per acquistare il display e-ink (la mia scelta) CrowPanel ESP32 4.2” E-paper HMI Display - CrowPanel ESP32 4.2” E-paper HMI Display from ALiexpress - WeAct 4.2" Epaper Module SSD1683

Riferimento pinout CrowPanel

Consulta il mio articolo completo: CrowPanel ESP32-S3 4.2” HMI – Pinout e Specifiche

Semplice Stazione Meteo con API OpenWeatherMap


In questo esempio realizziamo una stazione meteo minimalista utilizzando un ESP32, un display E-Ink SSD1683 da 4.2″ e le API OpenWeatherMap. L’obiettivo è recuperare i dati meteo in tempo reale per una città specifica e visualizzarli su un pannello ePaper a bassissimo consumo, ideale per applicazioni come monitor da interno o display informativi alimentati a batteria. Questo esempio è estratto e semplificato dalla demo Elecrow su GitHub.

Lo sketch inizia collegando l’ESP32 alla tua rete WiFi e interrogando l’API OpenWeatherMap con una chiave API fornita. La risposta JSON include temperatura, umidità, pressione al livello del mare, velocità del vento e condizioni meteo (es. Sereno, Pioggia, Nuvoloso), che vengono interpretate tramite la libreria Arduino_JSON.

L’interfaccia grafica è disegnata con la libreria GxEPD2, che fornisce supporto ottimizzato per il controller SSD1683. Un set di icone memorizzate in PROGMEM (tramite pic.h) viene visualizzato per adattarsi dinamicamente alle condizioni meteo. Il layout utilizza un’interfaccia pulita e divisa, con informazioni grafiche e testuali affiancate, che mostrano:

Tutto il rendering avviene in un ciclo firstPage/nextPage per mantenere la compatibilità con la logica di aggiornamento parziale e la RAM limitata. Dopo ogni aggiornamento, il display entra in deep sleep (hibernate()) e l’alimentazione viene eventualmente disattivata per risparmiare energia.

Il meteo viene aggiornato una volta all’ora, ma lo schermo ePaper mantiene l’ultima immagine senza alcun consumo energetico tra un aggiornamento e l’altro.

Questo progetto mostra come combinare dati internet in tempo reale, parsing JSON e rendering grafico su un display ePaper — rendendolo ideale per dashboard IoT, automazione domestica o progetti didattici.

/*
  Semplice Stazione Meteo con API OpenWeatherMap
  Autore: Renzo Mischianti
  Sito web: https://mischianti.org

  Descrizione:
  Questo sketch mostra come costruire una semplice stazione meteo
  usando un ESP32, un display ePaper SSD1683 da 4.2" e le API OpenWeatherMap.
  Il display mostra condizioni meteo, temperatura, umidità,
  velocità del vento e pressione al livello del mare con icone e testo.
*/

Configura la tua Stazione Meteo

Questo blocco di codice imposta le credenziali WiFi e la configurazione delle API OpenWeatherMap:

const char* ssid = "<YOUR-SSID>";
const char* password = "<YOUR-PASSWD>";

String openWeatherMapApiKey = "<YOUR-MAP-API>";
String city = "<YOUR-CITY>";
String countryCode = "<YOUR-COUNTRY-CODE>";

Insieme, questi valori permettono al dispositivo di costruire una richiesta API corretta e ottenere i dati meteo in tempo reale.

Costruire l’URL di Richiesta API

String serverPath = "http://api.openweathermap.org/data/2.5/weather?q=" +
                    city + "," + countryCode +
                    "&APPID=" + openWeatherMapApiKey +
                    "&units=metric";

Inviare la Richiesta e Fare il Parsing del JSON

jsonBuffer = httpGETRequest(serverPath.c_str());
myObject = JSON.parse(jsonBuffer);
if (JSON.typeof(myObject) == "undefined") return;

Estrarre i Dati Meteo

weather     = JSON.stringify(myObject["weather"][0]["main"]);
temperature = JSON.stringify(myObject["main"]["temp"]);
humidity    = JSON.stringify(myObject["main"]["humidity"]);
sea_level   = JSON.stringify(myObject["main"]["sea_level"]);
wind_speed  = JSON.stringify(myObject["wind"]["speed"]);
city_js     = JSON.stringify(myObject["name"]);

Determinare l’Icona Meteo

if (weather.indexOf("cloud") >= 0)           weather_flag = 1;
else if (weather.indexOf("clear") >= 0)      weather_flag = 3;
else if (weather.indexOf("rain") >= 0)       weather_flag = 5;
else if (weather.indexOf("thunderstorm") >= 0) weather_flag = 2;
else if (weather.indexOf("snow") >= 0)       weather_flag = 4;
else                                         weather_flag = 0;

In base alla parola chiave nella descrizione meteo, viene impostato weather_flag per mostrare l’icona corrispondente sullo schermo ePaper.

Ecco il file aggiuntivo pic.h.

Se vuoi cambiare l’immagine grafica, puoi usare il convertitore online.

Grazie

  1. ESP32: pinout, specs and Arduino IDE configuration
  2. ESP32: integrated SPIFFS Filesystem
  3. ESP32: manage multiple Serial and logging
  4. ESP32 practical power saving
    1. ESP32 practical power saving: manage WiFi and CPU
    2. ESP32 practical power saving: modem and light sleep
    3. ESP32 practical power saving: deep sleep and hibernation
    4. ESP32 practical power saving: preserve data, timer and touch wake up
    5. ESP32 practical power saving: external and ULP wake up
    6. ESP32 practical power saving: UART and GPIO wake up
  5. ESP32: integrated LittleFS FileSystem
  6. ESP32: integrated FFat (Fat/exFAT) FileSystem
  7. ESP32-wroom-32
    1. ESP32-wroom-32: flash, pinout, specs and IDE configuration
  8. ESP32-CAM
    1. ESP32-CAM: pinout, specs and Arduino IDE configuration
    2. ESP32-CAM: upgrade CamerWebServer with flash features
  9. ESP32: use ethernet w5500 with plain (HTTP) and SSL (HTTPS)
  10. ESP32: use ethernet enc28j60 with plain (HTTP) and SSL (HTTPS)
  11. How to use SD card with esp32
  12. esp32 and esp8266: FAT filesystem on external SPI flash memory
  1. Firmware and OTA update management
    1. Firmware management
      1. ESP32: flash compiled firmware (.bin)
      2. ESP32: flash compiled firmware and filesystem (.bin) with GUI tools
    2. OTA update with Arduino IDE
      1. ESP32 OTA update with Arduino IDE: filesystem, firmware, and password
    3. OTA update with Web Browser
      1. ESP32 OTA update with Web Browser: firmware, filesystem, and authentication
      2. ESP32 OTA update with Web Browser: upload in HTTPS (SSL/TLS) with self-signed certificate
      3. ESP32 OTA update with Web Browser: custom web interface
    4. Self OTA uptate from HTTP server
      1. ESP32 self OTA update firmware from the server
      2. ESP32 self OTA update firmware from the server with version check
      3. ESP32 self-OTA update in HTTPS (SSL/TLS) with trusted self-signed certificate
    5. Non-standard Firmware update
      1. ESP32 firmware and filesystem update from SD card
      2. ESP32 firmware and filesystem update with FTP client
  1. Integrating LAN8720 with ESP32 for Ethernet Connectivity with plain (HTTP) and SSL (HTTPS)
  2. Connecting the EByte E70 to ESP32 c3/s3 devices and a simple sketch example
  3. ESP32-C3: pinout, specs and Arduino IDE configuration
  4. Integrating W5500 with ESP32 Using Core 3: Native Ethernet Protocol Support with SSL and Other Features
  5. Integrating LAN8720 with ESP32 Using Core 3: Native Ethernet Protocol Support with SSL and Other Features
  6. Dallas ds18b20:
  7. Guide to I2C on ESP32: Communication with Heterogeneous 5V and 3.3V Devices, Additional Interface Management and Scanner
  8. Display


Spread the love
Exit mobile version