V předchozím tutoriálu jsme vytvořili hodiny RTC pomocí DS3231 a ESP32. Abychom minimalizovali hardwarové požadavky, vyrobíme internetové hodiny bez použití RTC modulu. To je přesnější ve srovnání s hodinami RTC. ESP32 je modul Wi-Fi a lze jej snadno připojit k internetu, takže k načítání času z internetu pomocí Wi-Fi použijeme NTP (Network Time Protocol) a UDP (User Datagram Protocol). Tyto internetové hodiny mohou být velmi užitečné při vytváření projektů IoT.
Co je NTP ??
Network Time Protocol (NTP) je síťový protokol používaný k synchronizaci času mezi systémy a datovými sítěmi. Rámec NTP závisí na serverech internetového času. NTP má algoritmy pro přesnou úpravu denní doby. NTP servery mají software, který odesílá denní čas na klientské počítače pomocí UDPport 123. Takže zde v tomto projektu získáváme čas od NTP serveru pomocí ESP32 a zobrazujeme jej na OLED displeji.
Potřebné materiály:
- ESP32
- 128 * 64 OLED displej
- Nepájivá deska
- Dráty samec-samice
Kruhový diagram:
Zde používáme režim SPI k připojení našeho 128 × 64 OLED zobrazovacího modulu (SSD1306) k ESP32. Bude tedy používat 7 pinů. Spojení s ESP32 jsou uvedena jako:
- CS (výběr čipu) pin OLED -> PIN D5 ESP32
- DC kolík OLED -> PIN D4 ESP32
- RES pin OLED -> PIN D2 ESP32
- Pin SDA OLED -> PIN D23 tj. MOSI ESP32
- SCK pin OLED -> PIN D18 tj. SCK ESP32
- Vdd OLED -> Vcc ESP32
- GND OLED -> GND ESP32
Potřebujete soubory desky pro váš ESP32. Check-in board manager drop down menu of Arduino IDE for ESP32 dev kit. Pokud tam není, postupujte podle pokynů uvedených v odkazu níže:
circuitdigest.com/microcontroller-projects/getting-started-with-esp32-with-arduino-ide
Pro tento projekt můžete také použít ESP12, zde se naučte používat ESP12.
K napsání našeho programu použijeme Arduino IDE, jak je vysvětleno v předchozím článku.
Vysvětlení kódu:
Kompletní kód pro ESP32 Internet Clock je uveden na konci článku. Zde vysvětlujeme několik důležitých částí kódu.
V našem kódu potřebujeme několik knihoven, které lze stáhnout z níže uvedených odkazů:
1. Adafruit_SSD1306:
2. SPI:
3. Adafruit_GFX:
4. NTPClient:
5. WiFiUdp:
Zahrnuli jsme tedy všechny knihovny a definovanou proměnnou pro zadání názvu a hesla Wi-Fi.
#zahrnout
Zde se pro připojení k časovému serveru používá knihovna NTPClient.h . Trvá to čas od serveru NTP a udržujte jej v synchronizaci. A knihovna Hhre WiFiUdp.h se používá k odesílání a přijímání zpráv UDP. UDP je protokol, který odesílá a přijímá krátké zprávy z našeho systému na server NTP.
Abychom získali čas z internetu, musíme v našem programu pro NTP definovat tři proměnné.
NTP_OFFSET, což je časové pásmo vaší země, tj. Pro Indii je to +5: 30 hodin. Takže to je 19800 za sekundy.
NTP_INTERVAL, což je časový interval, který NTP potřebuje k aktualizaci času. Je to 60-64 sekund.
NTP_ADDRESS je server NTP ve vaší zemi. Pro Indii můžete použít „ in.pool.ntp.org “.
#define NTP_OFFSET 19800 // během několika sekund #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 části Funkce nastavení inicializujte nastavení Wi-Fi pro připojení k internetu.
void setup () { display.begin (); Serial.begin (9600); Serial.println (); Serial.println (); Serial.print ("Připojení k"); Serial.println (ssid); WiFi.begin (ssid, heslo); while (WiFi.status ()! = WL_CONNECTED) { zpoždění (500); Serial.print ("."); } Serial.println (""); Serial.println ("WiFi připojeno."); Serial.println ("IP adresa:"); Serial.println (WiFi.localIP ()); timeClient.begin ();
Poté inicializujte funkce displeje a zobrazte čas na OLED.
display.begin (SSD1306_SWITCHCAPVCC);
Ve funkci smyčky jsme použili timeClient.update (), tato funkce bere aktualizovaný čas z NTP ve formě řetězce a ukládá ji do proměnné formattedTime . Poté jej zobrazte na OLED pomocí funkce display.println () .
void loop () { timeClient.update (); Řetězec formattedTime = timeClient.getFormattedTime (); display.clearDisplay (); display.setTextSize (2); // nastavte tyto parametry podle svých potřeb.. display.setCursor (0, 0); display.println (formattedTime);
Celý program je uveden níže. Nyní konečně naprogramujte ESP32 s Arduino IDE a vaše internetové hodiny jsou připraveny ukázat čas.