Mundarija:

NODEMCU Lua ESP8266 real vaqtda soat (RTC) va EEPROM bilan: 7 qadam
NODEMCU Lua ESP8266 real vaqtda soat (RTC) va EEPROM bilan: 7 qadam

Video: NODEMCU Lua ESP8266 real vaqtda soat (RTC) va EEPROM bilan: 7 qadam

Video: NODEMCU Lua ESP8266 real vaqtda soat (RTC) va EEPROM bilan: 7 qadam
Video: LDmicro 14: ЖК-дисплей I2C и часы реального времени DS3231 (программирование лестничной схемы ПЛК микроконтроллера с помощью LDmicro) 2024, Iyul
Anonim
NODEMCU Lua ESP8266 real vaqtda soat (RTC) va EEPROM bilan
NODEMCU Lua ESP8266 real vaqtda soat (RTC) va EEPROM bilan

Ma'lumotlar jurnalini saqlamoqchi bo'lsangiz, to'g'ri vaqtni olish juda muhimdir. Vaqtni Internetdagi manbalardan olishning turli usullari mavjud.

Siz nima uchun vaqt ajratish uchun ESP8266 -dan foydalanmasligingizni so'rashingiz mumkin. O'zingizning ichki RTC (Real Time Clock) ga ega bo'lishingiz mumkin, lekin ESP8266 -da 3 xil ish chastotasi bor - u yuklanganda 52 MGts, muntazam ish paytida 80 MGts va kuchaytirilsa 160 MGts. Agar sizga aniqroq vaqtni saqlash kerak bo'lsa, ayniqsa uzoq vaqt davomida, tashqi RTC yechim taklif qilishi mumkin. Ushbu modullarda, shuningdek, quvvat yo'qolganda batareya zaxirasi mavjud. RTC juda aniq emas, chunki u o'rnatilgandan beri o'tgan vaqtni hisoblab chiqadi va garchi u ko'pgina ilovalarda bajarilishi mumkin bo'lsa -da, bu muhim vaqtni saqlash uchun etarli bo'lmasligi mumkin. Agar kerak bo'lsa, RTC vaqti -vaqti bilan yangilanishi mumkin bo'lgan SNTP vaqt serveridan aniq vaqtni olish mumkin.

DS1307 Tiny RTC I2C moduli (yuqoridagi) bu narsalarga misol bo'lib, ularni Ebay va boshqa etkazib beruvchilardan 2 funtdan arzon narxda sotib olish mumkin. DS1302 va DS3231 kabi boshqalar ham xuddi shunday ishlaydi va narxi 99p dan yuqori.

DS1307 moduli I2C interfeysidan foydalanadi va ESP-01 uchun quyidagicha ulanishi kerak.

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

