Ankstesnėje pamokoje mes sukūrėme RTC laikrodį naudodami DS3231 ir ESP32. Norėdami sumažinti aparatūros reikalavimus, internetinį laikrodį sukursime nenaudodami RTC modulio. Tai tiksliau, palyginti su RTC laikrodžiu. ESP32 yra „Wi-Fi“ modulis, kurį galima lengvai prijungti prie interneto, todėl norėdami gauti laiką iš interneto naudodami „Wi-Fi“, naudosime NTP (tinklo laiko protokolas) ir UDP (vartotojo datagramo protokolas). Šis interneto laikrodis gali būti labai naudingas kuriant daiktų interneto projektus.
Kas yra NTP ??
Tinklo laiko protokolas (NTP) yra tinklo protokolas, naudojamas laiko sinchronizavimui tarp kitų duomenų tinklų sistemų. NTP sistema priklauso nuo interneto laiko serverių. NTP turi algoritmus, kad tiksliai koreguotų dienos laiką. NTP serveriai turi programinę įrangą, kuri siunčia laikrodžio dienos laiką į klientinius kompiuterius naudodama „UDPport 123“. Taigi šiame projekte mes gauname laiko iš NTP serverio naudodami ESP32 ir rodome jį OLED ekrane.
Reikalingos medžiagos:
- ESP32
- 128 * 64 OLED ekranas
- Bandomoji Lenta
- Vyrų ir moterų laidai
Grandinės schema:
Čia mes naudojame SPI režimą, kad savo 128 × 64 OLED ekrano modulį (SSD1306) prijungtume prie ESP32. Taigi, jis naudos 7 kaiščius. Jungtys su ESP32 pateikiamos taip:
- CS (lusto pasirinkimas) kaištis iš OLED -> ESP32 PIN D5
- OLED nuolatinės srovės kaištis -> ESP32 PIN D4
- OLED RES kaištis -> ESP32 PIN D2
- SED kaištis iš OLED -> PIN D23, ty ESP32 MOSI
- OLK SCK kaištis -> PIN D18, ty ESP32 SCK
- OLED Vdd -> ESP32 Vcc
- OLED GND -> ESP32 GND
ESP32 reikia lentos failų. ESP32 „dev“ rinkinio „Arduino IDE“ registracijos lentos tvarkytuvės išskleidžiamasis meniu. Jei jo nėra, atlikite toliau pateiktoje nuorodoje nurodytus veiksmus:
circuitdigest.com/microcontroller-projects/getting-started-with-esp32-with-arduino-ide
Šiam projektui taip pat galite naudoti ESP12, čia išmokite naudotis ESP12.
Savo programai rašyti naudosime „Arduino IDE“, kaip paaiškinta aukščiau.
Kodo paaiškinimas:
Visas ESP32 interneto laikrodžio kodas pateiktas straipsnio pabaigoje. Čia mes paaiškiname keletą svarbių kodo dalių.
Mums reikia kelių bibliotekų, kurias naudosime savo kode, kurias galite atsisiųsti iš žemiau pateiktų nuorodų:
1. „Adafruit_SSD1306“:
2. SPI:
3. „Adafruit_GFX“:
4. NTPClient:
5. „Wi-FiUdp“:
Taigi mes įtraukėme visas bibliotekas ir apibrėžėme kintamąjį, skirtą įvesti „Wi-Fi“ vardą ir slaptažodį.
# įtraukti
Čia NTPClient.h biblioteka naudojama prisijungti prie laiko serverio. Iš NTP serverio reikia laiko ir jį sinchronizuoti. „Hhre WiFiUdp.h“ biblioteka naudojama siųsti ir gauti UDP pranešimus. UDP yra protokolas, kuris siunčia ir gauna trumpuosius pranešimus iš mūsų sistemos į NTP serverį.
Taigi, norėdami gauti laiko iš interneto, NTP programoje turime apibrėžti tris kintamuosius.
NTP_OFFSET, kuri yra jūsų šalies laiko juosta, ty Indijai yra +5: 30 val. Tai yra 19800 sekundžių.
NTP_INTERVAL - tai laiko intervalas, kurį NTP laiko atnaujinti. Tai 60–64 sekundės.
NTP_ADDRESS yra jūsų šalies NTP serveris. Indijoje galite naudoti „ in.pool.ntp.org “.
#define NTP_OFFSET 19800 // Per kelias sekundes #define NTP_INTERVAL 60 * 1000 // Milisekundėmis #define NTP_ADDRESS "1.asia.pool.ntp.org" WiFiUDP ntpUDP; NTPClient timeClient (ntpUDP, NTP_ADDRESS, NTP_OFFSET, NTP_INTERVAL);
Be sąrankos funkcijai, inicijuoti "Wi-Fi" nustatymai prisijungti su internetu.
negaliojanti sąranka () { display.begin (); Serijos pradžia (9600); Serijinis.println (); Serijinis.println (); Serial.print („Prisijungimas prie“); Serial.println (ssid); „WiFi.begin“ (ssid, slaptažodis); while (WiFi.status ()! = WL_CONNECTED) { delsa (500); Serijinis spaudinys ("."); } Serial.println (""); Serial.println („Wi-Fi prijungtas“); Serial.println ("IP adresas:"); Serial.println („WiFi.localIP“ ()); timeClient.begin ();
Tada pradėkite ekrano funkcijas, kad laikas būtų rodomas OLED.
display.begin (SSD1306_SWITCHCAPVCC);
Ciklo funkcijoje mes naudojome timeClient.update (), ši funkcija atima atnaujintą laiką iš NTP eilutės forma ir saugo ją formattedTime kintamajame. Tada parodykite jį OLED naudodami funkciją display.println () .
void loop () { timeClient.update (); String formattedTime = timeClient.getFormattedTime (); display.clearDisplay (); display.setTextSize (2); // nustatykite šiuos parametrus pagal savo poreikius.. display.setCursor (0, 0); display.println (formattedTime);
Visa programa pateikta žemiau. Dabar pagaliau užprogramuokite ESP32 su „Arduino IDE“ ir jūsų interneto laikrodis yra paruoštas rodyti laiką.