Съдържание:

NODEMCU Lua ESP8266 с часовник в реално време (RTC) и EEPROM: 7 стъпки
NODEMCU Lua ESP8266 с часовник в реално време (RTC) и EEPROM: 7 стъпки

Видео: NODEMCU Lua ESP8266 с часовник в реално време (RTC) и EEPROM: 7 стъпки

Видео: NODEMCU Lua ESP8266 с часовник в реално време (RTC) и EEPROM: 7 стъпки
Видео: FLProg9: RTC Alarm Clock | ESP32 NodeMCU | Arduino Visual Embedded Programming 2024, Ноември
Anonim
NODEMCU Lua ESP8266 с часовник в реално време (RTC) & EEPROM
NODEMCU Lua ESP8266 с часовник в реално време (RTC) & EEPROM

Получаването на правилното време е от съществено значение, ако искате да водите регистър на данните. Има различни начини да получите време от източници в Интернет.

Може да попитате защо не използвате ESP8266, за да отделите време за вас? Е, можете, той има свой собствен вътрешен RTC (часовник в реално време), но ESP8266 има 3 различни работни тактови честоти - 52MHz при зареждане, 80MHz по време на редовна работа и 160MHz, ако е усилен. Ако имате нужда от по -точно отчитане на времето, особено за по -дълги периоди, тогава външен RTC може да осигури решение. Тези модули също имат резервно копие на батерията в случай на загуба на захранване. RTC не е много точен, тъй като отчита времето, изминало от настройката му и въпреки че може да е подходящо за повечето приложения, може да не е достатъчно добро за задържане на критично време. Възможно е да получите точно време от сървър за време на SNTP, от който RTC може да се актуализира на редовни интервали, ако е необходимо.

Модулът DS1307 Tiny RTC I2C (по -горе) е пример за тези артикули и може да бъде закупен от Ebay и други доставчици за по -малко от £ 2. Има и други като DS1302 и DS3231, които работят по подобен начин и струват от 99p нагоре.

Модулът DS1307 използва I2C интерфейс и за ESP-01 трябва да бъде свързан като:

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

SDA и SCL могат да бъдат свързани към всеки от I/O пиновете на по -големите ESP8266 (променете кода съответно). На този модул трябва да бъдат свързани само левите щифтове.

Стъпка 1: Google Time

Google Time
Google Time

Има много примери за получаване на време от Google и изглеждане така. Когато стартирате програмата GoogleTime.lua, получавате резултат като този:

dofile ("GoogleTime.lua")> Час: Пет, 15 декември 2017 11:19:45 GMT

Проблемът с този метод е, че получавате времето във формат на низ и трябва да разделите низа на отделните му битове за часове, минути, секунди и т.н. RTC приема времето в специален формат, например UNIX времева маркировка. Лаически казано това е броят секунди, които са изтекли от четвъртък, 1 януари 1970 г., до наши дни и час. UNIX Epoch (1970/01/01 00:00:00) се използва от повечето компютърни операционни системи и изминалото време се съхранява като подписан 32 -битов номер. Това означава, че тази система ще работи до 19 януари 2038 г., когато броят ще стане твърде голям, за да се съхранява по този начин. Едно решение е да съхранявате числото като 64 бита, но засега 32 -битовият метод ще бъде достатъчен.

За да зададете часа на 9 юли 2015 г., 18:29:49 на вътрешния RTC, бихте използвали този ред код:

rtctime.set (1436430589, 0)

2 -те параметъра са секунди и микро секунди.

Можете да намерите повече информация, като прочетете документацията на NodeMCU.

Стъпка 2: SNTP сървъри за време

SNTP сървъри за време
SNTP сървъри за време

Прост протокол за мрежово време (SNTP) се предоставя от много източници в Интернет и много страни по света имат тази услуга.

Програмата SNTPTime2.lua задава времето на вътрешния RTC. Трябва да имате модулите rtctime & sntp във вашата компилация, когато мигате с ESP8266. Програмата получава времето от сървъра в секунди и микро секунди и задава вътрешния RTC с rtctime.set (sec, usec).

След това програмата показва датата и часа в различни формати.

Има много SNTP сървъри по света и някои от тях са както следва:

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

Всички горни редове код могат да бъдат заменени в програмата SNTPTime2.lua.

На адресите по -долу има още SNTP сървъри, които отново могат да се използват в програмата.

93.170.62.252, 130.88.202.49, 79.135.97.79, ntp.exnet.com

Google също предоставя сървъри за време на следните адреси:

