Innholdsfortegnelse:

NODEMCU Lua ESP8266 med sanntidsklokke (RTC) og EEPROM: 7 trinn
NODEMCU Lua ESP8266 med sanntidsklokke (RTC) og EEPROM: 7 trinn

Video: NODEMCU Lua ESP8266 med sanntidsklokke (RTC) og EEPROM: 7 trinn

Video: NODEMCU Lua ESP8266 med sanntidsklokke (RTC) og EEPROM: 7 trinn
Video: LDmicro 14: ЖК-дисплей I2C и часы реального времени DS3231 (программирование лестничной схемы ПЛК микроконтроллера с помощью LDmicro) 2024, November
Anonim
NODEMCU Lua ESP8266 Med sanntidsklokke (RTC) og EEPROM
NODEMCU Lua ESP8266 Med sanntidsklokke (RTC) og EEPROM

Å få riktig tid er avgjørende hvis du vil beholde en datalogg. Det er forskjellige måter å få tid fra kilder på Internett.

Du kan spørre hvorfor ikke bruke ESP8266 til å holde tid for deg? Vel, du kan, den har sin egen interne RTC (sanntidsklokke), men ESP8266 har 3 forskjellige driftsklokkefrekvenser - 52MHz når den starter, 80MHz under vanlig drift og 160MHz hvis den økes. Hvis du trenger mer nøyaktig tidsoppbevaring, spesielt over lengre perioder, kan en ekstern RTC gi en løsning. Disse modulene har også en batteribackup i tilfelle strømtap. En RTC er ikke veldig nøyaktig, da den teller tiden som har gått siden den ble satt, og selv om den kan gjøre det for de fleste applikasjoner, er den kanskje ikke god nok til å holde kritisk tid. Det er mulig å få en nøyaktig tid fra en SNTP -tidsserver hvorfra RTC kan oppdateres med jevne mellomrom om nødvendig.

DS1307 Tiny RTC I2C Module (ovenfor) er et eksempel på disse elementene og kan kjøpes på Ebay og andre leverandører for mindre enn £ 2. Det er også andre som DS1302 og DS3231 som fungerer på en lignende måte og koster fra 99p og oppover.

DS1307-modulen bruker et I2C-grensesnitt, og for en ESP-01 skal den kobles til som:

Vcc - 3.3v, Gnd - Gnd, SDA - D3, SCL - D4

SDA og SCL kan kobles til hvilken som helst av I/O -pinnene på de større ESP8266 -ene (endre koden tilsvarende). Bare pinnene på venstre side må kobles til denne modulen.

Trinn 1: Google Time

Google Time
Google Time

Det er mange eksempler på å få tid fra Google og se slik ut. Når du kjører GoogleTime.lua -programmet får du et resultat som dette:

dofile ("GoogleTime.lua")> Tid: fre 15. des 2017 11:19:45 GMT

Problemet med denne metoden er at du får tiden i strengformat, og du må dele strengen i sine individuelle biter i timer, minutter, sekunder etc. RTC godtar tiden i et spesialformat, dvs. UNIX tidsstempel. I lekmannsbetingelser er dette antall sekunder som har gått siden torsdag 1. januar 1970 til i dag. UNIX -epoken (1970/01/01 00:00:00) brukes av de fleste datamaskinoperativsystemer, og den forløpte tiden lagres som et signert 32 -biters nummer. Dette betyr at dette systemet vil fungere frem til 19. januar 2038 når tallet blir for stort til å lagre på denne måten. En løsning er å lagre tallet som 64 bits, men foreløpig vil 32 -bit metoden være tilstrekkelig.

For å sette tiden til 9. juli 2015, 18:29:49 på den interne RTC, vil du bruke denne kodelinjen:

rtctime.set (1436430589, 0)

De to parameterne er sekunder og mikrosekunder.

Du finner mer informasjon ved å lese NodeMCU -dokumentasjonen.

Trinn 2: SNTP -tidsservere

SNTP -tidsservere
SNTP -tidsservere

Simple Network Time Protocol (SNTP) leveres fra mange kilder på Internett, og mange land over hele verden har denne tjenesten.

Programmet, SNTPTime2.lua angir tiden på den interne RTC. Du må ha rtctime & sntp -modulene i bygningen din når du blinker ESP8266. Programmet får tiden fra serveren på sekunder og mikrosekunder og setter den interne RTC med rtctime.set (sek, usec).

Programmet viser deretter dato og klokkeslett i forskjellige formater.

Det er mange SNTP -servere rundt om i verden, og noen 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 kodelinjene ovenfor kan byttes inn i SNTPTime2.lua -programmet.

Det er flere SNTP -servere på adressene nedenfor som igjen kan brukes i programmet.