SDA va SCL kattaroq ESP8266 -dagi har qanday kirish -chiqish pinlariga ulanishi mumkin (kodni mos ravishda o'zgartiring). Ushbu modulda faqat chap qo'l pinlari ulanishi kerak.

1 -qadam: Google vaqti

Google vaqti
Google vaqti

Google -dan vaqt olish va shunga o'xshash narsalarga misollar ko'p. GoogleTime.lua dasturini ishga tushirganingizda shunday natijaga erishasiz:

dofile ("GoogleTime.lua")> Vaqt: Juma, 2017 yil 15 -dekabr 11:19:45 GMT

Bu usulning muammosi shundaki, siz vaqtni mag'lubiyat formatida olasiz va satrni individual bitlarga soat, daqiqa, soniya va boshqalarga bo'lishingiz kerak bo'ladi. RTC vaqtni maxsus formatda, ya'ni UNIX vaqt tamg'asini qabul qiladi. Oddiy qilib aytganda, bu 1970 yil 1 yanvar payshanbadan hozirgi kungacha va vaqtgacha o'tgan soniyalar soni. UNIX Epoch (1970/01/01 00:00:00) ko'pchilik kompyuter operatsion tizimlarida ishlatiladi va o'tgan vaqt 32 bitli raqam sifatida saqlanadi. Bu shuni anglatadiki, bu tizim 2038 yil 19 -yanvargacha ishlaydi va bu raqamni saqlash uchun juda katta bo'ladi. Bitta yechim - bu raqamni 64 bit sifatida saqlash, lekin hozircha 32 bitli usul etarli bo'ladi.

Ichki RTCda 2015 yil 9 -iyul, 18:29:49 vaqtini belgilash uchun siz ushbu kod qatoridan foydalangan bo'lar edingiz:

rtctime.set (1436430589, 0)

2 parametr - soniya va mikro soniya.

Qo'shimcha ma'lumotni NodeMCU hujjatlarini o'qib topishingiz mumkin.

2 -qadam: SNTP vaqt serverlari

SNTP vaqt serverlari
SNTP vaqt serverlari

Oddiy tarmoq vaqt protokoli (SNTP) Internetdagi ko'plab manbalardan taqdim etilgan va dunyoning ko'plab mamlakatlarida bu xizmat mavjud.

SNTPTime2.lua dasturi ichki RTC vaqtini belgilaydi. ESP8266 -ni yondirganda, sizda rtctime & sntp modullari bo'lishi kerak. Dastur serverdan vaqtni soniya va mikro soniyalarda oladi va rtctime.set (sec, usec) bilan ichki RTC ni o'rnatadi.

Keyin dastur sana va vaqtni turli formatlarda ko'rsatadi.

Dunyo bo'ylab ko'plab SNTP serverlari mavjud va ularning ba'zilari quyidagicha:

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

Yuqoridagi barcha kod satrlarini SNTPTime2.lua dasturiga almashtirish mumkin.

Quyidagi manzillarda yana SNTP serverlari bor, ularni yana dasturda ishlatish mumkin.

93.170.62.252, 130.88.202.49, 79.135.97.79, ntp.exnet.com

Google shuningdek, quyidagi manzillarda vaqt serverlarini taqdim etadi:

216.239.35.0, 216.239.35.4, 216.239.35.8, 216.239.35.12

Vaqtni o'zingiz yashayotgan mamlakatdan olishni unutmang yoki uni dunyoning turli vaqt mintaqalari uchun o'zgartirishingiz kerak bo'ladi. Shuningdek, ba'zi mamlakatlarda yozgi vaqt bor, shuning uchun siz ham bu bilan shug'ullanishingizga to'g'ri keladi.

3 -qadam: RTC modulidan vaqt olish

Vaqtni RTC modulidan olish
Vaqtni RTC modulidan olish

GetRTCTime.lua dasturi ichki RTC dan vaqtni o'qiydi.

Birinchi qism vaqtni o'qiydi va uni soniyalar va mikrosaniyalarda ko'rsatadi.

Ikkinchi qism esa uni inson o'qiy oladigan formatga aylantiradi.

tm = rtctime.epoch2cal (rtctime.get ()) ni chaqirganda u qaytadi:

  • yil - 1970 ~ 2038
  • dushanba - joriy yilning 1 ~ 12 oyi
  • kun - joriy oyning 1 ~ 31 -kuni
  • soat
  • min
  • sek
  • kun - joriy yilning 1 ~ 366 -kuni
  • wday - joriy haftaning 1-7 -kuni (yakshanba 1)

Har bir elementga tm ["kun"], tm ["yil"] sifatida kirish mumkin …

Qo'shimcha ma'lumotni NodeMCU hujjatlarini o'qib topishingiz mumkin.

DisplaySNTPtime.lua - bu sana va vaqtni 128 x 64 OLED -displeyda ko'rsatishning yanada aniq usuli, chunki u osonlik bilan ulanadi va uni ushbu dasturlar bilan ishlatish mumkin.

4 -qadam: RTC foydalanuvchi xotirasi

Vaqtni saqlashdan biroz chalg'itadigan narsa, ESP8266 -dagi ichki RTC 128 x 32 bitli xotira manzillariga ega, ularga dasturchi kirishi mumkin. Ular ayniqsa foydalidir, chunki ular ESP8266 chuqur uyqu tsiklidan omon qolishadi. Ularning ishlatilishini nazorat qilish va tasodifan yozilmasligini ta'minlash dasturchiga bog'liq.

Men RTCmem.lua -ni qo'shdim, bu uning ishlatilishini ko'rsatadigan oddiy dastur. Sizda rtcmem moduli bo'lishi kerak.

5 -qadam: Tashqi RTC modullari

Tashqi RTC modullari
Tashqi RTC modullari

Tashqi RTC modullari ESP8266-ga I2C interfeysi orqali ulanadi, u faqat ikkita kirish-chiqish pinidan foydalanadi, shuning uchun ESP-01 va boshqa ESP8266 qurilmalari bilan ishlaydi.

RTC modulining manzili 0x68 bo'lib, unga oddiy I2C buyruqlari yordamida kirish mumkin. Shuni yodda tutish kerakki, RTC registrlaridagi ma'lumotlar BCD formatida saqlanadi (16 -tayanch), shuning uchun sizning dasturingiz bu bilan shug'ullanishi kerak. Vaqt va sana RTC doirasida 7 ta registrda saqlanadi. Ichki RTC -da, BCD konvertatsiyasi rtctime moduli orqali amalga oshiriladi.

SetExtRTC.lua ma'lumotlarni BCD ga o'zgartiradi va vaqtni belgilaydi.

ReadExtRTC.lua vaqt ma'lumotlarini o'qiydi va chop etadi. QAYD: ma'lumotlar o'n oltilikda chop etiladi.

Men ekranni formatlash uchun ko'p vaqt sarflamadim, chunki sizda sana va vaqt bilan nima qilishni xohlayotganingiz haqida o'z fikringiz bo'lishi mumkin. Bu asosiy dvigatel, agar xohlasangiz, uni yanada rivojlantirishingiz mumkin.

6 -qadam: ma'lumotlarni ro'yxatga olish

Ma'lumotlar jurnali
Ma'lumotlar jurnali

Agar siz RTC modullariga diqqat bilan qarasangiz, ularning ichida AT24C32 EEPROM IC yoki shunga o'xshash o'rnatilganini yoki yuqoridagi kabi 24C256 taxtasidan foydalanishingiz mumkinligini sezasiz. Ushbu EEPROM IC -larning ko'pchiligi yuqoridagi kabi o'xshash chiqishlarga ega. Ular har xil miqdordagi saqlash joylari bilan birga keladi, lekin ularning hammasiga bir xil tarzda kirish mumkin. AT24C32 allaqachon taxtaga lehimlanganligi sababli, uni to'g'ridan -to'g'ri tashqi RTC I2C dan ishlatish mumkin.

Agar sizda faqat 24C256 IC yoki shunga o'xshash bo'lsa, uni non panelida o'rnatishingiz mumkin, A1, A2 va A3 ni Gnd, Vcc ni 3.3V ga va SDA VA SCL ni I2C ga ulashingiz mumkin, WP suzuvchi bo'lib qolishi mumkin. Ba'zi EEPROM IC'lari faqat 5Vda ishlaydi, shuning uchun avval tegishli ma'lumot varag'ini tekshiring.

ByteWR.lua EEPROMning 0x00 xotira joyiga 1 bayt ma'lumot yozadi va uni qayta o'qiydi.

Desiderata.lua mashhur matndan EEPROMga bir necha satr yozadi.

eeRead.lua EEPROM ma'lumotlarini o'qiydi va uni chop etadi.

QAYD: Ushbu dasturlar boshqa EEPROM platalari bilan ham ishlashi kerak.

7 -qadam: Xulosa

Ma'lumotlarni yozish uchun RTC va EEPROM qanday ishlashini ko'rsatishga harakat qildim. Bu siz yanada rivojlanishingiz uchun boshlang'ich. Siz I2C avtobusiga yorug'lik sensori, barometrik bosim sensori, harorat va namlik sensori kabi turli xil qurilmalarni ulashingiz va ma'lumotlarni EEPROMga yozib olishingiz mumkin.

Tavsiya: