V predchádzajúcom tutoriáli sme vytvorili hodiny RTC pomocou DS3231 a ESP32. Aby sme minimalizovali hardvérové požiadavky, vyrobíme internetové hodiny bez použitia RTC modulu. To je presnejšie v porovnaní s hodinami RTC. ESP32 je modul Wi-Fi a dá sa ľahko pripojiť k internetu, takže na načítanie času z internetu pomocou Wi-Fi použijeme NTP (Network Time Protocol) a UDP (User Datagram Protocol). Tieto internetové hodiny môžu byť veľmi užitočné pri vytváraní projektov IoT.
Čo je to NTP ??
Network Time Protocol (NTP) je sieťový protokol používaný na synchronizáciu času medzi systémami a dátovými sieťami. Rámec NTP závisí od serverov internetového času. NTP má algoritmy na presné nastavenie denného času. NTP servery majú softvér, ktorý odosiela denný čas na klientske počítače pomocou UDPport 123. Takže tu v tomto projekte dostávame čas od NTP serveru pomocou ESP32 a zobrazujeme ho na OLED displeji.
Potrebné materiály:
- ESP32
- 128 * 64 OLED displej
- Nepál
- Vodiče samec-samica
Schéma zapojenia:
Tu používame režim SPI na pripojenie nášho 128 × 64 OLED zobrazovacieho modulu (SSD1306) k ESP32. Bude teda používať 7 pinov. Spojenia s ESP32 sú uvedené ako:
- CS (výber čipu) pin OLED -> PIN D5 ESP32
- DC kolík OLED -> PIN D4 ESP32
- RES pin z OLED -> PIN D2 z ESP32
- Pin SDA OLED -> PIN D23 tj MOSI z ESP32
- SCK pin OLED -> PIN D18 tj SCK ESP32
- Vdd OLED -> Vcc ESP32
- GND OLED -> GND ESP32
Potrebujete súbory palubných dosiek pre váš ESP32. Rozbaľovacia ponuka správcu nahlásenia na doske Arduino IDE pre súpravu ESP32 dev. Ak nie je, postupujte podľa krokov uvedených v nasledujúcom odkaze:
circuitdigest.com/microcontroller-projects/getting-started-with-esp32-with-arduino-ide
Pre tento projekt môžete tiež použiť ESP12, tu sa naučte používať ESP12.
Na napísanie nášho programu použijeme Arduino IDE, ako je vysvetlené v predchádzajúcom článku.
Vysvetlenie kódu:
Kompletný kód pre ESP32 Internet Clock je uvedený na konci článku. Tu vysvetľujeme niekoľko dôležitých častí kódu.
V našom kóde potrebujeme niekoľko knižníc, ktoré je možné stiahnuť z nasledujúcich odkazov:
1. Adafruit_SSD1306:
2. SPI:
3. Adafruit_GFX:
4. NTPClient:
5. WiFiUdp:
Zahrnuli sme teda všetky knižnice a definovanú premennú na zadanie názvu a hesla Wi-Fi.
#include
Tu sa na pripojenie k časovému serveru používa knižnica NTPClient.h . Trvá to chvíľu od servera NTP a udržujte ho synchronizovaný. A knižnica Hhre WiFiUdp.h sa používa na odosielanie a prijímanie správ UDP. UDP je protokol, ktorý odosiela a prijíma krátke správy z nášho systému na server NTP.
Aby sme teda dostali čas z Internetu, musíme v našom programe pre NTP definovať tri premenné.
NTP_OFFSET, čo je časové pásmo vašej krajiny, tj. Pre Indiu je to +5: 30 hodín. Takže to je 19800 za sekundy.
NTP_INTERVAL, čo je časový interval prijatý NTP na aktualizáciu času. Je to 60-64 sekúnd.
NTP_ADDRESS je server NTP vo vašej krajine. Pre Indiu môžete použiť „ in.pool.ntp.org “.
#define NTP_OFFSET 19800 // Za pár sekúnd #define NTP_INTERVAL 60 * 1000 // Za milisekundy #define NTP_ADDRESS "1.asia.pool.ntp.org" WiFiUDP ntpUDP; NTPClient timeClient (ntpUDP, NTP_ADDRESS, NTP_OFFSET, NTP_INTERVAL);
V Nastavovacej funkcii inicializujte nastavenia Wi-Fi na pripojenie k internetu.
void setup () { display.begin (); Serial.begin (9600); Serial.println (); Serial.println (); Serial.print („pripája sa k“); Serial.println (ssid); WiFi.begin (ssid, heslo); while (WiFi.status ()! = WL_CONNECTED) { oneskorenie (500); Serial.print ("."); } Serial.println (""); Serial.println ("WiFi pripojené."); Serial.println ("IP adresa:"); Serial.println (WiFi.localIP ()); timeClient.begin ();
Potom inicializujte funkcie displeja tak, aby zobrazovali čas na OLED.
display.begin (SSD1306_SWITCHCAPVCC);
Vo funkcii loop sme použili timeClient.update (), táto funkcia berie aktualizovaný čas z NTP vo forme reťazca a ukladá ho do premennej formattedTime . Potom ho zobrazte na OLED pomocou funkcie display.println () .
void loop () { timeClient.update (); Reťazec formattedTime = timeClient.getFormattedTime (); display.clearDisplay (); display.setTextSize (2); // nastav si tieto parametre podla svojej potreby.. display.setCursor (0, 0); display.println (formattedTime);
Celý program je uvedený nižšie. Teraz konečne naprogramujte ESP32 s Arduino IDE a vaše internetové hodiny sú pripravené na zobrazenie času.