Cuprins:

NODEMCU Lua ESP8266 Cu ceas în timp real (RTC) și EEPROM: 7 pași
NODEMCU Lua ESP8266 Cu ceas în timp real (RTC) și EEPROM: 7 pași

Video: NODEMCU Lua ESP8266 Cu ceas în timp real (RTC) și EEPROM: 7 pași

Video: NODEMCU Lua ESP8266 Cu ceas în timp real (RTC) și EEPROM: 7 pași
Video: LDmicro 14: I2C LCD & DS3231 Real-Time Clock (Microcontroller PLC Ladder Programming with LDmicro) 2024, Iulie
Anonim
NODEMCU Lua ESP8266 Cu ceas în timp real (RTC) și EEPROM
NODEMCU Lua ESP8266 Cu ceas în timp real (RTC) și EEPROM

Obținerea orei corecte este esențială dacă doriți să păstrați un jurnal de date. Există diverse modalități de a obține timpul din surse de pe Internet.

S-ar putea să întrebați de ce să nu folosiți ESP8266 pentru a vă menține timpul? Bine poți, are propriul său RTC intern (ceas în timp real), dar ESP8266 are 3 frecvențe de ceas de funcționare diferite - 52 MHz când pornește, 80 MHz în timpul funcționării regulate și 160 MHz dacă este amplificat. Dacă aveți nevoie de o menținere a timpului mai precisă, în special pe perioade mai lungi, atunci un RTC extern ar putea oferi o soluție. Aceste module au, de asemenea, o rezervă a bateriei în caz de pierdere de energie. Un RTC nu este teribil de precis deoarece contează timpul scurs de când a fost setat și, deși se poate întâmpla pentru majoritatea aplicațiilor, este posibil să nu fie suficient de bun pentru menținerea timpului critic. Este posibil să obțineți ora exactă de la un server de timp SNTP de la care RTC poate fi actualizat la intervale regulate, dacă este necesar.

Modulul DS1307 Tiny RTC I2C (de mai sus) este un exemplu al acestor articole și poate fi achiziționat de pe Ebay și alți furnizori pentru mai puțin de 2 GBP. Există, de asemenea, altele precum DS1302 și DS3231 care funcționează într-un mod similar și costă de la 99p în sus.

Modulul DS1307 utilizează o interfață I2C și pentru un ESP-01 ar trebui să fie conectat ca:

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

SDA și SCL pot fi conectate la oricare dintre pinii I / O de pe ESP8266 mai mari (modificați codul în consecință). Doar pinii din stânga trebuie conectați la acest modul.

Pasul 1: Google Time

Ora Google
Ora Google

Există multe exemple de a obține timpul de la Google și de a arăta așa ceva. Când rulați programul GoogleTime.lua, veți obține un rezultat de acest gen:

dofile („GoogleTime.lua”)> Ora: Vineri, 15 Dec 2017 11:19:45 GMT

Problema cu această metodă este că obțineți ora în format șir și trebuie să împărțiți șirul în biții individuali pentru ore, minute, secunde etc. RTC acceptă ora într-un format special, adică ștampila UNIX. În termeni laici, acesta este numărul de secunde care au trecut de joi, 1 ianuarie 1970, până în ziua de azi și ora actuală. Epoca UNIX (1970/01/01 00:00:00) este utilizată de majoritatea sistemelor de operare a computerului și timpul scurs este stocat ca un număr semnat pe 32 de biți. Aceasta înseamnă că acest sistem va funcționa până la 19 ianuarie 2038, când numărul va deveni prea mare pentru a fi stocat în acest fel. O soluție este stocarea numărului ca 64 de biți, dar pentru moment metoda pe 32 de biți va fi suficientă.

Pentru a seta ora la 9 iulie 2015, 18:29:49 pe RTC intern, ar trebui să utilizați această linie de cod:

rtctime.set (1436430589, 0)

Cei 2 parametri sunt secunde și micro secunde.

Puteți găsi mai multe informații citind documentația NodeMCU.

Pasul 2: Servere de timp SNTP

Servere de timp SNTP
Servere de timp SNTP

Simple Network Time Protocol (SNTP) este furnizat din multe surse de pe Internet, iar multe țări din întreaga lume au acest serviciu.

Programul, SNTPTime2.lua stabilește ora pe RTC intern. Trebuie să aveți modulele rtctime & sntp în versiunea dvs. atunci când vă blocați ESP8266. Programul primește timpul de la server în secunde și micro secunde și setează RTC intern cu rtctime.set (sec, usec).

Programul afișează apoi data și ora în diferite formate.

Există multe servere SNTP în întreaga lume și unele sunt după cum urmează:

  • 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"},

Toate liniile de cod de mai sus pot fi înlocuite în programul SNTPTime2.lua.

Există mai multe servere SNTP la adresele de mai jos, care pot fi utilizate din nou în program.

93.170.62.252, 130.88.202.49, 79.135.97.79, ntp.exnet.com

