Iepriekšējā apmācībā mēs izveidojām RTC pulksteni, izmantojot DS3231 un ESP32. Lai samazinātu aparatūras prasības, mēs izveidosim interneta pulksteni, neizmantojot RTC moduli. Tas ir precīzāk, salīdzinot ar RTC pulksteni. ESP32 ir Wi-Fi modulis, un to var viegli savienot ar internetu, tāpēc mēs izmantosim NTP (tīkla laika protokols) un UDP (lietotāja datagramma protokols), lai iegūtu laiku no interneta, izmantojot Wi-Fi. Šis interneta pulkstenis var būt ļoti noderīgs, veidojot IoT projektus.
Kas ir NTP ??
Tīkla laika protokols (NTP) ir tīkla protokols, ko izmanto laika sinhronizēšanai starp sistēmām un datu tīkliem. NTP sistēma ir atkarīga no interneta laika serveriem. NTP ir algoritmi, lai precīzi pielāgotu dienas laiku. NTP serveriem ir programmatūra, kas nosūta pulksteņa diennakts laiku klientu datoriem, izmantojot UDPport 123. Tāpēc šeit, šajā projektā, mēs iegūstam laiku no NTP servera, izmantojot ESP32, un parādām to OLED displejā.
Nepieciešamie materiāli:
- ESP32
- 128 * 64 OLED displejs
- Maizes dēlis
- Vīriešu-sieviešu vadi
Ķēdes shēma:
Šeit mēs izmantojam SPI režīmu, lai savienotu savu 128 × 64 OLED displeja moduli (SSD1306) ar ESP32. Tātad, tas izmantos 7 tapas. Savienojumi ar ESP32 ir norādīti kā:
- CS (mikroshēmas atlase) pin OLED -> ESP32 PIN D5
- OLED līdzstrāvas tapa - ESP32 PIN D4
- OLED RES tapa -> ESP32 PIN D2
- OLED SDA tapa -> PIN D23, ti, ESP32 MOSI
- OLK SCK tapa -> PIN D18, ti, ESP32 SCK
- OLED Vdd -> ESP32 Vcc
- OLED GND -> ESP32 GND
ESP32 ir nepieciešami dēļu faili. Reģistrēšanās dēļu pārvaldnieka nolaižamā izvēlne Arduino IDE ESP32 dev komplektam. Ja tā nav, rīkojieties šādi:
circuitdigest.com/microcontroller-projects/getting-started-with-esp32-with-arduino-ide
Šim projektam varat izmantot arī ESP12. Uzziniet šeit, kā izmantot ESP12.
Mēs izmantosim Arduino IDE, lai rakstītu savu programmu, kā paskaidrots iepriekš rakstā.
Koda skaidrojums:
Pilnīgs ESP32 interneta pulksteņa kods ir norādīts raksta beigās. Šeit mēs izskaidrojam dažas svarīgas koda daļas.
Mums ir nepieciešamas vairākas bibliotēkas, kuras izmantot mūsu kodā, kuras var lejupielādēt no šīm saitēm:
1. Adafruit_SSD1306:
2. SPI:
3. Adafruit_GFX:
4. NTPClient:
5. Wi-FiUdp:
Tātad mēs esam iekļāvuši visas bibliotēkas un definējuši mainīgo Wi-Fi nosaukuma un paroles ievadīšanai.
# iekļaut
Šeit NTPClient.h bibliotēka tiek izmantota, lai izveidotu savienojumu ar laika serveri. Tas prasa laiku no NTP servera un uztur to sinhronizācijā. Un Hhre WiFiUdp.h bibliotēka tiek izmantota UDP ziņojumu sūtīšanai un saņemšanai. UDP ir protokols, kas nosūta un saņem īsziņas no mūsu sistēmas uz NTP serveri.
Tātad, lai iegūtu laiku no interneta, mums NTP ir jānosaka trīs mainīgie.
NTP_OFFSET, kas ir jūsu valsts laika josla, ti, Indijai ir +5: 30 stunda. Tātad tas ir 19800 sekundēs.
NTP_INTERVAL, kas ir laika intervāls, ko NTP izmanto, lai atjauninātu laiku. Tas ir 60-64 sekundes.
NTP_ADDRESS ir jūsu valsts NTP serveris. Indijā varat izmantot “ in.pool.ntp.org ”.
#define NTP_OFFSET 19800 // Sekunžu laikā #define NTP_INTERVAL 60 * 1000 // Milisekundēs #define NTP_ADDRESS "1.asia.pool.ntp.org" WiFiUDP ntpUDP; NTPClient timeClient (ntpUDP, NTP_ADDRESS, NTP_OFFSET, NTP_INTERVAL);
Pēc iestatīšanas funkcija, inicializētu Wi-Fi iestatījumus, lai izveidotu savienojumu ar internetu.
void setup () { display.begin (); Sērijas sākums (9600); Seriālais.println (); Seriālais.println (); Serial.print ("Savienojums ar"); Serial.println (ssid); WiFi.begin (ssid, parole); while (WiFi.status ()! = WL_CONNECTED) { aizkave (500); Sērijas.druka ("."); } Serial.println (""); Serial.println ("Savienots ar WiFi."); Serial.println ("IP adrese:"); Serial.println (WiFi.localIP ()); timeClient.begin ();
Pēc tam inicializējiet displeja funkcijas, lai parādītu laiku OLED.
display.begin (SSD1306_SWITCHCAPVCC);
Cilpas funkcijā mēs esam izmantojuši timeClient.update (), šī funkcija atjaunina laiku no NTP virknes formā un saglabā to mainīgajā formattedTime . Pēc tam parādiet to OLED, izmantojot display.println () funkciju.
void loop () { timeClient.update (); String formattedTime = timeClient.getFormattedTime (); display.clearDisplay (); display.setTextSize (2); // iestatiet šos parametrus atbilstoši jūsu vajadzībām.. display.setCursor (0, 0); display.println (formattedTime);
Pilna programma ir dota zemāk. Tagad beidzot ieprogrammējiet ESP32 ar Arduino IDE, un jūsu interneta pulkstenis ir gatavs rādīt laiku.