Inhoudsopgave:
- Stap 1: Google Tijd
- Stap 2: SNTP-tijdservers
- Stap 3: De tijd halen uit de RTC-module
- Stap 4: RTC-gebruikersgeheugen
- Stap 5: Externe RTC-modules
- Stap 6: Gegevensregistratie
- Stap 7: Conclusie
Video: NODEMCU Lua ESP8266 met real-time klok (RTC) & EEPROM - Ajarnpa
2024 Auteur: John Day | [email protected]. Laatst gewijzigd: 2024-01-30 11:17
De juiste tijd krijgen is essentieel als u een datalog wilt bijhouden. Er zijn verschillende manieren om de tijd uit bronnen op internet te halen.
U vraagt zich misschien af waarom u de ESP8266 niet gebruikt om de tijd voor u bij te houden? Dat kan, het heeft zijn eigen interne RTC (Real Time Clock), maar de ESP8266 heeft 3 verschillende werkende klokfrequenties - 52 MHz wanneer het opstart, 80 MHz tijdens normaal gebruik en 160 MHz als het wordt versterkt. Als u een nauwkeurigere tijdregistratie nodig heeft, vooral over langere periodes, dan kan een externe RTC een oplossing bieden. Deze modules hebben ook een batterij back-up in geval van stroomuitval. Een RTC is niet erg nauwkeurig omdat het de tijd telt die is verstreken sinds het is ingesteld en hoewel het voor de meeste toepassingen kan werken, is het misschien niet goed genoeg voor kritieke tijdregistratie. Het is mogelijk om een nauwkeurige tijd te krijgen van een SNTP-tijdserver waarvan de RTC indien nodig met regelmatige tussenpozen kan worden bijgewerkt.
De DS1307 Tiny RTC I2C-module (hierboven) is een voorbeeld van deze items en kan op Ebay en andere leveranciers worden gekocht voor minder dan £ 2. Er zijn ook andere zoals de DS1302 en DS3231 die op een vergelijkbare manier werken en vanaf 99 pence kosten.
De DS1307-module gebruikt een I2C-interface en moet voor een ESP-01 worden aangesloten als:
Vcc - 3.3v, Gnd - Gnd, SDA - D3, SCL - D4
SDA en SCL kunnen worden aangesloten op een van de I/O-pinnen op de grotere ESP8266's (pas de code dienovereenkomstig aan). Op deze module hoeven alleen de pinnen aan de linkerkant te worden aangesloten.
Stap 1: Google Tijd
Er zijn veel voorbeelden van het verkrijgen van de tijd van Google en zien er ongeveer zo uit. Wanneer u het programma GoogleTime.lua uitvoert, krijgt u het volgende resultaat:
dofile("GoogleTime.lua")> Tijd: vr, 15 december 2017 11:19:45 GMT
Het probleem met deze methode is dat je de tijd in tekenreeksformaat krijgt en je de tekenreeks moet splitsen in zijn individuele bits voor uren, minuten, seconden enz. De RTC accepteert de tijd in een speciaal formaat, d.w.z. UNIX-tijdstempel. In termen van de leek is dit het aantal seconden dat is verstreken sinds donderdag 1 januari 1970 tot heden en tijd. Het UNIX-tijdperk (1970/01/01 00:00:00) wordt gebruikt door de meeste computerbesturingssystemen en de verstreken tijd wordt opgeslagen als een ondertekend 32-bits nummer. Dit betekent dat dit systeem zal werken tot 19 januari 2038 wanneer het aantal te groot wordt om op deze manier op te slaan. Een oplossing is om het nummer als 64 bits op te slaan, maar voorlopig is de 32 bit methode voldoende.
Om de tijd in te stellen op 9 juli 2015 18:29:49 op de interne RTC, gebruikt u deze regel code:
rtctime.set(1436430589, 0)
De 2 parameters zijn seconden en microseconden.
U kunt meer informatie vinden in de NodeMCU-documentatie.
Stap 2: SNTP-tijdservers
Simple Network Time Protocol (SNTP) wordt geleverd door veel bronnen op internet en veel landen over de hele wereld hebben deze service.
Het programma SNTPTime2.lua stelt de tijd in op de interne RTC. U moet de rtctime- en sntp-modules in uw build hebben wanneer u uw ESP8266 flasht. Het programma haalt de tijd van de server in seconden en microseconden en stelt de interne RTC in met rtctime.set(sec, usec).
Het programma geeft dan de datum en tijd weer in verschillende formaten.
Er zijn veel SNTP-servers over de hele wereld en sommige zijn als volgt:
- 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 bovenstaande coderegels kunnen worden vervangen door het programma SNTPTime2.lua.
Er zijn meer SNTP-servers op de onderstaande adressen die weer in het programma kunnen worden gebruikt.
93.170.62.252, 130.88.202.49, 79.135.97.79, ntp.exnet.com
Google biedt ook tijdservers op deze adressen:
216.239.35.0, 216.239.35.4, 216.239.35.8, 216.239.35.12
U moet eraan denken om de tijd op te halen uit het land waarin u zich bevindt, anders moet u deze mogelijk aanpassen voor de verschillende wereldtijdzones. Ook hebben sommige landen zomertijd, dus daar kan je ook mee te maken krijgen.
Stap 3: De tijd halen uit de RTC-module
Het programma GetRTCTime.lua leest de tijd uit de interne RTC.
Het eerste deel leest de tijd en geeft deze weer in seconden en microseconden.
Het tweede deel zet het om in een meer voor mensen leesbaar formaat.
bij het aanroepen van tm = rtctime.epoch2cal(rtctime.get()) geeft het terug:
- jaar - 1970 ~ 2038
- ma - maand 1 ~ 12 in het huidige jaar
- dag - dag 1 ~ 31 in huidige maand
- uur
- min
- sec
- dag - dag 1 ~ 366 in het huidige jaar
- wday - dag 1 ~ 7 in huidige week (zondag is 1)
Elk item is toegankelijk als tm["day"], tm["year"]…
U kunt meer informatie vinden in de NodeMCU-documentatie.
DisplaySNTPtime.lua is een meer uitgebreide manier om de datum en tijd weer te geven op een LCD 128 x 64 OLED-scherm, omdat het eenvoudig kan worden aangesloten en met deze programma's kan worden gebruikt.
Stap 4: RTC-gebruikersgeheugen
Een kleine afleiding van het bijhouden van de tijd is dat de interne RTC op de ESP8266 128 x 32 bit geheugenadressen heeft die toegankelijk zijn voor de programmeur. Ze zijn vooral handig omdat ze de diepe slaapcyclus van de ESP8266 kunnen overleven. Het is aan de programmeur om het gebruik ervan te controleren en ervoor te zorgen dat ze niet per ongeluk worden overschreven.
Ik heb RTCmem.lua toegevoegd, een eenvoudig programma dat het gebruik ervan demonstreert. U moet een rtcmem-module in uw build hebben.
Stap 5: Externe RTC-modules
De externe RTC-modules maken verbinding met de ESP8266 via de I2C-interface, die slechts twee I/O-pinnen gebruikt en dus zowel met de ESP-01 als met de meeste andere ESP8266-apparaten werkt.
Het adres van de RTC-module is 0x68 en is toegankelijk via de normale I2C-commando's. Wel is er iets om rekening mee te houden, de gegevens in de RTC-registers worden opgeslagen in BCD-formaat (base 16), dus je programma's hebben hier mee te maken. De tijd en datum worden opgeslagen in 7 registers binnen de RTC. Op de interne RTC worden de BCD-conversies verzorgd door de rtctime-module.
SetExtRTC.lua converteert de gegevens naar BCD en stelt de tijd in.
ReadExtRTC.lua leest de tijdgegevens en drukt deze af. OPMERKING: de gegevens worden in hexadecimaal afgedrukt.
Ik heb niet veel tijd besteed aan het formatteren van het scherm, omdat je misschien je eigen ideeën hebt over wat je met datum en tijd wilt doen. Dit is de basismotor in zijn eenvoudigste vorm, zodat je hem desgewenst verder kunt ontwikkelen.
Stap 6: Gegevensregistratie
Als je goed naar de RTC-modules kijkt, zul je merken dat ze een AT24C32 EEPROM IC of iets dergelijks hebben ingebouwd, of je kunt een 24C256-kaart gebruiken zoals hierboven. De meeste van deze EEPROM-IC's hebben vergelijkbare pin-outs als hierboven. Ze worden geleverd met verschillende hoeveelheden opslagruimte, maar ze zijn allemaal op dezelfde manier toegankelijk. Omdat de AT24C32 al op het bord is gesoldeerd, kan deze direct vanaf de I2C van de externe RTC worden gebruikt.
Als je alleen een 24C256 IC of iets dergelijks hebt, kun je deze in een breadboard plaatsen, A1, A2 en A3 aansluiten op Gnd, Vcc op 3,3V en SDA EN SCL op I2C, WP kan zwevend blijven. Sommige EEPROM-IC's werken alleen op 5V, dus controleer eerst het relevante gegevensblad.
ByteWR.lua schrijft 1 byte aan gegevens naar geheugenlocatie 0x00 van de EEPROM en leest deze terug.
Desiderata.lua schrijft een paar regels van bekende tekst naar de EEPROM.
eeRead.lua leest gegevens uit de EEPROM en drukt deze af.
OPMERKING: Deze programma's zouden ook met andere EEPROM-kaarten moeten werken.
Stap 7: Conclusie
Ik heb geprobeerd te laten zien hoe de RTC en EEPROM werken voor datalogging. Dit is slechts een aanzet om je verder te ontwikkelen. Op de I2C-bus kunt u verschillende apparaten aansluiten zoals lichtsensoren, luchtdruksensoren, temperatuur- en vochtigheidssensoren en de gegevens vastleggen op de EEPROM.
Aanbevolen:
Gloeiende klok met luchtbellen; Mogelijk gemaakt door ESP8266: 7 stappen (met afbeeldingen)
Gloeiende klok met luchtbellen; Aangedreven door ESP8266: "gloeiende luchtbellenklok" geeft de tijd en enkele afbeeldingen weer door verlichte luchtbellen in vloeistof. In tegenstelling tot een led-matrixdisplay, geven langzaam zwevende, gloeiende luchtbellen me iets om te ontspannen. Begin jaren 90 stelde ik me "bubbeldisplay" voor. niet
Digitale klok met netwerktijd met behulp van de ESP8266: 4 stappen (met afbeeldingen)
Digitale netwerkklok met de ESP8266: we leren hoe we een schattige kleine digitale klok kunnen bouwen die communiceert met NTP-servers en de netwerk- of internettijd weergeeft. We gebruiken de WeMos D1 mini om verbinding te maken met een wifi-netwerk, de NTP-tijd te verkrijgen en deze weer te geven op een OLED-module. De video hierboven
ESP8266 netwerkklok zonder enige RTC - Nodemcu NTP-klok Geen RTC - INTERNET KLOKPROJECT: 4 stappen
ESP8266 netwerkklok zonder enige RTC | Nodemcu NTP-klok Geen RTC | INTERNET KLOKPROJECT: In het project zal een klokproject worden gemaakt zonder RTC, het kost tijd van internet met wifi en het zal het weergeven op het st7735-display
NODEMCU LUA ESP8266 Verbinding maken met MySQL-database: 6 stappen
NODEMCU LUA ESP8266 Maak verbinding met MySQL-database: deze instructable is niet voor angsthazen omdat het XAMPP (Apache, MySQL & PHP), HTML en natuurlijk LUA gebruikt. Als je er zeker van bent om deze aan te pakken, lees dan verder! Ik gebruik XAMPP omdat het kan worden ingesteld op een pen drive of je harde schijf en het is geconfigureerd
Een klok maken van een klok: 11 stappen (met afbeeldingen)
Een klok maken van een klok: in deze Instructable neem ik een bestaande klok en creëer ik een betere klok. We gaan van de afbeelding links naar de afbeelding rechts. Voordat u op uw eigen klok begint, moet u weten dat het opnieuw in elkaar zetten een uitdaging kan zijn, aangezien de piv