Агуулгын хүснэгт:

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 | ESP32 NodeMCU | Визуальное программирование для Arduino 2024, Арваннэгдүгээр
Anonim
NODEMCU Lua ESP8266 нь бодит цагийн цаг (RTC) ба EEPROM -тэй
NODEMCU Lua ESP8266 нь бодит цагийн цаг (RTC) ба EEPROM -тэй

Хэрэв та өгөгдлийн бүртгэл хөтлөхийг хүсч байвал зөв цагийг олж авах нь чухал юм. Интернет дэх эх сурвалжаас цаг авах янз бүрийн арга байдаг.

Та ESP8266 -ийг ашиглан цаг зав гаргахгүй байж яагаад болохгүй гэж асууж магадгүй юм. Та чадна, энэ нь өөрийн дотоод RTC (Real Time Clock) байдаг, гэхдээ ESP8266 нь ажиллах цагийн 3 өөр давтамжтай байдаг - ачаалах үед 52 МГц, тогтмол ажиллагааны явцад 80 МГц, нэмэгдүүлсэн тохиолдолд 160 МГц. Хэрэв танд илүү нарийвчлалтай цаг барих шаардлагатай бол, ялангуяа урт хугацааны туршид гадны RTC нь асуудлыг шийдэх боломжтой болно. Эдгээр модулиуд нь цахилгаан тасарсан тохиолдолд батерейгаа нөөцөлдөг. RTC нь тохируулагдсан цагаасаа хойшхи хугацааг тооцдог тул тийм ч нарийвчлалтай байдаггүй бөгөөд энэ нь ихэнх програмуудад зориулагдсан боловч энэ нь чухал цаг хадгалахад хангалтгүй байж магадгүй юм. Шаардлагатай бол RTC -ийг тогтмол давтамжтайгаар шинэчлэх боломжтой SNTP цагийн серверээс үнэн зөв цагийг авах боломжтой.

DS1307 Tiny RTC I2C Module (дээрх) нь эдгээр зүйлийн жишээ бөгөөд Ebay болон бусад ханган нийлүүлэгчдээс 2 фунт стерлингээр худалдаж авах боломжтой. DS1302 ба DS3231 гэх мэт ижил төстэй байдлаар ажилладаг бөгөөд 99p -ээс дээш үнэтэй байдаг.

DS1307 модуль нь I2C интерфэйсийг ашигладаг бөгөөд ESP-01-ийг дараах байдлаар холбох ёстой.

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

SDA ба SCL -ийг ESP8266 -ийн том оролтын аль ч гаралтын залгуурт холбож болно (кодыг зохих ёсоор өөрчлөх). Энэ модуль дээр зөвхөн зүүн гар талын тээглүүрийг холбох шаардлагатай.

Алхам 1: Google цаг

Google цаг
Google цаг

Google -ээс цаг авч, иймэрхүү харагдах олон жишээ бий. GoogleTime.lua програмыг ажиллуулахад ийм үр дүн гарна.

dofile ("GoogleTime.lua")> Цаг: Баасан, 2017 оны 12 -р сарын 15, 11:19:45 GMT

Энэ аргын асуудал бол та цагийг мөр хэлбэрээр авах бөгөөд цагийг хэдэн минут, секундын турш бит болгон хуваах ёстой. RTC нь тусгай форматаар, өөрөөр хэлбэл UNIX цагийн тамга хэлбэрээр хүлээн авдаг. Энгийн үгээр бол энэ нь 1970 оны 1 -р сарын 1 -ний Пүрэв гаригаас өнөөг хүртэл өнөөг хүртэл хэдэн секундын тоо юм. UNIX Epoch (1970/01/01 00:00:00) цагийг ихэнх компьютерын үйлдлийн систем ашигладаг бөгөөд өнгөрсөн хугацаа нь гарын үсэг зурсан 32 битийн тоогоор хадгалагддаг. Энэ нь энэ систем 2038 оны 1 -р сарын 19 хүртэл ажиллах болно гэсэн үг бөгөөд энэ тоог хадгалахад хэт том болно. Нэг шийдэл бол тоог 64 бит болгон хадгалах боловч одоогоор 32 битийн арга нь хангалттай байх болно.

2015 оны 7 -р сарын 9, 18:29:49 цагийг дотоод RTC дээр тохируулахын тулд та энэ кодын мөрийг ашиглах болно.

rtctime.set (1436430589, 0)

2 параметр нь секунд ба микро секунд юм.

Та NodeMCU баримт бичгийг уншиж дэлгэрэнгүй мэдээлэл авах боломжтой.

Алхам 2: SNTP цагийн серверүүд

SNTP цагийн серверүүд
SNTP цагийн серверүүд

Сүлжээний цагийн энгийн протокол (SNTP) нь интернетийн олон эх сурвалжаас хангагдсан байдаг бөгөөд дэлхийн олон оронд энэ үйлчилгээ байдаг.

