Sommario:

Orologio Internet: visualizza data e ora con un OLED utilizzando ESP8266 NodeMCU con protocollo NTP: 6 passaggi
Orologio Internet: visualizza data e ora con un OLED utilizzando ESP8266 NodeMCU con protocollo NTP: 6 passaggi

Video: Orologio Internet: visualizza data e ora con un OLED utilizzando ESP8266 NodeMCU con protocollo NTP: 6 passaggi

Video: Orologio Internet: visualizza data e ora con un OLED utilizzando ESP8266 NodeMCU con protocollo NTP: 6 passaggi
Video: Arduino ESP8266 WiFi e NTP 2024, Dicembre
Anonim
Orologio Internet: visualizza data e ora con un OLED utilizzando ESP8266 NodeMCU con protocollo NTP
Orologio Internet: visualizza data e ora con un OLED utilizzando ESP8266 NodeMCU con protocollo NTP

Ciao ragazzi in questo tutorial costruiremo un orologio Internet che riceverà il tempo da Internet, quindi questo progetto non avrà bisogno di alcun RTC per essere eseguito, avrà solo bisogno di una connessione Internet funzionante

E per questo progetto hai bisogno di un esp8266 che avrà un wifi per ottenere l'accesso a Internet e un display per visualizzare l'ora su di esso e esp8266 recupererà il tempo da Internet utilizzando il protocollo NTP, ntp sta per network time protocol, quindi fondamentalmente ci sono server ntp sul web che vengono utilizzati per sincronizzare gli orologi del computer e utilizzeremo quei server per ottenere il tempo nel nostro progetto.

Passaggio 1: cose di cui hai bisogno

Cose di cui hai bisogno
Cose di cui hai bisogno
Cose di cui hai bisogno
Cose di cui hai bisogno
Cose di cui hai bisogno
Cose di cui hai bisogno

per questo progetto avrai bisogno delle seguenti cose:

Esp8266/nodemcu

Vecchio ssd1306 0,96"

Ponticelli

tagliere

Cavo USB

Passaggio 2: connessioni

Connessioni
Connessioni

Questo display OLED a 4 pin comunica con il modulo ESP8266 utilizzando il protocollo I2C, di seguito sono riportati lo schema elettrico e la tabella delle connessioni per collegare i pin OLED I2C con NodeMCU per visualizzare l'ora di Internet.

Passaggio 3: scarica le librerie

Scarica le biblioteche
Scarica le biblioteche
Scarica le biblioteche
Scarica le biblioteche

Assicurati di aver scaricato le librerie SD1306 nel tuo Arduino ide come mostrato nell'immagine e assicurati di avere anche la libreria Adafruit GFX, in caso contrario installa queste due librerie.

Nel tuo IDE Arduino vai su Gestore librerie e cerca NTP e scarica semplicemente la libreria client NTP come ho scaricato, fai riferimento all'immagine per ulteriore aiuto.

Passaggio 4: cos'è l'NTP

Che cos'è l'NTP
Che cos'è l'NTP

NTP è uno dei più vecchi IP (Internet Protocol) di rete per la sincronizzazione degli orologi tra le reti di computer. È stato progettato da David L. Mills dell'Università del Delaware nel 1981. Questo protocollo può essere utilizzato per sincronizzare molte reti al Coordinated Universal Time (UTC) in pochi millisecondi. UTC è lo standard orario principale con cui il mondo regola l'orologio e l'ora. L'UTC non cambia e varia per le diverse località geografiche. NTP utilizza l'UTC come riferimento temporale e fornisce un'ora precisa e sincronizzata su Internet.

NTP funziona su un modello gerarchico client-server. Il modello di punta ha orologi di riferimento noti come "stratum0" come orologi atomici, onde radio, GPS, GSM che riceve l'ora dal satellite. I server che ricevono l'ora da stratum0 sono chiamati "stratum1" e i server che ricevono l'ora da stratum1 sono chiamati "stratum2" e così via. Questo va avanti e la precisione del tempo continua a diminuire dopo ogni fase. NTP seleziona automaticamente la migliore tra diverse sorgenti temporali disponibili per la sincronizzazione, il che lo rende un protocollo in grado di tollerare i guasti. Quindi qui in questo progetto, stiamo ottenendo tempo dal server NTP utilizzando ESP8266 NodeMCU e mostrandolo sul display OLED. Questo stesso tipo di orologio Internet viene creato utilizzando ESP32 nel tutorial precedente.

