În tutorialul anterior, am creat ceas RTC folosind DS3231 și ESP32. Pentru a minimiza cerințele hardware, vom crea ceasul Internet fără a utiliza modulul RTC. Acest lucru este mai precis în comparație cu ceasul RTC. ESP32 este un modul Wi-Fi și poate fi ușor conectat la internet, așa că vom folosi NTP (Network Time Protocol) și UDP (User Datagram Protocol) pentru a prelua timpul de pe internet utilizând Wi-Fi. Acest ceas de internet poate fi foarte util în timpul construirii proiectelor IoT.
Ce este NTP ??
Network Time Protocol (NTP) este un protocol de rețea utilizat pentru sincronizarea timpului între sistemele și rețelele de date. Cadrul NTP depinde de serverele Internet Time. NTP are algoritmi pentru a ajusta cu precizie ora din zi. Serverele NTP au software care trimite ora ceasului pe computerele client folosind UDPport 123. Deci, aici, în acest proiect, primim timp de la serverul NTP folosind ESP32 și îl afișăm pe afișajul OLED.
Materiale necesare:
- ESP32
- Afișaj OLED 128 * 64
- Breadboard
- Firele mascul-feminin
Diagrama circuitului:
Aici, folosim modul SPI pentru a conecta modulul nostru de afișaj OLED de 128 × 64 (SSD1306) la ESP32. Deci, va folosi 7 pini. Conexiunile cu ESP32 sunt date ca:
- Pinul CS (Chip select) al OLED -> PIN D5 al ESP32
- Pinul DC al OLED -> PIN D4 al ESP32
- PIN PIN al OLED -> PIN D2 al ESP32
- Pinul SDA al OLED -> PIN D23 adică MOSI al ESP32
- Pin SCK al OLED -> PIN D18 adică SCK al ESP32
- Vdd din OLED -> Vcc din ESP32
- GND din OLED -> GND din ESP32
Aveți nevoie de fișiere de bord pentru ESP32. Meniul derulant al managerului de bord de check-in al kitului Arduino IDE pentru ESP32 dev. Dacă nu este acolo, urmați pașii dați în linkul de mai jos:
circuitdigest.com/microcontroller-projects/getting-started-with-esp32-with-arduino-ide
De asemenea, puteți utiliza ESP12 pentru acest proiect, învățați aici să utilizați ESP12.
Vom folosi Arduino IDE pentru a scrie programul nostru așa cum este explicat în articolul de mai sus.
Explicatie cod:
Codul complet pentru ESP32 Internet Clock este dat la sfârșitul articolului. Aici explicăm câteva părți importante ale codului.
Avem nevoie de mai multe biblioteci în codul nostru, care pot fi descărcate de pe linkurile de mai jos:
1. Adafruit_SSD1306:
2. SPI:
3. Adafruit_GFX:
4. NTPClient:
5. WiUUp:
Așa că am inclus toate bibliotecile și variabila definită pentru introducerea numelui și parolei Wi-Fi.
#include
Aici biblioteca NTPClient.h este utilizată pentru a vă conecta cu serverul de timp. Este nevoie de timp de la un server NTP și îl menține sincronizat. Și biblioteca Hhre WiFiUdp.h este utilizată pentru a trimite și primi mesaje UDP. UDP este un protocol care trimite și primește mesaje scurte din sistemul nostru către serverul NTP.
Deci, pentru a obține timpul de pe Internet, trebuie să definim trei variabile în programul nostru pentru NTP.
NTP_OFFSET, care este fusul orar al țării dvs., adică pentru India este +5: 30 oră. Deci este 19800 în câteva secunde.
NTP_INTERVAL, care este intervalul de timp luat de NTP pentru actualizarea timpului. Este de 60-64 secunde.
NTP_ADDRESS este serverul NTP al țării dvs. Pentru India puteți utiliza „ in.pool.ntp.org ”.
#define NTP_OFFSET 19800 // În câteva secunde #define NTP_INTERVAL 60 * 1000 // În milisecunde #define NTP_ADDRESS "1.asia.pool.ntp.org" WiFiUDP ntpUDP; NTPClient timeClient (ntpUDP, NTP_ADDRESS, NTP_OFFSET, NTP_INTERVAL);
În funcția de configurare , inițializați setările Wi-Fi pentru a vă conecta la internet.
void setup () { display.begin (); Serial.begin (9600); Serial.println (); Serial.println (); Serial.print („Conectarea la”); Serial.println (ssid); WiFi.begin (ssid, parolă); while (WiFi.status ()! = WL_CONNECTED) { întârziere (500); Serial.print ("."); } Serial.println (""); Serial.println ("WiFi conectat."); Serial.println ("adresa IP:"); Serial.println (WiFi.localIP ()); timeClient.begin ();
Apoi inițializați funcțiile de afișare pentru a afișa ora pe OLED.
display.begin (SSD1306_SWITCHCAPVCC);
În funcția de buclă, am folosit timeClient.update (), această funcție preia timpul actualizat de la NTP sub formă de șir și îl stochează în variabila formatatăTime . Apoi afișați-l pe OLED utilizând funcția display.println () .
void loop () { timeClient.update (); String formattedTime = timeClient.getFormattedTime (); display.clearDisplay (); display.setTextSize (2); // setați acești parametri în funcție de nevoile dvs... display.setCursor (0, 0); display.println (formatatTime);
Programul complet este prezentat mai jos. Acum, în sfârșit, programați ESP32 cu Arduino IDE și ceasul dvs. Internet este gata să arate timpul.