Edellisessä opetusohjelmassa olemme tehneet RTC-kellon DS3231: n ja ESP32: n avulla. Laitteistovaatimusten minimoimiseksi teemme Internet-kellon käyttämättä RTC-moduulia. Tämä on tarkempi verrattuna RTC-kelloon. ESP32 on Wi-Fi-moduuli ja se voidaan helposti yhdistää Internetiin, joten käytämme NTP: tä (Network Time Protocol) ja UDP (User Datagram Protocol) hakemaan aikaa Internetistä Wi-Fi-yhteydellä. Tämä Internet-kello voi olla erittäin hyödyllinen rakennettaessa IoT-projekteja.
Mikä on NTP?
Verkon aikaprotokolla (NTP) on verkkoprotokolla, jota käytetään ajan synkronointiin tietoverkkojen ja järjestelmien välillä. NTP-kehys riippuu Internet-aikapalvelimista. NTP: llä on algoritmeja kellonajan tarkkaan säätämiseen. NTP-palvelimilla on ohjelmisto, joka lähettää kellon kellonajan asiakastietokoneille UDPport 123: n avulla. Joten tässä projektissa saamme aikaa NTP-palvelimelta ESP32: n avulla ja näytämme sen OLED-näytöllä.
Tarvittavat materiaalit:
- ESP32
- 128 * 64 OLED-näyttö
- Leipälauta
- Uros-naaras johdot
Piirikaavio:
Tässä käytämme SPI-tilaa 128 × 64 OLED -näyttömoduulin (SSD1306) liittämiseen ESP32: een. Joten se käyttää 7 nastaa. Yhteydet ESP32: n kanssa ovat seuraavat:
- OLEDin CS (sirun valinta) -tappi -> ESP32: n PIN D5
- OLED: n DC-nasta -> ESP32: n PIN D4
- OLED: n RES-nasta -> ESP32: n PIN D2
- OLED: n SDA-tappi -> PIN D23 eli ESP32: n MOSI
- OLK: n SCK-tappi -> PIN D18 eli ESP32: n SCK
- OLED: n Vdd -> ESP32: n Vcc
- OLED: n GND -> ESP32: n GND
Tarvitset levytiedostot ESP32: lle. Sisäänkirjautumisen hallinnan avattava valikko Arduino IDE: stä ESP32 dev -paketille. Jos sitä ei ole, noudata alla olevan linkin ohjeita:
circuitdigest.com/microcontroller-projects/getting-started-with-esp32-with-arduino-ide
Voit käyttää ESP12: ta myös tähän projektiin. Opi täältä käyttämään ESP12: ta.
Käytämme Arduino IDE: tä ohjelmamme kirjoittamiseen yllä olevassa artikkelissa kuvatulla tavalla.
Koodin selitys:
ESP32-Internet-kellon täydellinen koodi on artikkelin lopussa. Tässä selitämme muutamia tärkeitä koodin osia.
Tarvitsemme useita kirjastoja käytettäväksi koodissamme, jotka voidaan ladata alla olevista linkeistä:
1. Adafruit_SSD1306:
2. SPI:
3. Adafruit_GFX:
4. NTPClient:
5.WiFiUdp:
Joten olemme sisällyttäneet kaikki kirjastot ja määritelleet muuttujan Wi-Fi-nimen ja salasanan syöttämistä varten.
#sisältää
Tässä NTPClient.h- kirjastoa käytetään yhteyden muodostamiseen aikapalvelimeen. Se vie aikaa NTP-palvelimelta ja pitää se synkronoituna. Ja Hhre WiFiUdp.h -kirjastoa käytetään lähettämään ja vastaanottamaan UDP-viestejä. UDP on protokolla, joka lähettää ja vastaanottaa lyhytsanomia järjestelmästämme NTP-palvelimelle.
Joten saadaksesi aikaa Internetistä, meidän on määritettävä kolme muuttujaa NTP-ohjelmassa.
NTP_OFFSET, joka on maasi aikavyöhyke eli Intialle on +5: 30 tunti. Joten se on 19800 sekunnissa.
NTP_INTERVAL, joka on NTP: n ottama ajanjakso ajan päivittämiseksi. Se on 60-64 sekuntia.
NTP_ADDRESS on maasi NTP-palvelin. Intiassa voit käyttää ” in.pool.ntp.org ”.
#define NTP_OFFSET 19800 // Sekunneissa #define NTP_INTERVAL 60 * 1000 // Milisekunteina #define NTP_ADDRESS "1.asia.pool.ntp.org" WiFiUDP ntpUDP; NTPClient timeClient (ntpUDP, NTP_ADDRESS, NTP_OFFSET, NTP_INTERVAL);
Alusta asetustoiminnossa alustamalla Wi-Fi-asetukset muodostaaksesi yhteyden Internetiin.
void setup () { display.begin (); Sarjan alku (9600); Sarja.println (); Sarja.println (); Serial.print ("Yhdistetään kohteeseen"); Serial.println (ssid); WiFi.begin (ssid, salasana); while (WiFi.status ()! = WL_CONNECTED) { viive (500); Sarjaprintti ("."); } Sarja.println (""); Serial.println ("WiFi kytketty."); Serial.println ("IP-osoite:"); Serial.println (WiFi.localIP ()); timeClient.begin ();
Alusta sitten näytön toiminnot näyttämään aika OLED: llä.
display.begin (SSD1306_SWITCHCAPVCC);
Silmukkafunktiossa olemme käyttäneet timeClient.update () -toimintoa , tämä toiminto vie päivitetyn ajan NTP: stä merkkijonona ja tallentaa sen formattedTime- muuttujaan. Näytä sitten se OLED-näytössä käyttämällä toimintoa display.println () .
void loop () { timeClient.update (); Merkkijono formattedTime = timeClient.getFormattedTime (); display.clearDisplay (); display.setTextSize (2); // aseta nämä parametrit tarpeidesi mukaan.. display.setCursor (0, 0); display.println (formattedTime);
Koko ohjelma on annettu alla. Ohjelmoi nyt ESP32 vihdoin Arduino IDE: llä ja Internet-kellosi on valmis näyttämään aikaa.