93.170.62.252, 130.88.202.49, 79.135.97.79, ntp.exnet.com

Google tilbyr også tidsservere på disse adressene:

216.239.35.0, 216.239.35.4, 216.239.35.8, 216.239.35.12

Du må huske å få tiden fra landet du er i, eller du må kanskje endre den for de forskjellige tidssonene i verden. Noen land har også sommertid, så det kan hende du må håndtere det også.

Trinn 3: Få tiden fra RTC -modulen

Få tiden fra RTC -modulen
Få tiden fra RTC -modulen

Programmet GetRTCTime.lua leser tiden fra den interne RTC.

Den første delen leser tiden og viser den på sekunder og mikrosekunder.

Den andre delen konverterer den til et mer leselig format.

når du ringer tm = rtctime.epoch2cal (rtctime.get ()) returnerer det:

  • år - 1970 ~ 2038
  • man - måned 1 ~ 12 i inneværende år
  • dag - dag 1 ~ 31 i inneværende måned
  • time
  • min
  • sek
  • dag - dag 1 ~ 366 i inneværende år
  • wday - dag 1 ~ 7 i inneværende uke (søndag er 1)

Hvert element kan nås som tm ["dag"], tm ["år"] …

Du finner mer informasjon ved å lese NodeMCU -dokumentasjonen.

DisplaySNTPtime.lua er en mer forseggjort måte å vise dato og klokkeslett på en LCD 128 x 64 OLED -skjerm, ettersom den enkelt kan kobles til og kan brukes med disse programmene.

Trinn 4: RTC -brukerminne

En liten avvik fra tidsoppbevaring er den interne RTC på ESP8266 som har 128 x 32 biters minneadresser som kan nås av programmereren. De er spesielt nyttige da de kan overleve den dype søvnsyklusen til ESP8266. Det er opp til programmereren å kontrollere bruken og sikre at de ikke blir overskrevet ved et uhell.

Jeg har inkludert RTCmem.lua, et enkelt program som demonstrerer bruken av det. Du må ha rtcmem -modulen i bygningen din.

Trinn 5: Eksterne RTC -moduler

Eksterne RTC -moduler
Eksterne RTC -moduler

De eksterne RTC-modulene kobles til ESP8266 via I2C-grensesnittet, som bare bruker to I/O-pinner og som fungerer med ESP-01 så vel som de fleste andre ESP8266-enheter.

RTC -moduladressen er 0x68 og er tilgjengelig med de vanlige I2C -kommandoene. Det er imidlertid noe å huske på, dataene i RTC -registerene er lagret i BCD -format (base 16), så programmene dine må håndtere dette. Tid og dato lagres i 7 registre i RTC. På den interne RTC blir BCD -konverteringene ivaretatt av rtctime -modulen.

SetExtRTC.lua konverterer dataene til BCD og angir tiden.

ReadExtRTC.lua leser tidsdataene og skriver dem ut. MERK: dataene skrives ut i heksadesimal.

Jeg har ikke brukt mye tid på å formatere skjermen, ettersom du kan ha dine egne ideer om hva du vil gjøre med dato og klokkeslett. Dette er grunnmotoren i sin enkleste form, slik at du kan utvikle den videre hvis du ønsker det.

Trinn 6: Datalogging

Datalogging
Datalogging

Hvis du ser nøye på RTC -modulene, vil du legge merke til at de har en AT24C32 EEPROM IC eller lignende innebygd i dem, eller du kan bruke et 24C256 -kort som ovenfor. De fleste av disse EEPROM ICene har lignende pin -outs som ovenfor. De kommer med forskjellige mengder lagring, men de er alle tilgjengelige på samme måte. Siden AT24C32 allerede er loddet på brettet, kan den brukes direkte fra I2C til den eksterne RTC.

Hvis du bare har en 24C256 IC eller lignende, kan du sette den opp i et brødbrett, koble A1, A2 og A3 til Gnd, Vcc til 3.3V og SDA OG SCL til I2C, WP kan stå flytende. Noen EEPROM ICer fungerer bare med 5V, så sjekk det relevante databladet først.

ByteWR.lua skriver 1 byte data til minnested 0x00 i EEPROM og leser det tilbake.

Desiderata.lua skriver et par linjer fra kjent tekst til EEPROM.

eeRead.lua leser data fra EEPROM og skriver dem ut.

MERK: Disse programmene bør også fungere med andre EEPROM -kort.

Trinn 7: Konklusjon

Jeg har prøvd å vise hvordan RTC og EEPROM fungerer for datalogging. Dette er bare en forrett for deg å utvikle videre. Du kan koble forskjellige enheter til I2C -bussen som lyssensorer, barometriske trykksensorer, temperatur- og fuktighetssensorer og registrere dataene på EEPROM.

Anbefalt: