Weather station


Stație meteo folosind un ESP32 LilyGo T5 cu ePaper

În proiectul de azi afișez date meteo culese de pe un site specializat (https://www.meteoromania.ro/), cum ar fi temperatura actuală, umiditatea sau alte informații meteorologice, și pentru asta am folosit  capacitatea ESP32 de a face cereri HTTPS către serverul site-ului pentru a obține aceste date. Pe lângă asta am conectat dispozitivul și la serverul meu MQTT configurat în Home Asistant, și afișez data și ora de la un server NTP. Iată pașii de bază pentru a realiza aceste configurări în cadrul proiectului:

  • Adăugarea conectivității WiFi la ESP32: Asigură-te că ESP32 LilyGo T5 este configurat pentru a se conecta la rețeaua WiFi disponibilă. Poți folosi biblioteca WiFi pentru a facilita procesul de configurare a rețelei WiFi.
  • Realizarea cererilor HTTPS: Folosește biblioteca ESP32 ArduinoHttpClient pentru a face cereri HTTPS către serverul site-ului de unde dorești să preiei datele meteo. În mod tipic, vei face o cerere GET la un endpoint care returnează datele într-un format ușor de parsat, cum ar fi JSON sau XML , iar în cazul acesta avem datele în format JSON.
    • Folosirea unei biblioteci HTTPS: În loc să folosești biblioteca standard HTTPClient, care este destinată cererilor HTTP nesecurizate, va trebui să utilizezi o bibliotecă care să permită cereri HTTPS. Pentru ESP32, poți folosi biblioteca ArduinoHttpClient, care suportă cereri HTTPS prin intermediul bibliotecii BearSSL.
    • Configurarea cererii HTTPS: Veți trebui să specificați adresa URL a serverului meteo și să configurați cererea HTTPS pentru a face o cerere GET la acea adresă.
    • Gestionarea certificatului SSL/TLS: Pentru a valida certificatul SSL/TLS al serverului meteo și pentru a asigura o conexiune securizată, va trebui să furnizezi bibliotecii SSL/TLS a ESP32-ului un set de certificate de încredere configurat în aplicație.Obținerea certificatului se poate  face urmând pașii din imaginile de mai jos , eu am folosit browser-ul Opera, și după încărcarea paginii se dă click pe lăcățel:
      Export the certificate
      Export the certificate

      Apoi click pe “Certificat is valid”:

      Export the certificate

      Și apoi se exportă certificatul și se poate folosi:

      Pentru a accesa în mod securizat website-ul,
      vei avea nevoie de acest certificat SSL/TLS care să permită ESP32-ului tău
      să stabilească o conexiune sigură cu serverul site-ului.

  • Parsarea datelor: După ce primești răspunsul de la cererea HTTPS, vei trebui să parsezi datele JSON (cu lib-ul ArduinoJson) pentru a extrage informațiile relevante, cum ar fi temperatura, umiditatea sau prognoza.
  • Afișarea datelor pe display-ul ePaper: După ce ai extras informațiile dorite, le poți afișa pe display-ul ePaper în mod similar cu afișarea datelor de la senzorii locali.
  • Actualizarea periodică a datelor: Pentru a menține informațiile actualizate, poți programa ESP32 să facă cereri HTTPS la intervale regulate pentru a actualiza datele meteo.

Conexiune la serverul MQTT pentru a citi datele de temperatură:

  • Instalarea bibliotecilor MQTT: Asigură-te că ai instalat biblioteca MQTT pentru Arduino. Poți folosi, de exemplu, biblioteca PubSubClient.
  • Conexiunea la serverul MQTT: Configură ESP32 pentru a se conecta la serverul MQTT și pentru a se abona la subiectul care trimite datele de temperatură.
  • Citirea datelor de temperatură: După ce te-ai abonat la subiectul corespunzător, în cazul meu am avut deja configurat un senzor de temperatură dintr-un proiect anterior, poți citi datele de temperatură atunci când sunt publicate pe acest subiect.
    MQTT config in Home assistant
    MQTT config in Home assistant

Afișare orei și datei

Pentru a afișa data și ora folosind un server NTP (Network Time Protocol) pe ESP32 LilyGo T5, poți urma acești pași:

  • Inițializarea și configurarea clientului NTP: În cod am apelat funcția configTime  și am configurat pentru a se conecta la un server NTP. Eu am specifica un server NTP public, cum ar fi pool.ntp.org.
  • Obținerea datei și orei de la serverul NTP: Folosind metoda getLocalTime() pentru a obține data și ora curentă de la serverul NTP.
  • Afișarea datei și orei: Afișează data și ora obținute pe display-ul ePaper sau pe consola serială, după cum dorești.

    Weather station
    Weather station

QR code

Pe lângă ce am configurat mai sus m-am jucat și cu o bibliotecă care generează QR code-uri. QR codul afișat referă website-ul https://www.meteoromania.ro/ .

 Componente

Schema electronică/sistem

LilyGo T5 pinout
LilyGo T5 pinout

Codul de configurare și aplicația


  ; PlatformIO Project Configuration File
;
;   Build options: build flags, source filter
;   Upload options: custom upload port, speed and extra flags
;   Library options: dependencies, extra library storages
;   Advanced options: extra scripting
;
; Please visit documentation for the other options and examples
; https://docs.platformio.org/page/projectconf.html

[env:esp32dev]
platform = espressif32
board = mhetesp32devkit
framework = arduino
monitor_speed = 115200
upload_speed = 115200
upload_port = COM13
monitor_port = COM13
lib_deps = 
	zinggjm/GxEPD@^3.1.3
	gilmaimon/ArduinoWebsockets@^0.5.3
	knolleary/PubSubClient@^2.8
	adafruit/Adafruit INA219@^1.2.1
	fbiego/ESP32Time@^2.0.0
	bblanchon/ArduinoJson@^6.20.1

Todo

  • Să-i adaug funcționalitatea pentru configurarea rețelei Wifi dorite și eventual configurarea certificatului
  • Să alimentez placa la un INA219 și o baterie

Documentație proiect

Mulțumesc pentru atenție!

Pentru întrebări și/sau consultanță tehnică vă stau la dispoziție pe blog mai jos în secțiunea de comentarii sau pe email simedruflorin@automatic-house.ro.

O zi plăcută tuturor !

De Florin Simedru

Autor

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *


The reCAPTCHA verification period has expired. Please reload the page.