Google oferă, de asemenea, servere de timp la aceste adrese:

216.239.35.0, 216.239.35.4, 216.239.35.8, 216.239.35.12

Trebuie să vă amintiți pentru a obține timpul din țara în care vă aflați sau este posibil să trebuiască să îl modificați pentru diferitele fusuri orare mondiale. De asemenea, unele țări au ora de vară, deci este posibil să aveți de-a face și cu asta.

Pasul 3: Obținerea timpului din modulul RTC

Obținerea timpului din modulul RTC
Obținerea timpului din modulul RTC

Programul GetRTCTime.lua citește ora din RTC intern.

Prima parte citește ora și o afișează în secunde și microsecunde.

A doua parte o convertește într-un format mai ușor de citit de om.

când se apelează tm = rtctime.epoch2cal (rtctime.get ()) se întoarce:

  • an - 1970 ~ 2038
  • luni - luna 1 ~ 12 în anul curent
  • zi - zi 1 ~ 31 în luna curentă
  • ora
  • min
  • sec
  • zi - zi 1 ~ 366 în anul curent
  • wday - ziua 1 ~ 7 în săptămâna curentă (duminica este 1)

Fiecare articol poate fi accesat ca tm ["zi"], tm ["an"] …

Puteți găsi mai multe informații citind documentația NodeMCU.

DisplaySNTPtime.lua este un mod mai elaborat de a arăta data și ora pe un ecran LCD 128 x 64 OLED, deoarece este ușor de conectat și poate fi utilizat cu aceste programe.

Pasul 4: Memoria utilizatorului RTC

O mică deviere de la menținerea timpului este că RTC-ul intern de pe ESP8266 are adrese de memorie de 128 x 32 biți care pot fi accesate de programator. Sunt deosebit de utile deoarece pot supraviețui ciclului de somn profund al ESP8266. Depinde de programator să controleze utilizarea acestora și să se asigure că nu sunt suprascrise accidental.

Am inclus RTCmem.lua, un program simplu care demonstrează utilizarea acestuia. Trebuie să aveți modulul rtcmem în versiunea dvs.

Pasul 5: Module RTC externe

Module RTC externe
Module RTC externe

Modulele RTC externe se conectează la ESP8266 prin interfața I2C, care utilizează doar doi pini I / O și astfel funcționează cu ESP-01, precum și cu majoritatea celorlalte dispozitive ESP8266.

Adresa modulului RTC este 0x68 și este accesată utilizând comenzile normale I2C. Cu toate acestea, există ceva de reținut, datele din registrele RTC sunt stocate în format BCD (baza 16), astfel încât programele dvs. trebuie să se ocupe de acest lucru. Ora și data sunt stocate în 7 registre din RTC. Pe RTC intern, conversiile BCD sunt gestionate de modulul rtctime.

SetExtRTC.lua convertește datele în BCD și setează ora.

ReadExtRTC.lua citește datele de timp și le imprimă. NOTĂ: datele sunt tipărite în hexazecimal.

Nu am petrecut mult timp formatând afișajul, deoarece este posibil să aveți propriile idei despre ceea ce doriți să faceți cu data și ora. Acesta este motorul de bază în forma sa cea mai simplă, astfel încât să îl puteți dezvolta în continuare dacă doriți.

Pasul 6: înregistrarea datelor

Înregistrarea datelor
Înregistrarea datelor

Dacă vă uitați atent la modulele RTC, veți observa că acestea au un AT24C32 EEPROM IC sau similar încorporat în ele, sau puteți utiliza o placă 24C256 ca mai sus. Majoritatea acestor IC-uri EEPROM au ieșiri de pin similare cu cele de mai sus. Acestea vin cu diferite cantități de stocare, dar toate sunt accesate în același mod. Deoarece AT24C32 este deja lipit pe placă, acesta poate fi utilizat direct de la I2C al RTC-ului extern.

Dacă aveți doar un IC 24C256 sau similar, îl puteți configura într-o placă pentru pâine, conectați A1, A2 și A3 la Gnd, Vcc la 3,3V și SDA ȘI SCL la I2C, WP poate fi lăsat plutitor. Unele IC-uri EEPROM funcționează numai la 5V, deci verificați mai întâi fișa tehnică relevantă.

ByteWR.lua scrie 1 octet de date în locația de memorie 0x00 din EEPROM și le citește înapoi.

Desiderata.lua scrie câteva versuri din text celebru în EEPROM.

eeRead.lua citește datele din EEPROM și le imprimă.

NOTĂ: Aceste programe ar trebui să funcționeze și cu alte plăci EEPROM.

Pasul 7: Concluzie

Am încercat să arăt cum funcționează RTC și EEPROM pentru înregistrarea datelor. Acesta este doar un starter pentru a vă dezvolta în continuare. Puteți conecta diverse dispozitive la magistrala I2C, cum ar fi senzori de lumină, senzori de presiune barometrică, senzori de temperatură și umiditate și puteți înregistra datele pe EEPROM.

Recomandat: