Nel tutorial precedente, abbiamo realizzato l'orologio RTC utilizzando DS3231 e ESP32. Per ridurre al minimo i requisiti hardware, creeremo un orologio Internet senza utilizzare il modulo RTC. Questo è più accurato rispetto all'orologio RTC. ESP32 è un modulo Wi-Fi e può essere facilmente connesso a Internet, quindi utilizzeremo NTP (Network Time Protocol) e UDP (User Datagram Protocol) per recuperare l'ora da Internet tramite Wi-Fi. Questo orologio Internet può essere molto utile durante la creazione di progetti IoT.
Cos'è NTP?
Network Time Protocol (NTP) è un protocollo di rete utilizzato per la sincronizzazione dell'ora tra i sistemi e le reti di dati. Il framework NTP dipende dai server Internet Time. NTP ha algoritmi per regolare con precisione l'ora del giorno. I server NTP hanno un software che invia l'ora dell'orologio ai computer client utilizzando UDPport 123. Quindi qui in questo progetto, stiamo ottenendo l'ora dal server NTP utilizzando ESP32 e mostrandola sul display OLED.
Materiali richiesti:
- ESP32
- Display OLED 128 * 64
- Breadboard
- Fili maschio-femmina
Schema elettrico:
Qui, stiamo utilizzando la modalità SPI per collegare il nostro modulo display OLED 128 × 64 (SSD1306) a ESP32. Quindi, utilizzerà 7 pin. I collegamenti con ESP32 sono indicati come:
- Pin CS (Chip select) di OLED -> PIN D5 di ESP32
- Pin DC di OLED -> PIN D4 di ESP32
- Pin RES di OLED -> PIN D2 di ESP32
- Pin SDA di OLED -> PIN D23 cioè MOSI di ESP32
- Pin SCK di OLED -> PIN D18 cioè SCK di ESP32
- Vdd di OLED -> Vcc di ESP32
- GND di OLED -> GND di ESP32
Hai bisogno di file di bordo per il tuo ESP32. Menu a discesa del gestore della scheda di check-in dell'IDE di Arduino per il kit di sviluppo ESP32. Se non è presente, segui i passaggi indicati nel link sottostante:
circuitdigest.com/microcontroller-projects/getting-started-with-esp32-with-arduino-ide
Puoi anche usare ESP12 per questo progetto, impara qui come usare ESP12.
Useremo l'IDE di Arduino per scrivere il nostro programma come spiegato nell'articolo precedente.
Spiegazione del codice:
Il codice completo per ESP32 Internet Clock è fornito alla fine dell'articolo. Qui stiamo spiegando alcune parti importanti del codice.
Abbiamo bisogno di diverse librerie da utilizzare nel nostro codice che può essere scaricato dai link sottostanti:
1. Adafruit_SSD1306:
2. SPI:
3. Adafruit_GFX:
4. NTPClient:
5.WiFiUdp:
Quindi abbiamo incluso tutte le librerie e definito la variabile per l'inserimento del nome e della password Wi-Fi.
#includere
Qui la libreria NTPClient.h viene utilizzata per connettersi con il server dell'ora. Ci vuole tempo da un server NTP e mantenerlo sincronizzato. E la libreria Hhre WiFiUdp.h viene utilizzata per inviare e ricevere messaggi UDP. UDP è un protocollo che invia e riceve brevi messaggi dal nostro sistema al server NTP.
Quindi, per ottenere l'ora da Internet, dobbiamo definire tre variabili nel nostro programma per NTP.
NTP_OFFSET che è il fuso orario del tuo paese, ad esempio per l'India è +5: 30 ore. Quindi è 19800 in pochi secondi.
NTP_INTERVAL che è l'intervallo di tempo impiegato da NTP per aggiornare l'ora. Sono 60-64 secondi.
NTP_ADDRESS è il server NTP del tuo paese. Per l'India puoi usare " in.pool.ntp.org ".
#define NTP_OFFSET 19800 // In secondi #define NTP_INTERVAL 60 * 1000 // In millisecondi #define NTP_ADDRESS "1.asia.pool.ntp.org" WiFiUDP ntpUDP; NTPClient timeClient (ntpUDP, NTP_ADDRESS, NTP_OFFSET, NTP_INTERVAL);
Nella funzione di configurazione , inizializzare le impostazioni Wi-Fi per connettersi a Internet.
void setup () { display.begin (); Serial.begin (9600); Serial.println (); Serial.println (); Serial.print ("Connessione a"); Serial.println (ssid); WiFi.begin (ssid, password); while (WiFi.status ()! = WL_CONNECTED) { ritardo (500); Serial.print ("."); } Serial.println (""); Serial.println ("WiFi connesso."); Serial.println ("indirizzo IP:"); Serial.println (WiFi.localIP ()); timeClient.begin ();
Quindi inizializza le funzioni del display per mostrare l'ora su OLED.
display.begin (SSD1306_SWITCHCAPVCC);
Nella funzione loop, abbiamo usato timeClient.update (), questa funzione prende il tempo aggiornato da NTP sotto forma di stringa e lo memorizza nella variabile formattedTime . Quindi visualizzalo su OLED utilizzando la funzione display.println () .
void loop () { timeClient.update (); String formattedTime = timeClient.getFormattedTime (); display.clearDisplay (); display.setTextSize (2); // imposta questi parametri in base alle tue necessità.. display.setCursor (0, 0); display.println (formattedTime);
Di seguito viene fornito il programma completo. Ora finalmente programma ESP32 con Arduino IDE e il tuo orologio Internet è pronto per mostrare l'ora.