Innehållsförteckning:
- Steg 1: Google Time
- Steg 2: SNTP -tidsservrar
- Steg 3: Få tiden från RTC -modulen
- Steg 4: RTC -användarminne
- Steg 5: Externa RTC -moduler
- Steg 6: Dataloggning
- Steg 7: Slutsats
Video: NODEMCU Lua ESP8266 med realtidsklocka (RTC) och EEPROM: 7 steg
2024 Författare: John Day | [email protected]. Senast ändrad: 2024-01-30 12:44
Att få rätt tid är viktigt om du vill föra en datalogg. Det finns olika sätt att få tid från källor på Internet.
Du kan fråga varför inte använda ESP8266 för att hålla tid åt dig? Du kan väl, den har sin egen interna RTC (Real Time Clock), men ESP8266 har 3 olika driftsklockfrekvenser - 52MHz när den startar, 80MHz under vanlig drift och 160MHz om den förstärks. Om du behöver mer exakt tidshållning, särskilt under längre perioder, kan en extern RTC ge en lösning. Dessa moduler har också en batteribackup vid strömavbrott. En RTC är inte särskilt korrekt eftersom den räknar tiden som har gått sedan den sattes och även om den kan göra för de flesta applikationer är den kanske inte tillräckligt bra för att hålla kritisk tid. Det är möjligt att få en exakt tid från en SNTP -tidsserver från vilken RTC kan uppdateras med jämna mellanrum om det behövs.
DS1307 Tiny RTC I2C -modulen (ovan) är ett exempel på dessa artiklar och kan köpas på Ebay och andra leverantörer för mindre än £ 2. Det finns också andra som DS1302 och DS3231 som fungerar på ett liknande sätt och kostar från 99p och uppåt.
DS1307-modulen använder ett I2C-gränssnitt och för en ESP-01 bör anslutas som:
Vcc - 3.3v, Gnd - Gnd, SDA - D3, SCL - D4
SDA och SCL kan anslutas till någon av I/O -stiften på de större ESP8266: erna (ändra koden i enlighet därmed). Endast de vänstra sidostiften behöver anslutas till denna modul.
Steg 1: Google Time
Det finns många exempel på att få tid från Google och se ut ungefär så här. När du kör programmet GoogleTime.lua får du ett resultat så här:
dofile ("GoogleTime.lua")> Tid: fre 15 dec 2017 11:19:45 GMT
Problemet med den här metoden är att du får tiden i strängformat och du måste dela strängen i dess enskilda bitar i timmar, minuter, sekunder etc. RTC accepterar tiden i ett speciellt format, dvs UNIX -tidsstämpel. I lekmannas termer är detta antalet sekunder som har gått sedan torsdagen den 1 januari 1970 till idag och idag. UNIX -epoken (1970/01/01 00:00:00) används av de flesta datoroperativsystem och den förflutna tiden lagras som ett signerat 32 bitars nummer. Detta innebär att detta system kommer att fungera fram till 19 januari 2038 då antalet kommer att bli för stort för att lagras på detta sätt. En lösning är att lagra numret som 64 bitar, men för närvarande räcker 32 -bitarsmetoden.
För att ställa in tiden till 2015 juli 9, 18:29:49 på den interna RTC använder du denna kodrad:
rtctime.set (1436430589, 0)
De två parametrarna är sekunder och mikrosekunder.
Du kan hitta mer information om att läsa NodeMCU -dokumentationen.
Steg 2: SNTP -tidsservrar
Simple Network Time Protocol (SNTP) tillhandahålls från många källor på Internet, och många länder över hela världen har denna tjänst.
Programmet, SNTPTime2.lua ställer in tiden på den interna RTC. Du måste ha rtctime & sntp -modulerna i din build när du blinkar din ESP8266. Programmet får tiden från servern på sekunder och mikrosekunder och ställer in den interna RTC med rtctime.set (sek, usec).
Programmet visar sedan datum och tid i olika format.
Det finns många SNTP -servrar runt om i världen och några är följande:
- 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"},
Alla ovanstående kodrader kan ersättas med SNTPTime2.lua -programmet.
Det finns fler SNTP -servrar på nedanstående adresser som igen kan användas i programmet.
93.170.62.252, 130.88.202.49, 79.135.97.79, ntp.exnet.com
Google tillhandahåller också tidsservrar på följande adresser:
216.239.35.0, 216.239.35.4, 216.239.35.8, 216.239.35.12
Du måste komma ihåg att få tiden från landet du befinner dig i, eller så kan du behöva ändra den för de olika tidszonerna i världen. Vissa länder har också sommartid, så du kan behöva hantera det också.
Steg 3: Få tiden från RTC -modulen
Programmet GetRTCTime.lua läser tiden från den interna RTC.
Den första delen läser tiden och visar den på sekunder och mikrosekunder.
Den andra delen omvandlar den till ett mer mänskligt läsbart format.
när du ringer tm = rtctime.epoch2cal (rtctime.get ()) returnerar det:
- år - 1970 ~ 2038
- mån - månad 1 ~ 12 under innevarande år
- dag - dag 1 ~ 31 i innevarande månad
- timme
- min
- sek
- dag - dag 1 ~ 366 under innevarande år
- wday - dag 1 ~ 7 i innevarande vecka (söndag är 1)
Varje objekt kan nås som tm ["dag"], tm ["år"] …
Du kan hitta mer information om att läsa NodeMCU -dokumentationen.
DisplaySNTPtime.lua är ett mer genomarbetat sätt att visa datum och tid på en LCD 128 x 64 OLED -display, eftersom den enkelt kan anslutas och kan användas med dessa program.
Steg 4: RTC -användarminne
En liten avvikelse från tiden är den interna RTC på ESP8266 har 128 x 32 bitars minnesadresser som kan nås av programmeraren. De är särskilt användbara eftersom de kan överleva den djupa sömncykeln i ESP8266. Det är upp till programmeraren att kontrollera deras användning och se till att de inte skrivs över av misstag.
Jag har inkluderat RTCmem.lua, ett enkelt program som visar dess användning. Du måste ha rtcmem -modul i ditt bygge.
Steg 5: Externa RTC -moduler
De externa RTC-modulerna ansluter till ESP8266 via I2C-gränssnittet, som bara använder två I/O-stift och fungerar sålunda med ESP-01 som de flesta andra ESP8266-enheter.
RTC -modulens adress är 0x68 och nås med de vanliga I2C -kommandona. Det finns dock något att tänka på, data i RTC -registren lagras i BCD -format (bas 16), så dina program måste hantera detta. Tid och datum lagras i 7 register inom RTC. På den interna RTC sköts BCD -omvandlingarna av rtctime -modulen.
SetExtRTC.lua konverterar data till BCD och ställer in tiden.
ReadExtRTC.lua läser tidsdata och skriver ut dem. OBS: data skrivs ut hexadecimal.
Jag har inte lagt ner mycket tid på att formatera skärmen eftersom du kanske har dina egna idéer om vad du vill göra med datum och tid. Detta är grundmotorn i sin enklaste form, så att du kan utveckla den vidare om du vill.
Steg 6: Dataloggning
Om du tittar noga på RTC -modulerna kommer du att märka att de har en AT24C32 EEPROM IC eller liknande inbyggda i dem, eller så kan du använda ett 24C256 -kort enligt ovan. De flesta av dessa EEPROM IC har liknande pin -outs som ovan. De levereras med olika mängder lagring, men alla är tillgängliga på samma sätt. Eftersom AT24C32 redan är lödt på kortet kan den användas direkt från I2C för den externa RTC.
Om du bara har en 24C256 IC eller liknande kan du ställa in den i ett brödbräda, ansluta A1, A2 och A3 till Gnd, Vcc till 3.3V och SDA OCH SCL till I2C, WP kan lämnas flytande. Vissa EEPROM IC fungerar bara med 5V, så kontrollera det relevanta databladet först.
ByteWR.lua skriver 1 byte data till minnesplats 0x00 i EEPROM och läser tillbaka den.
Desiderata.lua skriver ett par rader från känd text till EEPROM.
eeRead.lua läser data från EEPROM och skriver ut dem.
OBS: Dessa program bör också fungera med andra EEPROM -kort.
Steg 7: Slutsats
Jag har försökt visa hur RTC och EEPROM fungerar för dataloggning. Detta är bara en förrätt för dig att utvecklas vidare. Du kan ansluta olika enheter till I2C -bussen som ljussensorer, barometriska trycksensorer, temperatur- och fuktsensorer och spela in data på EEPROM.
Rekommenderad:
Ställa in DS3231 RTC (realtidsklocka) exakt, snabbt och automatiserat med Java (+-1s): 3 steg
Ställa in DS3231 RTC (realtidsklocka) exakt, snabbt och automatiserat med hjälp av Java (+-1s): Denna instruktion kommer att visa dig hur du ställer in tiden på en DS3231 realtidsklocka med en Arduino och ett litet Java-program som använder den seriella anslutningen av Arduino. programmets grundläggande logik: 1. Arduino skickar en serieförfrågan
DS1307 Realtidsklocka RTC med Arduino: 4 steg
DS1307 Real Time Clock RTC With Arduino: I den här självstudien kommer vi att lära oss om Real Time Clock (RTC) och hur Arduino & Real Time Clock IC DS1307 sätts ihop som en timing -enhet. Real Time Clock (RTC) används för att övervaka tid och underhålla en kalender.För att använda en RTC, w
Gör en klocka med M5stick C med Arduino IDE - RTC Realtidsklocka med M5stack M5stick-C: 4 steg
Gör en klocka med M5stick C med Arduino IDE | RTC Real Time Clock Med M5stack M5stick-C: Hej killar i denna instruktioner kommer vi att lära oss hur man gör en klocka med m5stick-C utvecklingskort av m5stack med Arduino IDE. Så m5stick kommer att visa datum, tid & veckan i månaden på displayen
Hur man gör realtidsklocka med Arduino och TFT -skärm - Arduino Mega RTC med 3,5 tums TFT -skärm: 4 steg
Hur man gör realtidsklocka med Arduino och TFT-skärm | Arduino Mega RTC med 3,5 tums TFT-skärm: Besök min Youtube-kanal. Introduktion:- I det här inlägget ska jag göra “Real time Clock” med 3,5 tums TFT touch LCD, Arduino Mega 2560 och DS3231 RTC-modul …. Innan du börjar … kolla videon från min YouTube-kanal..OBS:- Om du använder Arduin
8 Reläkontroll med NodeMCU och IR -mottagare med WiFi och IR -fjärrkontroll och Android -app: 5 steg (med bilder)
8 Reläkontroll med NodeMCU och IR -mottagare med WiFi och IR -fjärrkontroll och Android -app: Styrning av 8 reläväxlar med nodemcu och IR -mottagare via wifi och IR -fjärrkontroll och Android -app. Fjärrkontrollen fungerar oberoende av wifi -anslutning. HÄR ÄR EN UPPDATERAD VERSIONKLICK HÄR