Съдържание:
- Стъпка 1: Google Time
- Стъпка 2: SNTP сървъри за време
- Стъпка 3: Получаване на време от RTC модул
- Стъпка 4: Памет на потребителя на RTC
- Стъпка 5: Външни RTC модули
- Стъпка 6: Регистриране на данни
- Стъпка 7: Заключение
Видео: NODEMCU Lua ESP8266 с часовник в реално време (RTC) и EEPROM: 7 стъпки
2024 Автор: John Day | [email protected]. Последно модифициран: 2024-01-30 07:52
Получаването на правилното време е от съществено значение, ако искате да водите регистър на данните. Има различни начини да получите време от източници в Интернет.
Може да попитате защо не използвате 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 и изглеждане така. Когато стартирате програмата 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) се предоставя от много източници в Интернет и много страни по света имат тази услуга.
Програмата 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 модул
Програмата 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 модули се свързват към 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.
Препоръчано:
ESP8266 Мрежов часовник без RTC - Nodemcu NTP Часовник Няма RTC - ИНТЕРНЕТЕН ЧАСОВНИК ПРОЕКТ: 4 стъпки
ESP8266 Мрежов часовник без RTC | Nodemcu NTP Часовник Няма RTC | ИНТЕРНЕТЕН ЧАСОВНИК ПРОЕКТ: В проекта ще се прави часовник проект без RTC, ще отнеме време от интернет с помощта на wifi и ще го покаже на дисплея st7735
Настройка на DS3231 RTC (часовник в реално време) точно, бързо и автоматично с помощта на Java (+-1s): 3 стъпки
Задаване на DS3231 RTC (часовник в реално време) точно, бързо и автоматизирано с помощта на Java (+-1s): Тази инструкция ще ви покаже как да настроите часа на DS3231 часовник в реално време с помощта на Arduino и малко Java приложение, което използва серийната връзка на Arduino. Основната логика на тази програма: 1. Arduino изпраща серийна заявка
DS1307 Часовник в реално време RTC с Arduino: 4 стъпки
DS1307 Часовник в реално време RTC с Arduino: В този урок ще научим за часовника в реално време (RTC) и как Arduino & IC DS1307 с часовник в реално време са събрани като устройство за синхронизиране. Часовникът в реално време (RTC) се използва за наблюдение на времето и поддържане на календар. За да използвате RTC
Часовник, базиран на Arduino, използващ модул за часовник в реално време (RTC) DS1307 и 0,96: 5 стъпки
Часовник, базиран на Arduino, използващ модул DS1307 Часовник в реално време (RTC) & 0.96: Здравейте момчета, в този урок ще видим как да направим работещ часовник с помощта на модул за часовник в реално време DS1307 & OLED дисплеи. Така че ще четем времето от часовника DS1307. И го отпечатайте на OLED екрана
Създаване на часовник с M5stick C с помощта на Arduino IDE - RTC часовник в реално време с M5stack M5stick-C: 4 стъпки
Създаване на часовник с M5stick C с помощта на Arduino IDE | RTC часовник в реално време с M5stack M5stick-C: Здравейте, момчета, в тази инструкция ще се научим как да правим часовник с m5stick-C платка за разработка на m5stack, използвайки Arduino IDE. Така че m5stick ще показва дата, час & седмица на месеца на дисплея