Im vorherigen Tutorial haben wir die RTC-Uhr mit DS3231 und ESP32 erstellt. Um die Hardwareanforderungen zu minimieren, stellen wir die Internetuhr ohne Verwendung des RTC-Moduls her. Dies ist genauer als bei der RTC-Uhr. ESP32 ist ein Wi-Fi-Modul und kann problemlos mit dem Internet verbunden werden. Daher verwenden wir NTP (Network Time Protocol) und UDP (User Datagram Protocol), um mithilfe von Wi-Fi Zeit aus dem Internet abzurufen. Diese Internetuhr kann beim Erstellen von IoT-Projekten sehr nützlich sein.
Was ist NTP?
Das Network Time Protocol (NTP) ist ein Netzwerkprotokoll, das zur Synchronisation der Zeit zwischen Systemen und Datennetzen verwendet wird. Das NTP-Framework hängt von Internet Time-Servern ab. NTP verfügt über Algorithmen zur präzisen Anpassung der Tageszeit. NTP-Server verfügen über eine Software, die die Uhrzeit der Uhr mithilfe von UDPport 123 an Client-Computer sendet. In diesem Projekt wird die Zeit vom NTP-Server mithilfe von ESP32 abgerufen und auf dem OLED-Display angezeigt.
Erforderliche Materialien:
- ESP32
- 128 * 64 OLED-Anzeige
- Steckbrett
- Stecker-Buchse-Drähte
Schaltplan:
Hier verwenden wir den SPI-Modus, um unser 128 × 64-OLED-Anzeigemodul (SSD1306) an ESP32 anzuschließen. Es werden also 7 Pins verwendet. Verbindungen mit ESP32 werden wie folgt angegeben:
- CS-Pin (Chip Select) der OLED -> PIN D5 des ESP32
- DC-Pin von OLED -> PIN D4 von ESP32
- RES-Pin von OLED -> PIN D2 von ESP32
- SDA-Pin von OLED -> PIN D23, dh MOSI von ESP32
- SCK-Pin von OLED -> PIN D18, dh SCK von ESP32
- Vdd von OLED -> Vcc von ESP32
- GND von OLED -> GND von ESP32
Sie benötigen Board-Dateien für Ihr ESP32. Dropdown-Menü des Check-in-Board-Managers der Arduino IDE für das ESP32-Entwicklungskit. Wenn dies nicht der Fall ist, führen Sie die folgenden Schritte aus:
circuitdigest.com/microcontroller-projects/getting-started-with-esp32-with-arduino-ide
Sie können ESP12 auch für dieses Projekt verwenden. Erfahren Sie hier, wie Sie ESP12 verwenden.
Wir werden Arduino IDE verwenden, um unser Programm wie oben beschrieben zu schreiben.
Code Erläuterung:
Der vollständige Code für die ESP32-Internetuhr finden Sie am Ende des Artikels. Hier erklären wir einige wichtige Teile des Codes.
Wir benötigen mehrere Bibliotheken für unseren Code, die über die folgenden Links heruntergeladen werden können:
1. Adafruit_SSD1306:
2. SPI:
3. Adafruit_GFX:
4. NTPClient:
5.WiFiUdp:
Daher haben wir alle Bibliotheken und definierten Variablen für die Eingabe des Wi-Fi-Namens und -Kennworts aufgenommen.
#einschließen
Hier wird die Bibliothek NTPClient.h verwendet, um eine Verbindung mit dem Zeitserver herzustellen . Es braucht Zeit von einem NTP-Server und hält es synchron. Die Bibliothek Hhre WiFiUdp.h wird zum Senden und Empfangen von UDP-Nachrichten verwendet. UDP ist ein Protokoll, das Kurznachrichten von unserem System an den NTP-Server sendet und empfängt.
Um die Zeit aus dem Internet zu erhalten, müssen wir in unserem Programm für NTP drei Variablen definieren.
NTP_OFFSET ist die Zeitzone Ihres Landes, dh für Indien beträgt sie +5: 30 Stunden. Es ist also 19800 in Sekunden.
NTP_INTERVAL ist das Zeitintervall, das NTP zum Aktualisieren der Zeit benötigt. Es ist 60-64 Sekunden.
NTP_ADDRESS ist der NTP-Server Ihres Landes. Für Indien können Sie " in.pool.ntp.org " verwenden.
#define NTP_OFFSET 19800 // In Sekunden #define NTP_INTERVAL 60 * 1000 // In Millisekunden #define NTP_ADDRESS "1.asia.pool.ntp.org" WiFiUDP ntpUDP; NTPClient timeClient (ntpUDP, NTP_ADDRESS, NTP_OFFSET, NTP_INTERVAL);
Initialisieren Sie in der Setup- Funktion die Wi-Fi-Einstellungen, um eine Verbindung zum Internet herzustellen.
void setup () { display.begin (); Serial.begin (9600); Serial.println (); Serial.println (); Serial.print ("Herstellen einer Verbindung zu"); Serial.println (ssid); WiFi.begin (ssid, Passwort); while (WiFi.status ()! = WL_CONNECTED) { delay (500); Serial.print ("."); } Serial.println (""); Serial.println ("WiFi verbunden"); Serial.println ("IP-Adresse:"); Serial.println (WiFi.localIP ()); timeClient.begin ();
Initialisieren Sie dann die Anzeigefunktionen, um die Zeit auf der OLED anzuzeigen.
display.begin (SSD1306_SWITCHCAPVCC);
In der Schleifenfunktion haben wir timeClient.update () verwendet. Diese Funktion nimmt die aktualisierte Zeit von NTP in Form einer Zeichenfolge und speichert sie in der Variablen formatierte Zeit . Zeigen Sie es dann mit der Funktion display.println () auf der OLED an.
void loop () { timeClient.update (); String formattedTime = timeClient.getFormattedTime (); display.clearDisplay (); display.setTextSize (2); // setze diese Parameter nach Bedarf.. display.setCursor (0, 0); display.println (formatierte Zeit);
Das vollständige Programm finden Sie weiter unten. Jetzt programmieren Sie endlich ESP32 mit Arduino IDE und Ihre Internetuhr ist bereit, die Zeit anzuzeigen.