Az előző oktatóanyagban RTC órát készítettünk a DS3231 és az ESP32 használatával. A hardverigények minimalizálása érdekében az internetórát RTC modul használata nélkül készítjük el. Ez pontosabb, mint az RTC órához képest. Az ESP32 egy Wi-Fi modul, és könnyen csatlakoztatható az internethez, így az NTP (Network Time Protocol) és az UDP (User Datagram Protocol) segítségével fogjuk lekérni az időt az internetről a Wi-Fi segítségével. Ez az internetes óra nagyon hasznos lehet az IoT-projektek építése során.
Mi az NTP ??
A hálózati időprotokoll (NTP) egy hálózati protokoll, amelyet az idő szinkronizálására használnak a második adathálózat közötti rendszerek között. Az NTP keretrendszer az Internet Time kiszolgálóktól függ. Az NTP algoritmusokkal rendelkezik a napszak pontos beállításához. Az NTP szerverek rendelkeznek olyan szoftverrel, amely az óra napszakát küldi az ügyfélszámítógépekre az UDPport 123 használatával. Tehát itt, ebben a projektben az NTP szervertől kapunk időt az ESP32 segítségével, és azt mutatjuk meg az OLED kijelzőn.
Szükséges anyagok:
- ESP32
- 128 * 64 OLED kijelző
- Kenyérlemez
- Férfi-női vezetékek
Kördiagramm:
Itt SPI módot használunk 128 × 64 OLED kijelző modulunk (SSD1306) csatlakoztatásához az ESP32-hez. Tehát 7 csapot fog használni. Az ESP32 kapcsolatai a következők:
- CS (chip kiválasztása) OLED tű -> ESP32 D5 PIN-kódja
- OLED DC tű -> ESP32 D4 PIN
- OLED RES tű -> ESP32 D2 PIN
- SDA csap OLED -> PIN D23, azaz MOSI az ESP32-ből
- SCK pin of OLED -> PIN D18 azaz SCK of ESP32
- OLD Vdd -> ESP32 Vcc
- OLED GND -> ESP32 GND
Alaplapfájlokra van szükség az ESP32-hez. Az ESP32 fejlesztőkészlet Arduino IDE bejelentkezési panel kezelőjének legördülő menüje. Ha nincs ott, kövesse az alábbi linken megadott lépéseket:
circuitdigest.com/microcontroller-projects/getting-started-with-esp32-with-arduino-ide
Használhatja az ESP12-et is ehhez a projekthez, itt tanulhatja meg az ESP12 használatát.
Az Arduino IDE-t fogjuk használni programunk megírásához, a fenti cikkben leírtak szerint.
Kód Magyarázat:
Az ESP32 Internet Clock teljes kódja a cikk végén található. Itt megmagyarázzuk a kód néhány fontos részét.
Számos könyvtárra van szükségünk a kódunkban, amelyek az alábbi linkekről tölthetők le:
1. Adafruit_SSD1306:
2. SPI:
3. Adafruit_GFX:
4. NTPClient:
5. WiFiUdp:
Tehát felvettük az összes könyvtárat és meghatároztuk a Wi-Fi név és jelszó megadásához szükséges változót.
#include
Itt az NTPClient.h könyvtár segítségével kapcsolódhat az időszerverhez. Időbe telik egy NTP szervertől, és szinkronban kell tartani. A Hhre WiFiUdp.h könyvtár pedig UDP-üzenetek küldésére és fogadására szolgál. Az UDP egy olyan protokoll, amely rövid üzeneteket küld és fogad a rendszerünkből az NTP szerverre.
Tehát ahhoz, hogy időt szerezzünk az internetről, három változót kell meghatároznunk a programunkban az NTP számára.
NTP_OFFSET, amely az Ön országának időzónája, azaz India esetében +5: 30 óra. Így másodpercek alatt 19800 van.
NTP_INTERVAL, amely az NTP által az idő frissítéséhez szükséges időintervallum. 60-64 másodperc.
Az NTP_ADDRESS az országod NTP-szervere. India esetében használhatja az „ in.pool.ntp.org ” fájlt.
#define NTP_OFFSET 19800 // másodpercek alatt #define NTP_INTERVAL 60 * 1000 // milliszekundumokban #define NTP_ADDRESS "1.asia.pool.ntp.org" WiFiUDP ntpUDP; NTPClient timeClient (ntpUDP, NTP_ADDRESS, NTP_OFFSET, NTP_INTERVAL);
A Beállítás funkcióban inicializálja a Wi-Fi beállításokat, hogy csatlakozzon az internethez.
void setup () { display.begin (); Serial.begin (9600); Soros.println (); Soros.println (); Serial.print ("Csatlakozás a következőkhöz"); Soros.println (ssid); WiFi.begin (ssid, jelszó); while (WiFi.status ()! = WL_CONNECTED) { késleltetés (500); Soros.nyomtatás ("."); } Soros.println (""); Serial.println ("WiFi csatlakoztatva."); Serial.println ("IP-cím:"); Serial.println (WiFi.localIP ()); timeClient.begin ();
Ezután inicializálja a megjelenítési funkciókat az idő megjelenítéséhez az OLED-en.
display.begin (SSD1306_SWITCHCAPVCC);
A ciklusfunkcióban a timeClient.update () függvényt használtuk , ez a függvény frissített időt vesz igénybe az NTP-től karakterlánc formájában, és eltárolja a formattedTime változóban. Ezután jelenítse meg OLED-en a display.println () függvény segítségével.
void loop () { timeClient.update (); String formattedTime = timeClient.getFormattedTime (); display.clearDisplay (); display.setTextSize (2); // állítsa be ezeket a paramétereket igényei szerint.. display.setCursor (0, 0); display.println (formattedTime);
A teljes program alább található. Most végre programozza az ESP32-t Arduino IDE-vel, és az Internet Óra készen áll az idő megjelenítésére.