SNTPTime2.lua програм нь дотоод RTC дээр цагийг тохируулдаг. ESP8266 -г асаахад танд rtctime & sntp модулиуд байх ёстой. Хөтөлбөр нь серверээс цагийг секунд, микро секундын дотор авдаг бөгөөд дотоод 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 x 128 OLED дэлгэц дээр огноо, цагийг харуулах илүү нарийвчилсан арга юм.

Алхам 4: RTC хэрэглэгчийн санах ой

Цаг барихаас бага зэрэг хазайх нь ESP8266 дээрх дотоод RTC нь 128 х 32 битийн санах ойн хаягтай бөгөөд програмист хандаж болно. Эдгээр нь ESP8266 -ийн гүн нойрны мөчлөгийг даван туулж чаддаг тул ялангуяа ашигтай байдаг. Тэдний хэрэглээг хянах, санамсаргүй байдлаар дарж бичихгүй байх нь програмистын үүрэг юм.

Би үүнийг ашиглахыг харуулсан энгийн програм болох RTCmem.lua -г оруулсан болно. Та бүтээхдээ rtcmem модультай байх ёстой.

Алхам 5: Гадаад RTC модулиуд

Гадаад RTC модулиуд
Гадаад RTC модулиуд

Гадаад RTC модулиуд нь зөвхөн хоёр I/O зүү ашигладаг I2C интерфейсээр дамжуулан ESP8266-тай холбогддог тул ESP-01 болон бусад ESP8266 төхөөрөмжүүдийн ихэнхтэй ажилладаг.

RTC модулийн хаяг нь 0x68 бөгөөд ердийн I2C командыг ашиглан ханддаг. Гэсэн хэдий ч RTC бүртгэлийн өгөгдлийг BCD форматаар (16 -р суурь) хадгалдаг тул санаж байх ёстой зүйл байгаа тул таны програмууд үүнийг шийдэх ёстой. Цаг, огноог БОЭТ -ийн 7 бүртгэлд хадгалдаг. Дотоод RTC дээр BCD хөрвүүлэлтийг rtctime модуль хариуцдаг.

SetExtRTC.lua нь өгөгдлийг BCD болгон хөрвүүлж, цагийг тохируулдаг.

ReadExtRTC.lua нь цаг хугацааны мэдээллийг уншиж хэвлэдэг. ТАЙЛБАР: өгөгдлийг арван зургаатын хэвлэмэл хэлбэрээр хэвлэнэ.

Огноо, цагийг хэрхэн хийхийг хүсч байгаа талаар өөрийн гэсэн бодолтой байж магадгүй тул би дэлгэцийг форматлахад маш их цаг зарцуулаагүй болно. Энэ бол хамгийн энгийн хэлбэрийн үндсэн хөдөлгүүр бөгөөд хэрэв та хүсвэл цаашид хөгжүүлэх боломжтой болно.

Алхам 6: Мэдээлэл бүртгэх

Өгөгдөл бүртгэх
Өгөгдөл бүртгэх

Хэрэв та RTC модулиудыг анхааралтай ажиглавал тэдгээр нь AT24C32 EEPROM IC эсвэл түүнтэй төстэй төхөөрөмжтэй болохыг анзаарах болно, эсвэл дээр дурдсанчлан 24C256 самбар ашиглаж болно. Эдгээр EEPROM IC -ийн ихэнх нь дээр дурдсантай ижил төстэй гаралттай байдаг. Тэд янз бүрийн хэмжээтэй хадгалах сантай ирдэг, гэхдээ бүгд ижил аргаар ханддаг. AT24C32 нь самбар дээр аль хэдийн гагнагдсан тул үүнийг гадаад RTC I2C -ээс шууд ашиглаж болно.

Хэрэв танд зөвхөн 24C256 IC эсвэл үүнтэй төстэй төхөөрөмж байгаа бол та үүнийг талхны самбар дээр байрлуулж, A1, A2, A3 -ийг Gnd, Vcc -ийг 3.3V, SDA, SCL -ийг I2C -тэй холбож болно, WP -ийг хөвж үлдээж болно. Зарим EEPROM IC нь зөвхөн 5V -т ажилладаг тул эхлээд холбогдох мэдээллийн хуудсыг шалгаарай.

ByteWR.lua нь EEPROM -ийн 0x00 санах ойн байршилд 1 байтын өгөгдлийг бичээд буцааж уншдаг.

Desiderata.lua алдартай текстээс EEPROM руу хэд хэдэн мөр бичдэг.

eeRead.lua нь EEPROM -ийн өгөгдлийг уншаад хэвлэдэг.

ТАЙЛБАР: Эдгээр програмууд нь бусад EEPROM самбаруудтай ажиллах ёстой.

Алхам 7: Дүгнэлт

Би өгөгдөл бүртгэхэд RTC ба EEPROM хэрхэн ажилладагийг харуулахыг хичээсэн. Энэ бол таны цаашдын хөгжүүлэлтийн эхлэл юм. Та I2C автобусанд гэрэл мэдрэгч, барометрийн даралт мэдрэгч, температур, чийгшил мэдрэгч гэх мэт төрөл бүрийн төхөөрөмжийг холбож, EEPROM дээр өгөгдлийг бүртгэх боломжтой.

Зөвлөмж болгож буй: