In de vorige tutorial hebben we een RTC-klok gemaakt met DS3231 en ESP32. Om de hardwarevereisten te minimaliseren, zullen we internetklokken maken zonder de RTC-module te gebruiken. Dit is nauwkeuriger in vergelijking met een RTC-klok. ESP32 is een Wi-Fi-module en kan eenvoudig worden verbonden met internet, dus we zullen NTP (Network Time Protocol) en UDP (User Datagram Protocol) gebruiken om via Wi-Fi tijd van internet te halen. Deze internetklok kan erg handig zijn bij het bouwen van IoT-projecten.
Wat is NTP ??
Network Time Protocol (NTP) is een netwerkprotocol dat wordt gebruikt voor het synchroniseren van tijd tussen systemen en datanetwerken. Het NTP-framework is afhankelijk van Internet Time-servers. NTP heeft algoritmen om de tijd nauwkeurig aan te passen. NTP-servers hebben software die de tijd van de klok naar clientcomputers stuurt met behulp van UDPport 123. Dus hier in dit project halen we tijd op van de NTP-server met behulp van ESP32 en tonen deze op OLED-schermen.
Vereiste materialen:
- ESP32
- 128 * 64 oled-scherm
- Breadboard
- Man-vrouw draden
Schakelschema:
Hier gebruiken we de SPI-modus om onze 128 × 64 OLED-displaymodule (SSD1306) aan te sluiten op ESP32. Het gebruikt dus 7 pinnen. Verbindingen met ESP32 worden gegeven als:
- CS (Chip select) pin van OLED -> PIN D5 van ESP32
- DC-pin van OLED -> PIN D4 van ESP32
- RES-pin van OLED -> PIN D2 van ESP32
- SDA-pin van OLED -> PIN D23 dwz MOSI van ESP32
- SCK-pin van OLED -> PIN D18 dwz SCK van ESP32
- Vdd van OLED -> Vcc van ESP32
- GND van OLED -> GND van ESP32
U hebt bordbestanden nodig voor uw ESP32. Vervolgkeuzemenu Check-in board manager van Arduino IDE voor ESP32 dev kit. Als het er niet is, volgt u de stappen in de onderstaande link:
circuitdigest.com/microcontroller-projects/getting-started-with-esp32-with-arduino-ide
U kunt ook ESP12 gebruiken voor dit project, leer hier ESP12 gebruiken.
We zullen Arduino IDE gebruiken om ons programma te schrijven zoals uitgelegd in bovenstaand artikel.
Code Verklaring:
De volledige code voor ESP32-internetklok staat aan het einde van het artikel. Hier leggen we enkele belangrijke delen van de code uit.
We hebben verschillende bibliotheken nodig om in onze code te gebruiken, die kan worden gedownload via de onderstaande links:
1. Adafruit_SSD1306:
2. SPI:
3. Adafruit_GFX:
4. NTPClient:
5.WiFiUdp:
Daarom hebben we alle bibliotheken en gedefinieerde variabelen opgenomen voor het invoeren van de Wi-Fi-naam en het wachtwoord.
# omvatten
Hier wordt de NTPClient.h- bibliotheek gebruikt om verbinding te maken met de tijdserver. Het kost tijd van een NTP-server en houdt deze gesynchroniseerd. En de Hhre WiFiUdp.h-bibliotheek wordt gebruikt om UDP-berichten te verzenden en ontvangen. UDP is een protocol dat korte berichten van ons systeem naar de NTP-server verzendt en ontvangt.
Dus om de tijd van internet te halen, moeten we drie variabelen in ons programma voor NTP definiëren.
NTP_OFFSET , de tijdzone van uw land, dwz voor India is het +5: 30 uur. Het is dus 19800 in seconden.
NTP_INTERVAL wat het tijdsinterval is dat door NTP wordt gebruikt om de tijd bij te werken. Het is 60-64 seconden.
NTP_ADDRESS is de NTP-server van uw land. Voor India kunt u “ in.pool.ntp.org ” gebruiken.
#define NTP_OFFSET 19800 // In seconden #define NTP_INTERVAL 60 * 1000 // In milliseconden #define NTP_ADDRESS "1.asia.pool.ntp.org" WiFiUDP ntpUDP; NTPClient timeClient (ntpUDP, NTP_ADDRESS, NTP_OFFSET, NTP_INTERVAL);
Initialiseer in de instelfunctie de Wi-Fi-instellingen om verbinding te maken met internet.
leegte setup () { display.begin (); Serial.begin (9600); Serial.println (); Serial.println (); Serial.print ("Verbinden met"); Serial.println (ssid); WiFi.begin (ssid, wachtwoord); while (WiFi.status ()! = WL_CONNECTED) { vertraging (500); Serial.print ("."); } Serial.println (""); Serial.println ("WiFi verbonden."); Serial.println ("IP-adres:"); Serial.println (WiFi.localIP ()); timeClient.begin ();
Initialiseer vervolgens de weergavefuncties om de tijd op OLED weer te geven.
display.begin (SSD1306_SWITCHCAPVCC);
In de loop-functie hebben we timeClient.update () gebruikt, deze functie neemt bijgewerkte tijd van NTP in de vorm van een string en slaat deze op in formattedTime- variabele. Geef het vervolgens weer op OLED met de functie display.println () .
ongeldige lus () { timeClient.update (); String formattedTime = timeClient.getFormattedTime (); display.clearDisplay (); display.setTextSize (2); // stel deze parameters in volgens uw behoefte.. display.setCursor (0, 0); display.println (formattedTime);
Het volledige programma wordt hieronder gegeven. Programmeer nu eindelijk ESP32 met Arduino IDE en je internetklok is klaar om de tijd weer te geven.