Sommario:
- Passaggio 1: ora di Google
- Passaggio 2: server dell'ora SNTP
- Passaggio 3: ottenere il tempo dal modulo RTC
- Passaggio 4: memoria utente RTC
- Passaggio 5: moduli RTC esterni
- Passaggio 6: registrazione dei dati
- Passaggio 7: conclusione
Video: NODEMCU Lua ESP8266 con orologio in tempo reale (RTC) e EEPROM: 7 passaggi
2024 Autore: John Day | [email protected]. Ultima modifica: 2024-01-30 10:02
Ottenere l'ora corretta è essenziale se si desidera conservare un registro dei dati. Esistono vari modi per ottenere l'ora da fonti su Internet.
Potresti chiedere perché non usare ESP8266 per tenere il tempo per te? Bene, puoi, ha il suo RTC (Real Time Clock) interno, ma ESP8266 ha 3 diverse frequenze di clock operative: 52 MHz all'avvio, 80 MHz durante il normale funzionamento e 160 MHz se potenziato. Se hai bisogno di un cronometraggio più accurato, soprattutto per periodi più lunghi, un RTC esterno potrebbe fornire una soluzione. Questi moduli dispongono anche di una batteria di backup in caso di mancanza di alimentazione. Un RTC non è molto accurato in quanto conta il tempo trascorso da quando è stato impostato e sebbene possa funzionare per la maggior parte delle applicazioni, potrebbe non essere abbastanza buono per il mantenimento del tempo critico. È possibile ottenere l'ora esatta da un server dell'ora SNTP da cui l'RTC può essere aggiornato a intervalli regolari, se necessario.
Il modulo DS1307 Tiny RTC I2C (sopra) è un esempio di questi articoli e può essere acquistato su Ebay e altri fornitori per meno di £ 2. Ce ne sono anche altri come il DS1302 e il DS3231 che funzionano in modo simile e costano da 99p in su.
Il modulo DS1307 utilizza un'interfaccia I2C e per un ESP-01 dovrebbe essere collegato come:
Vcc - 3.3v, Gnd - Gnd, SDA - D3, SCL - D4
SDA e SCL possono essere collegati a uno qualsiasi dei pin I/O sui più grandi ESP8266 (modificare il codice di conseguenza). Solo i pin sul lato sinistro devono essere collegati a questo modulo.
Passaggio 1: ora di Google
Ci sono molti esempi di come ottenere il tempo da Google e assomigliare a questo. Quando esegui il programma GoogleTime.lua ottieni un risultato come questo:
dofile("GoogleTime.lua")> Ora: Ven, 15 Dic 2017 11:19:45 GMT
Il problema con questo metodo è che ottieni l'ora in formato stringa e devi dividere la stringa nei suoi singoli bit per ore, minuti, secondi, ecc. L'RTC accetta l'ora in un formato speciale, ad esempio timestamp UNIX. In parole povere questo è il numero di secondi trascorsi da giovedì 1 gennaio 1970 a oggi e ora. UNIX Epoch (1970/01/01 00:00:00) è utilizzato dalla maggior parte dei sistemi operativi per computer e il tempo trascorso viene memorizzato come numero a 32 bit con segno. Ciò significa che questo sistema funzionerà fino al 19 gennaio 2038, quando il numero diventerà troppo grande per essere memorizzato in questo modo. Una soluzione è memorizzare il numero come 64 bit, ma per ora sarà sufficiente il metodo a 32 bit.
Per impostare l'ora al 9 luglio 2015 alle 18:29:49 sull'RTC interno, utilizzare questa riga di codice:
rtctime.set (1436430589, 0)
I 2 parametri sono secondi e microsecondi.
Puoi trovare maggiori informazioni leggendo la documentazione di NodeMCU.
Passaggio 2: server dell'ora SNTP
Il Simple Network Time Protocol (SNTP) è fornito da molte fonti su Internet e molti paesi in tutto il mondo hanno questo servizio.
Il programma SNTPTime2.lua imposta l'ora sull'RTC interno. Devi avere i moduli rtctime e sntp nella tua build quando esegui il flashing di ESP8266. Il programma ottiene l'ora dal server in secondi e micro secondi e imposta l'RTC interno con rtctime.set(sec, usec).
Il programma visualizza quindi la data e l'ora in diversi formati.
Esistono molti server SNTP in tutto il mondo e alcuni sono i seguenti:
- sntp.sync({"216.239.35.0"},
- sntp.sync({"0.uk.pool.ntp.org", "0.uk.pool.ntp.org"},
- sntp.sync({"3.uk.pool.ntp.org", "143.210.16.201"},
- sntp.sync({"0.uk.pool.ntp.org", "1.uk.pool.ntp.org", "3.uk.pool.ntp.org"},
Tutte le righe di codice di cui sopra possono essere sostituite nel programma SNTPTime2.lua.
Ci sono più server SNTP agli indirizzi sotto i quali possono essere nuovamente utilizzati nel programma.
93.170.62.252, 130.88.202.49, 79.135.97.79, ntp.exnet.com
Google fornisce anche time server a questi indirizzi:
216.239.35.0, 216.239.35.4, 216.239.35.8, 216.239.35.12
È necessario ricordare di ottenere l'ora dal paese in cui ci si trova o potrebbe essere necessario modificarla per i diversi fusi orari del mondo. Inoltre, alcuni paesi hanno l'ora legale, quindi potresti dover affrontare anche questo.
Passaggio 3: ottenere il tempo dal modulo RTC
Il programma GetRTCTime.lua legge l'ora dall'RTC interno.
La prima parte legge il tempo e lo visualizza in secondi e microsecondi.
La seconda parte lo converte in un formato più leggibile dall'uomo.
quando si chiama tm = rtctime.epoch2cal(rtctime.get()) restituisce:
- anno - 1970 ~ 2038
- lun - mese 1 ~ 12 nell'anno in corso
- giorno - giorno 1 ~ 31 nel mese corrente
- ora
- min
- secondo
- giorno - giorno 1 ~ 366 nell'anno in corso
- wday - giorno 1 ~ 7 della settimana corrente (domenica è 1)
È possibile accedere a ciascun elemento come tm["day"], tm["year"]…
Puoi trovare maggiori informazioni leggendo la documentazione di NodeMCU.
DisplaySNTPtime.lua è un modo più elaborato per mostrare la data e l'ora su un display LCD 128 x 64 OLED, poiché è facilmente collegato e può essere utilizzato con questi programmi.
Passaggio 4: memoria utente RTC
Un piccolo diversivo dal cronometraggio è che l'RTC interno sull'ESP8266 ha indirizzi di memoria 128 x 32 bit a cui è possibile accedere dal programmatore. Sono particolarmente utili in quanto possono sopravvivere al ciclo di sonno profondo dell'ESP8266. Spetta al programmatore controllarne l'utilizzo e assicurarsi che non vengano sovrascritti accidentalmente.
Ho incluso RTCmem.lua, un semplice programma che ne dimostra l'utilizzo. Devi avere il modulo rtcmem nella tua build.
Passaggio 5: moduli RTC esterni
I moduli RTC esterni si collegano all'ESP8266 tramite l'interfaccia I2C, che utilizza solo due pin I/O e quindi funziona con ESP-01 e con la maggior parte degli altri dispositivi ESP8266.
L'indirizzo del modulo RTC è 0x68 e vi si accede utilizzando i normali comandi I2C. C'è, tuttavia, qualcosa da tenere a mente, i dati nei registri RTC sono memorizzati in formato BCD (base 16), quindi i tuoi programmi devono occuparsene. L'ora e la data sono memorizzate in 7 registri all'interno dell'RTC. Sull'RTC interno, le conversioni BCD sono gestite dal modulo rtctime.
SetExtRTC.lua converte i dati in BCD e imposta l'ora.
ReadExtRTC.lua legge i dati temporali e li stampa. NOTA: i dati vengono stampati in esadecimale.
Non ho passato molto tempo a formattare il display poiché potresti avere le tue idee su cosa vuoi fare con data e ora. Questo è il motore di base nella sua forma più semplice, in modo che tu possa svilupparlo ulteriormente se lo desideri.
Passaggio 6: registrazione dei dati
Se osservi attentamente i moduli RTC, noterai che hanno un circuito integrato EEPROM AT24C32 o simile integrato, oppure puoi utilizzare una scheda 24C256 come sopra. La maggior parte di questi circuiti integrati EEPROM ha pin out simili a quelli sopra. Vengono forniti con varie quantità di spazio di archiviazione, ma sono tutti accessibili allo stesso modo. Poiché l'AT24C32 è già saldato sulla scheda, può essere utilizzato direttamente dall'I2C dell'RTC esterno.
Se hai solo un IC 24C256 o simile, puoi configurarlo in una breadboard, collegare A1, A2 e A3 a Gnd, Vcc a 3.3V e SDA AND SCL a I2C, WP può essere lasciato flottante. Alcuni circuiti integrati EEPROM funzionano solo a 5V, quindi controlla prima la scheda tecnica pertinente.
ByteWR.lua scrive 1 byte di dati nella posizione di memoria 0x00 della EEPROM e li rilegge.
Desiderata.lua scrive un paio di righe da un famoso testo nella EEPROM.
eeRead.lua legge i dati dalla EEPROM e li stampa.
NOTA: Questi programmi dovrebbero funzionare anche con altre schede EEPROM.
Passaggio 7: conclusione
Ho provato a mostrare come funzionano RTC e EEPROM per la registrazione dei dati. Questo è solo un punto di partenza per sviluppare ulteriormente. È possibile collegare al bus I2C vari dispositivi come sensori di luce, sensori di pressione barometrica, sensori di temperatura e umidità e registrare i dati sulla EEPROM.
Consigliato:
Tracker Covid19 in tempo reale che utilizza ESP8266 e OLED - Dashboard Covid19 in tempo reale: 4 passaggi
Tracker Covid19 in tempo reale che utilizza ESP8266 e OLED | Dashboard Covid19 in tempo reale: visita il sito Web Techtronic Harsh: http://techtronicharsh.com Ovunque c'è un enorme focolaio del Novel Corona Virus (COVID19). È diventato necessario tenere d'occhio l'attuale scenario di COVID-19 nel mondo. Quindi, essendo a casa, questo è stato il p
Orologio di rete ESP8266 senza RTC - Nodemcu NTP Clock No RTC - PROGETTO OROLOGIO INTERNET: 4 passaggi
Orologio di rete ESP8266 senza RTC | Nodemcu NTP Clock No RTC | PROGETTO OROLOGIO INTERNET: Nel progetto verrà realizzato un progetto orologio senza RTC, impiegherà tempo da Internet tramite wifi e lo visualizzerà sul display st7735
DS1307 Orologio in tempo reale RTC con Arduino: 4 passaggi
DS1307 Real Time Clock RTC con Arduino: in questo tutorial, impareremo a conoscere Real Time Clock (RTC) e come Arduino & Real Time Clock IC DS1307 sono messi insieme come un dispositivo di cronometraggio. Real Time Clock (RTC) viene utilizzato per monitorare l'ora e mantenere un calendario. Per utilizzare un RTC, w
Creare un orologio con M5stick C usando Arduino IDE - Orologio in tempo reale RTC con M5stack M5stick-C: 4 passaggi
Creare un orologio con M5stick C usando Arduino IDE | Orologio in tempo reale RTC con M5stack M5stick-C: Ciao ragazzi in questo tutorial impareremo come creare un orologio con la scheda di sviluppo m5stick-C di m5stack usando Arduino IDE. Quindi m5stick visualizzerà data, ora e amp; settimana del mese sul display
Come creare un orologio in tempo reale utilizzando Arduino e display TFT-Arduino Mega RTC con display TFT da 3,5 pollici: 4 passaggi
Come creare un orologio in tempo reale utilizzando Arduino e display TFT|Arduino Mega RTC con display TFT da 3,5 pollici: visita il mio canale Youtube.Introduzione:- In questo post realizzerò "Orologio in tempo reale" utilizzando LCD touch TFT da 3,5 pollici, Arduino Mega 2560 e modulo RTC DS3231….Prima di iniziare…controlla il video dal mio canale YouTube..Nota:- Se stai usando Arduin