V prejšnji vadnici smo izdelali uro RTC z uporabo DS3231 in ESP32. Za zmanjšanje zahtev glede strojne opreme bomo izdelali internetno uro brez uporabe modula RTC. To je bolj natančno kot v primerjavi z uro RTC. ESP32 je modul Wi-Fi in ga je mogoče enostavno povezati z internetom, zato bomo uporabili NTP (Network Time Protocol) in UDP (User Datagram Protocol) za pridobivanje časa iz interneta z uporabo Wi-Fi. Ta internetna ura je lahko zelo koristna pri gradnji IoT projektov.
Kaj je NTP ??
Network Time Protocol (NTP) je omrežni protokol, ki se uporablja za sinhronizacijo časa med sistemi in podatkovnimi omrežji. Okvir NTP je odvisen od strežnikov Internet Time. NTP ima algoritme za natančno prilagajanje ure. NTP strežniki imajo programsko opremo, ki pošilja uro ure na odjemalske računalnike z uporabo UDPport 123. Torej v tem projektu dobivamo čas s strežnika NTP z uporabo ESP32 in ga prikazuje na OLED zaslonu.
Potrebni materiali:
- ESP32
- 128 * 64 OLED zaslon
- Breadboard
- Moško-ženske žice
Shema vezja:
Tu uporabljamo način SPI za povezavo našega 128 × 64 OLED modula zaslona (SSD1306) z ESP32. Torej, uporabil bo 7 zatičev. Povezave z ESP32 so podane kot:
- CS (izbira čipa) zatič OLED -> PIN D5 ESP32
- Enosmerni zatič OLED -> PIN D4 ESP32
- RES pin OLED -> PIN D2 ESP32
- SDA pin OLED -> PIN D23, tj. MOSI ESP32
- SCK pin OLED -> PIN D18, tj. SCK ESP32
- Vdd OLED -> Vcc ESP32
- GND OLED -> GND ESP32
Za svoj ESP32 potrebujete datoteke na plošči. Spustni meni upravitelja prijavne plošče v Arduino IDE za razvojni komplet ESP32. Če ni, sledite korakom, navedenim na spodnji povezavi:
circuitdigest.com/microcontroller-projects/getting-started-with-esp32-with-arduino-ide
Za ta projekt lahko uporabite tudi ESP12, tukaj se naučite uporabljati ESP12.
Za pisanje našega programa bomo uporabili Arduino IDE, kot je razloženo v zgornjem članku.
Razlaga kode:
Popolna koda za internetno uro ESP32 je podana na koncu članka. Tukaj razlagamo nekaj pomembnih delov kode.
Za uporabo naše kode potrebujemo več knjižnic, ki jih lahko prenesete s spodnjih povezav:
1. Adafruit_SSD1306:
2. SPI:
3. Adafruit_GFX:
4. NTPClient:
5. WiFiUdp:
Vključili smo torej vse knjižnice in definirali spremenljivko za vnos imena in gesla Wi-Fi.
#include
Tu se knjižnica NTPClient.h uporablja za povezavo s časovnim strežnikom. NTP strežnik potrebuje čas in ga sinhronizira. In knjižnica Hhre WiFiUdp.h se uporablja za pošiljanje in prejemanje sporočil UDP. UDP je protokol, ki pošilja in prejema kratka sporočila iz našega sistema na strežnik NTP.
Torej, da dobimo čas z interneta, moramo v našem programu za NTP določiti tri spremenljivke.
NTP_OFFSET, ki je časovni pas vaše države, tj. Za Indijo je +5: 30 ur. V sekundah je torej 19800.
NTP_INTERVAL, ki je časovni interval, ki ga NTP vzame za posodobitev časa. To je 60-64 sekund.
NTP_ADDRESS je strežnik NTP vaše države. Za Indijo lahko uporabite " in.pool.ntp.org ".
#define NTP_OFFSET 19800 // V nekaj sekundah #define NTP_INTERVAL 60 * 1000 // V milisekundah #define NTP_ADDRESS "1.asia.pool.ntp.org" WiFiUDP ntpUDP; NTPClient timeClient (ntpUDP, NTP_ADDRESS, NTP_OFFSET, NTP_INTERVAL);
V nastavitveni funkciji inicializirajte nastavitve Wi-Fi za povezavo z internetom.
void setup () { display.begin (); Serial.begin (9600); Serial.println (); Serial.println (); Serial.print ("Povezovanje z"); Serial.println (ssid); WiFi.begin (ssid, geslo); medtem ko (WiFi.status ()! = WL_CONNECTED) { zamuda (500); Serial.print ("."); } Serial.println (""); Serial.println ("WiFi povezan."); Serial.println ("Naslov IP:"); Serial.println (WiFi.localIP ()); timeClient.begin ();
Nato inicializirajte funkcije prikaza, da prikažete čas na OLED.
display.begin (SSD1306_SWITCHCAPVCC);
V funkciji zanke smo uporabili timeClient.update (), ta funkcija vzame posodobljeni čas iz NTP v obliki niza in ga shrani v spremenljivo formattedTime . Nato jo prikažite na OLED s funkcijo display.println () .
void loop () { timeClient.update (); Niz formattedTime = timeClient.getFormattedTime (); display.clearDisplay (); display.setTextSize (2); // nastavimo te parametre glede na vaše potrebe.. display.setCursor (0, 0); display.println (formattedTime);
Celoten program je podan spodaj. Zdaj končno programirajte ESP32 z Arduino IDE in vaša internetna ura je pripravljena na prikaz časa.