Passaggio 5: parte di codifica

Parte di codifica
Parte di codifica

Per richiedere data e ora, inizializzare il client dell'ora con l'indirizzo dei server NTP. Per una migliore precisione scegli l'indirizzo dei server NTP vicini alla tua area geografica. Qui usiamo "pool.ntp.org" che fornisce server da tutto il mondo. Se desideri scegliere server dall'Asia, puoi utilizzare "asia.pool.ntp.org". timeClient rileva anche l'offset dell'ora UTC in millisecondi del fuso orario. Ad esempio, l'offset UTC per l'India è +5:30, quindi convertiamo questo offset in millisecondi che è uguale a 5*60*60+30*60 = 19800.

La zona. Scostamento dell'ora UTC (ore e minuti). Scostamento dell'ora UTC (secondi)

INDIA +5:30 19800

LONDRA 0:00. 0

NEW YORK -5:00 -18000

Copia il seguente codice e inserisci il tuo wifi e la password nel codice e inserisci l'offset di tempo nel codice, quindi caricalo sulle tue schede esp8266.:

#include "NTPClient.h"#include "ESP8266WiFi.h" // fornisce le routine Wi-Fi specifiche di ESP8266 che stiamo chiamando per connetterci alla rete #include "WiFiUdp.h" // gestisce l'invio e la ricezione di pacchetti UDP

#include "SPI.h" // SPI per interfacciare OLED con NodeMCu

#include "Adafruit_GFX.h"

#include "Adafruit_SSD1306.h"

#define SCREEN_WIDTH 128 // Larghezza del display OLED, in pixel

#define SCREEN_HEIGHT 64 // Altezza del display OLED, in pixel

#define OLED_RESET -1

Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);

constchar *ssid = "yourwifissid";

const char *password = "yourwifipass";

WiFiUDP ntpUDP;

NTPClient timeClient(ntpUDP, "pool.ntp.org", 19800, 60000);

String arr_days={"Domenica", "Lunedì", "Martedì", "Mercoledì", "Giovedì", "Venerdì", "Sabato"};

Stringa data_ora; // È possibile specificare il pool del server dell'ora e l'offset (in secondi, può essere // modificato in seguito con setTimeOffset()). Inoltre è possibile specificare // l'intervallo di aggiornamento (in millisecondi, può essere modificato utilizzando setUpdateInterval()).

configurazione nulla()

{

Serial.begin(115200);

WiFi.begin(ssid, password);

while (WiFi.status() != WL_CONNECTED)

{

ritardo (500);

Serial.print (".");

}

if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C))

{

Serial.println(F("allocazione SSD1306 non riuscita"));

per(;;); // Non procedere, loop per sempre

}

display.clearDisplay();

display.setTextSize(2); // Disegna testo in scala 2X

display.setTextColor(BIANCO);

display.setCursor(5, 2);

display.println("BENVENUTO A");

display.println ("istruzioni");

display.println("Progetto");

display.display();

ritardo (3000);

timeClient.begin();

}

ciclo vuoto()

{

timeClient.update();

display.clearDisplay();

Serial.println(timeClient.getFormattedTime());

display.setTextSize(2); // Disegna testo in scala 2X

display.setTextColor(BLUE);

display.setCursor(0, 2);

int hh = timeClient.getHours();

int mm = timeClient.getMinutes();

int ss = timeClient.getSeconds();

se(hh>12)

{

hh=hh-12;

display.print(hh);

display.print(: );

display.print(mm);

display.print(: );

display.print(s);

display.println("PM");

}

altro

{

display.print(hh);

display.print(: );

display.print(mm);

display.print(: );

display.print(s);

display.println("AM");

}

int giorno = timeClient.getDay();

display.println("'"+arr_days[giorno]+"'");

date_time = timeClient.getFormattedDate();

int index_date = date_time.indexOf("T");

Stringa data = date_ora.substring(0, index_date);

Serial.println(data);

display.println(data);

display.display();

// Mostra il testo iniziale }

Passaggio 6: ottenere data e ora

Ottenere data e ora
Ottenere data e ora

se hai collegato tutto correttamente e hai caricato anche il codice correttamente, sarai in grado di vedere il tuo orologio ntp in esecuzione sul display oled come il mio in esecuzione sul display oled. Si prega di fare riferimento all'immagine per l'output.

Consigliato: