Indholdsfortegnelse:
- Trin 1: Google Time
- Trin 2: SNTP -tidsservere
- Trin 3: Få tiden fra RTC -modulet
- Trin 4: RTC -brugerhukommelse
- Trin 5: Eksterne RTC -moduler
- Trin 6: Datalogning
- Trin 7: Konklusion
Video: NODEMCU Lua ESP8266 med ur i realtid (RTC) og EEPROM: 7 trin
2024 Forfatter: John Day | [email protected]. Sidst ændret: 2024-01-30 08:28
Det er vigtigt at få det korrekte tidspunkt, hvis du vil føre en datalog. Der er forskellige måder at få tiden fra kilder på Internettet.
Du kan spørge, hvorfor ikke bruge ESP8266 til at holde tid til dig? Det kan du godt, den har sin egen interne RTC (Real Time Clock), men ESP8266 har 3 forskellige driftsurfrekvenser - 52MHz når den starter, 80MHz under normal drift og 160MHz hvis boostet. Hvis du har brug for mere præcis tidsholdning, især over længere perioder, kan en ekstern RTC muligvis give en løsning. Disse moduler har også en batteribackup i tilfælde af strømtab. En RTC er ikke særlig nøjagtig, da den tæller den tid, der er gået siden den blev indstillet, og selvom den kan gøre det for de fleste applikationer, er den muligvis ikke god nok til kritisk tidsopbevaring. Det er muligt at få det nøjagtige tidspunkt fra en SNTP -tidsserver, hvorfra RTC kan opdateres med jævne mellemrum, hvis det kræves.
DS1307 Tiny RTC I2C -modulet (ovenfor) er et eksempel på disse varer og kan købes på Ebay og andre leverandører for mindre end £ 2. Der er også andre som DS1302 og DS3231, der fungerer på en lignende måde og koster fra 99p og opefter.
DS1307-modulet bruger et I2C-interface, og til en ESP-01 skal det tilsluttes som:
Vcc - 3.3v, Gnd - Gnd, SDA - D3, SCL - D4
SDA og SCL kan tilsluttes enhver af I/O -benene på de større ESP8266'er (ændre koden i overensstemmelse hermed). Kun de venstre sidestifter skal tilsluttes på dette modul.
Trin 1: Google Time
Der er mange eksempler på at få tiden fra Google og se sådan ud. Når du kører GoogleTime.lua -programmet, får du et resultat som dette:
dofile ("GoogleTime.lua")> Tid: Fre, 15. dec 2017 11:19:45 GMT
Problemet med denne metode er, at du får tiden i strengformat, og du skal opdele strengen i dens individuelle bits i timer, minutter, sekunder osv. RTC accepterer tiden i et specielt format, dvs. UNIX -tidsstempel. I lægmandsspørgsmål er dette antallet af sekunder, der er gået siden torsdag 1. januar 1970 til i dag og i dag. UNIX -epoken (1970/01/01 00:00:00) bruges af de fleste computeroperativsystemer, og den forløbne tid gemmes som et signeret 32 bit -nummer. Det betyder, at dette system vil fungere frem til den 19. januar 2038, når antallet bliver for stort til at gemme på denne måde. En løsning er at gemme tallet som 64 bit, men nu er 32 bit metoden tilstrækkelig.
For at indstille tiden til 2015 juli 9, 18:29:49 på den interne RTC ville du bruge denne kode linje:
rtctime.set (1436430589, 0)
De 2 parametre er sekunder og mikrosekunder.
Du kan finde flere oplysninger ved at læse NodeMCU -dokumentationen.
Trin 2: SNTP -tidsservere
Simple Network Time Protocol (SNTP) leveres fra mange kilder på Internettet, og mange lande i hele verden har denne service.
Programmet, SNTPTime2.lua indstiller tiden på den interne RTC. Du skal have rtctime & sntp -modulerne i din build, når du blinker din ESP8266. Programmet får tiden fra serveren på sekunder og mikrosekunder og indstiller den interne RTC med rtctime.set (sek, usec).
Programmet viser derefter dato og klokkeslæt i forskellige formater.
Der er mange SNTP -servere rundt om i verden, og nogle er som følger:
- 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"},
Alle ovenstående kodelinjer kan erstattes i SNTPTime2.lua -programmet.
Der er flere SNTP -servere på nedenstående adresser, som igen kan bruges i programmet.
93.170.62.252, 130.88.202.49, 79.135.97.79, ntp.exnet.com
Google leverer også tidsservere på disse adresser:
216.239.35.0, 216.239.35.4, 216.239.35.8, 216.239.35.12
Du skal huske at få tiden fra det land, du er i, eller du skal muligvis ændre den for de forskellige verdens tidszoner. Nogle lande har også sommertid, så du skal muligvis også håndtere det.
Trin 3: Få tiden fra RTC -modulet
Programmet GetRTCTime.lua læser tiden fra den interne RTC.
Den første del læser tiden og viser den på sekunder og mikrosekunder.
Den anden del konverterer den til et mere læseligt format.
når du ringer til tm = rtctime.epoch2cal (rtctime.get ()) returnerer det:
- år - 1970 ~ 2038
- man - måned 1 ~ 12 i indeværende år
- dag - dag 1 ~ 31 i indeværende måned
- time
- min
- sek
- dag - dag 1 ~ 366 i indeværende år
- wday - dag 1 ~ 7 i den aktuelle uge (søndag er 1)
Hvert element kan fås som tm ["dag"], tm ["år"] …
Du kan finde flere oplysninger ved at læse NodeMCU -dokumentationen.
DisplaySNTPtime.lua er en mere detaljeret måde at vise dato og klokkeslæt på et LCD 128 x 64 OLED -display, da det let kan tilsluttes og kan bruges med disse programmer.
Trin 4: RTC -brugerhukommelse
En lille afvigelse fra tiden er den interne RTC på ESP8266 har 128 x 32 bit hukommelsesadresser, som programmereren kan få adgang til. De er især nyttige, da de kan overleve ESP8266s dybe søvncyklus. Det er op til programmereren at kontrollere deres brug og sikre, at de ikke overskrives ved et uheld.
Jeg har inkluderet RTCmem.lua, et simpelt program, der demonstrerer dets anvendelse. Du skal have rtcmem -modul i din build.
Trin 5: Eksterne RTC -moduler
De eksterne RTC-moduler opretter forbindelse til ESP8266 via I2C-grænsefladen, der kun bruger to I/O-ben og fungerer således med ESP-01 såvel som de fleste andre ESP8266-enheder.
RTC -modulets adresse er 0x68 og tilgås ved hjælp af de normale I2C -kommandoer. Der er dog noget at huske på, dataene i RTC -registre gemmes i BCD -format (base 16), så dine programmer skal håndtere dette. Tid og dato gemmes i 7 registre inden for RTC. På den interne RTC varetages BCD -konverteringerne af rtctime -modulet.
SetExtRTC.lua konverterer dataene til BCD og indstiller tiden.
ReadExtRTC.lua læser tidsdataene og udskriver dem. BEMÆRK: dataene udskrives i hexadecimal.
Jeg har ikke brugt meget tid på at formatere skærmen, da du måske har dine egne ideer om, hvad du vil gøre med dato og klokkeslæt. Dette er grundmotoren i sin enkleste form, så du kan udvikle den yderligere, hvis du ønsker det.
Trin 6: Datalogning
Hvis du ser nærmere på RTC -modulerne, vil du bemærke, at de har en AT24C32 EEPROM IC eller lignende indbygget i dem, eller du kan bruge et 24C256 -kort som ovenfor. De fleste af disse EEPROM IC'er har lignende pin -outs som ovenfor. De leveres med forskellige mængder opbevaring, men de er alle tilgængelige på samme måde. Da AT24C32 allerede er loddet på tavlen, kan den bruges direkte fra I2C på den eksterne RTC.
Hvis du kun har en 24C256 IC eller lignende, kan du sætte den op i et brødbræt, tilslutte A1, A2 og A3 til Gnd, Vcc til 3.3V og SDA OG SCL til I2C, WP kan efterlades flydende. Nogle EEPROM IC'er fungerer kun ved 5V, så tjek først det relevante datablad.
ByteWR.lua skriver 1 byte data til hukommelsesplacering 0x00 i EEPROM og læser det tilbage.
Desiderata.lua skriver et par linjer fra berømt tekst til EEPROM.
eeRead.lua læser data fra EEPROM og udskriver dem.
BEMÆRK: Disse programmer bør også fungere med andre EEPROM -tavler.
Trin 7: Konklusion
Jeg har forsøgt at vise, hvordan RTC og EEPROM fungerer til datalogning. Dette er bare en start for dig at udvikle videre. Du kan tilslutte forskellige enheder til I2C -bussen såsom lyssensorer, barometriske trykfølere, temperatur- og fugtighedsfølere og registrere dataene på EEPROM.
Anbefalede:
ESP8266 netværksur uden nogen RTC - Nodemcu NTP Ur Ingen RTC - INTERNET URPROJEKT: 4 trin
ESP8266 netværksur uden nogen RTC | Nodemcu NTP Ur Ingen RTC | INTERNET KLOKPROJEKT: I projektet vil der blive lavet et urprojekt uden RTC, det vil tage tid fra internettet ved hjælp af wifi, og det vil vise det på st7735 display
Sådan laver du ur i realtid ved hjælp af Arduino og TFT -skærm - Arduino Mega RTC med 3,5 tommer TFT -skærm: 4 trin
Sådan laver du ur i realtid ved hjælp af Arduino og TFT-skærm | Arduino Mega RTC med 3,5 tommer TFT-skærm: Besøg min Youtube-kanal. Introduktion:- I dette indlæg skal jeg lave “Real time Clock” ved hjælp af 3,5 tommer TFT touch LCD, Arduino Mega 2560 og DS3231 RTC-modul …. Inden start … tjek videoen fra min YouTube-kanal..Bemærk:- Hvis du bruger Arduin
Notifikationer i realtid om begivenheder ved hjælp af NodeMCU (Arduino), Google Firebase og Laravel: 4 trin (med billeder)
Meddelelser om begivenheder i realtid ved hjælp af NodeMCU (Arduino), Google Firebase og Laravel: Har du nogensinde ønsket at få besked, når der foretages en handling på dit websted, men e -mail ikke er den rigtige pasform? Vil du høre en lyd eller en klokke, hver gang du foretager et salg? Eller der er brug for din umiddelbare opmærksomhed på grund af en nødsituation
NODEMCU LUA ESP8266 Med CD4017 Decade Counter: 4 trin (med billeder)
NODEMCU LUA ESP8266 Med CD4017 Decade Counter: CD4017 er en tiårs tæller / divider. Det betyder, at når den modtager en puls, tæller den den og sender en udgang til den relevante pin. Det er en ganske let IC at bruge, og du kan enten bygge kredsløbet på et brødbræt eller købe et fra Ebay til
NODEMCU LUA ESP8266 Med MCP23017 16 Bit Port Expander IC: 6 trin (med billeder)
NODEMCU LUA ESP8266 Med MCP23017 16 Bit Port Expander IC: MCP23017 er en relativt let IC at lave et board til, da den har Port A og B på hver side af chippen, og benene er i rækkefølge. På samme måde er I2C -adressebussen alt sammen også. Der er 2 ben på denne IC, som ikke er brugt, da den