216.239.35.0, 216.239.35.4, 216.239.35.8, 216.239.35.12

Трябва да запомните да получите времето от страната, в която се намирате, или може да се наложи да го промените за различните световни часови зони. Също така някои държави имат лятно часово време, така че може да се наложи да се справите и с това.

Стъпка 3: Получаване на време от RTC модул

Получаване на време от RTC модул
Получаване на време от RTC модул

Програмата GetRTCTime.lua чете времето от вътрешния RTC.

Първата част отчита часа и го показва за секунди и микросекунди.

Втората част го преобразува в по -читав за хората формат.

при извикване на tm = rtctime.epoch2cal (rtctime.get ()) връща:

  • година - 1970 ~ 2038
  • пн - месец 1 ~ 12 в текущата година
  • ден - ден 1 ~ 31 в текущия месец
  • час
  • мин
  • сек
  • ден - ден 1 ~ 366 в текущата година
  • wday - ден 1 ~ 7 в текущата седмица (неделя е 1)

Всеки елемент може да бъде достъпен като tm ["ден"], tm ["година"] …

Можете да намерите повече информация, като прочетете документацията на NodeMCU.

DisplaySNTPtime.lua е по -сложен начин за показване на датата и часа на LCD 128 x 64 OLED дисплей, тъй като е лесно свързан и може да се използва с тези програми.

Стъпка 4: Памет на потребителя на RTC

Малко отклонение от отчитането на времето е, че вътрешният RTC на ESP8266 има 128 x 32 битови адреси на паметта, които могат да бъдат достъпни от програмиста. Те са особено полезни, тъй като могат да преживеят цикъла на дълбок сън на ESP8266. Програмистът трябва да контролира използването им и да гарантира, че те не са презаписани случайно.

Включих RTCmem.lua, проста програма, която демонстрира използването му. Трябва да имате rtcmem модул във вашата компилация.

Стъпка 5: Външни RTC модули

Външни RTC модули
Външни RTC модули

Външните RTC модули се свързват към ESP8266 чрез I2C интерфейса, който използва само два I/O пина и по този начин работи с ESP-01, както и с повечето други ESP8266 устройства.

Адресът на RTC модула е 0x68 и се осъществява достъп с помощта на нормалните I2C команди. Има обаче нещо, което трябва да имате предвид, данните в регистрите на RTC се съхраняват във формат BCD (база 16), така че вашите програми трябва да се справят с това. Часът и датата се съхраняват в 7 регистри в рамките на RTC. На вътрешния RTC за преобразуването на BCD се грижи модулът rtctime.

SetExtRTC.lua преобразува данните в BCD и задава часа.

ReadExtRTC.lua чете данните за часа и ги отпечатва. ЗАБЕЛЕЖКА: данните се отпечатват в шестнадесетичен формат.

Не съм отделил много време за форматиране на дисплея, тъй като може да имате свои идеи за това какво искате да направите с датата и часа. Това е основният двигател в най -простата му форма, така че можете да го развивате допълнително, ако желаете.

Стъпка 6: Регистриране на данни

Регистриране на данни
Регистриране на данни

Ако се вгледате внимателно в RTC модулите, ще забележите, че те имат вградена микросхема AT24C32 EEPROM или подобна, или можете да използвате платка 24C256 както по -горе. Повечето от тези EEPROM интегрални схеми имат подобни изводи, както по -горе. Те идват с различни обеми за съхранение, но всички са достъпни по същия начин. Тъй като AT24C32 вече е запоен върху платката, той може да се използва директно от I2C на външния RTC.

Ако имате само 24C256 IC или подобен, можете да го настроите в дъска за хляб, да свържете A1, A2 и A3 към Gnd, Vcc към 3.3V и SDA И SCL към I2C, WP може да остане плаващ. Някои EEPROM интегрални схеми работят само при 5V, затова първо проверете съответния лист с данни.

ByteWR.lua записва 1 байт данни в паметта 0x00 на EEPROM и ги чете обратно.

Desiderata.lua записва няколко реда от известен текст до EEPROM.

eeRead.lua чете данни от EEPROM и ги разпечатва.

ЗАБЕЛЕЖКА: Тези програми трябва да работят и с други платки на EEPROM.

Стъпка 7: Заключение

Опитах се да покажа как работят RTC и EEPROM за регистриране на данни. Това е само начало, за да се развивате допълнително. Можете да свържете различни устройства към шината I2C, като например сензори за светлина, сензори за барометрично налягане, сензори за температура и влажност и да записвате данните в EEPROM.

Препоръчано: