Când construiți un proiect IoT care depinde de ora din zi, doriți ca acesta să arate ora corectă fără a fi nevoie de ajustări manuale. S-ar părea că acest lucru ar fi ușor de realizat cu ESP32, deoarece are wireless încorporat și se poate conecta la Internet.
Cu toate acestea, deși există o mulțime de exemple online care arată cum să configurați ESP32 pentru a se conecta la Internet și a sincroniza ora cu o oră server, cele mai multe dintre ele vă solicită să ajustați manual pentru ora de vară de două ori pe an, ceea ce pare destul de ridicol pentru orice dispozitiv electronic din secolul al XXI-lea. dispozitiv.
Aici vă vom prezenta o soluție care va permite ESP32 să arate ora corectă, pentru orice loc din lume, pe tot parcursul anului. Dar mai întâi, să aruncăm o privire la exemplul SimpleTime din Arduino IDE și să vedem ce face și cum îl putem îmbunătăți.
Exemplul SimpleTime
Dacă utilizați Arduino IDE cu ESP32, veți descoperi că are un exemplu numit SimpleTime care arata cam asa:
Puteți accesa acest exemplu configurând Arduino IDE pentru a utiliza o placă ESP32, de la
Instrumente meniu, cum ar fi prin selectarea Modulul de dezvoltare ESP32. După ce ați făcut acest lucru, puteți accesa exemplul SimpleTime din Instrumente meniul de sub Exemple,ESP32,Timp, și Timp simplu.S-ar putea aștepta ca acest exemplu oficial să demonstreze cel mai bun mod de a face lucrurile, dar există o problemă uriașă în acest exemplu. Pentru a configura fusul orar și ora de vară, trebuie să modificați următoarele două linii:
const long gmtOffset_sec = 3600;
const int daylightOffset_sec = 3600;
Setarea fusului orar folosind gmtOffset_sec este incomod, deoarece trebuie să găsiți compensarea GMT pentru locația dvs. Puteți face acest lucru consultând Site-ul Greenwich Mean Time. Din fericire, trebuie să faci asta o singură dată. The daylightOffset_sec prezintă totuși o problemă mai mare, deoarece trebuie să o ajustați de două ori pe an. Acest lucru vă poate necesita să dezactivați proiectul și să-l conectați la Arduino IDE de două ori pe an, făcându-l complet inadecvat pentru un proiect IoT pe care doriți să îl configurați și să uitați.
În căutarea unei abordări mai bune
Deci, care ar fi o modalitate mai bună de a configura fusul orar și ora de vară? Pentru a răspunde la această întrebare, nu căutați mai departe decât modul în care PC-ul dvs. Windows gestionează situația:
Observați cum, în loc să trebuiască să îi acordăm compensații orare față de GMT, îi spunem Windows care este fusul orar și locația noastră - în cazul nostru Ora munților (SUA și Canada)— și apoi bifați caseta de selectare Reglați automat ceasul pentru ora de vară. Din acel moment, Windows o gestionează automat pentru noi pe tot parcursul anului. Acesta este tipul de confort pe care ni-l dorim de la ESP32.
Legate de: Cum să personalizați ceasul din bara de sistem pe Windows
Crearea unei baze de date de locație pentru ESP32
A face același lucru pe ESP32 necesită ceva muncă. am inceput cu a postare pe blog care descrie modul de configurare a fusului orar folosind variabila de mediu TZ. Pentru locația noastră, s-a întâmplat să fie MST7MDT, M3.2.0,M11.1.0, conform cu aceasta tabel de fus orar. Deși acest lucru a rezolvat problema de a trebui să ajustați manual pentru ora de vară, am vrut procesul să fie mai simplu, fără a fi nevoie să căutați un șir de numere și litere pentru fiecare Locație.
Am convertit datele de pe site într-o bază de date pe care o puteți utiliza direct din schițele dvs. Arduino. Urma acest link pentru a descărca direct un fișier zip cu schița Arduino.
Baza de date în sine este stocată în fișier fusul orar.h. Folosind baza de date, codul pentru SimpleTime arată astfel:
Am evidențiat modificările aduse exemplului SimpleTime în galben. Această linie va permite schiței să utilizeze baza de date:
#include „time_zones.h”
Această linie vă configurează locația:
const char* location = "America/Denver";
Există 461 de locații posibile. Puteți găsi locațiile disponibile aruncând o privire la fusul orar.h fișier sau privind lista de fus orar activată acest site web.
În cele din urmă, următoarea linie îi spune ESP32 să sincronizeze ora cu un server de Internet folosind Network Time Protocol (NTP):
configTimeWithTz (getTzByLocation (locație), ntpServer);
Serverul de timp particular de Internet poate fi configurat folosind următoarea linie, deși implicit ar trebui să funcționeze bine pentru dvs.:
const char* ntpServer = "pool.ntp.org";
De asemenea, doriți să vă asigurați că adăugați informații pentru punctul dvs. de acces wireless pe următoarele două linii:
const char* ssid = "SSID_DĂU";
const char* parola = "YOUR_PASS";
A inlocui YOUR_SSID cu numele rețelei dvs. fără fir și YOUR_PASS cu parola folosită pentru a vă conecta la acesta.
Legate de: Modalități de a configura în siguranță un router wireless ca punct de acces public
Terminand
După ce ați finalizat pașii de configurare, încărcați schița pe ESP32 și acesta va folosi ora corectă pe tot parcursul anului fără nicio intervenție!
Deși acest cod vă oferă un bun punct de plecare, există modalități mai ușor de utilizat de a realiza același lucru. De exemplu, ați putea dori să permiteți utilizatorului să configureze totul dintr-o pagină web, mai degrabă decât să o facă în timpul compilării. A face acest lucru este mai multă muncă, deoarece ar trebui să faceți următoarele lucruri în schița dvs. Arduino:
- Configurați ESP32 ca punct de acces wireless pentru configurația inițială
- Lansați un server web pentru a prezenta utilizatorului o pagină de configurare
- Creați un formular HTML pentru a permite utilizatorului să introducă informațiile rețelei fără fir și să selecteze locația acestora
- Creați codul pentru a procesa alegerile utilizatorului și stocați-l în memoria nevolatilă
- La pornirea plăcii:
- Citiți configurația din memoria nevolatilă
- Conectați-vă la rețeaua wireless și sincronizați ora
Un proiect care demonstrează acești pași este Ceasul ESP32 Dali. Acest proiect a fost cel care ne-a determinat să găsim o modalitate mai bună de a face sincronizarea timpului pe ESP32.
Verificați cod sursa pentru ESP32 Dali Clock pentru a vedea cum să afișeze o pagină de configurare web cu funcții complete. Pagina de configurare afișează un meniu derulant pentru a permite utilizatorului să-și selecteze locația și fusul orar și de asemenea, permite utilizatorului să seteze manual ora folosind un widget de oră și calendar, pentru o persoană neconectată alternativă!
Sincronizarea oră a rețelei bazată pe locație pe ESP32
Acum aveți toate informațiile de care aveți nevoie pentru a putea seta automat ceasul ESP32 la ora corectă și, de asemenea, pentru a o ajusta pentru ora de vară. Acest lucru este perfect pentru proiectele IoT pe care nu doriți să le ajustați manual.
Dacă sunteți în căutarea unor proiecte interesante cu ESP32, sunteți în locul potrivit.
Citiți în continuare
- DIY
- ESP32
- internetul Lucrurilor
Sunt un producător cu un interes deosebit pentru software open-source, electronică, imprimare 3D, grafică pe computer și retro-computing.
Aboneaza-te la newsletter-ul nostru
Alăturați-vă buletinului nostru informativ pentru sfaturi tehnice, recenzii, cărți electronice gratuite și oferte exclusive!
Click aici pentru a te abona