Агуулгын хүснэгт:
- Алхам 1: Google цаг
- Алхам 2: SNTP цагийн серверүүд
- Алхам 3: RTC модулиас цаг авах
- Алхам 4: RTC хэрэглэгчийн санах ой
- Алхам 5: Гадаад RTC модулиуд
- Алхам 6: Мэдээлэл бүртгэх
- Алхам 7: Дүгнэлт
Видео: NODEMCU Lua ESP8266 нь бодит цагийн цаг (RTC) ба EEPROM -тэй: 7 алхам
2024 Зохиолч: John Day | [email protected]. Хамгийн сүүлд өөрчлөгдсөн: 2024-01-30 11:03
Хэрэв та өгөгдлийн бүртгэл хөтлөхийг хүсч байвал зөв цагийг олж авах нь чухал юм. Интернет дэх эх сурвалжаас цаг авах янз бүрийн арга байдаг.
Та 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 -ээс цаг авч, иймэрхүү харагдах олон жишээ бий. 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) нь интернетийн олон эх сурвалжаас хангагдсан байдаг бөгөөд дэлхийн олон оронд энэ үйлчилгээ байдаг.
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 модулиас цаг авах
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 модулиуд нь зөвхөн хоёр 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 дээр өгөгдлийг бүртгэх боломжтой.
Зөвлөмж болгож буй:
Бодит цагийн цагийн модулийг (DS3231) хэрхэн ашиглах вэ: 5 алхам
Бодит цагийн цагны модулийг (DS3231) хэрхэн ашиглах вэ: DS3231 бол өртөг багатай, туйлын нарийвчлалтай I2C бодит цаг (RTC) бөгөөд температурыг нөхсөн болор осциллятор (TCXO), болортой. Төхөөрөмж нь батерейны оролттой бөгөөд үндсэн хүчдэлийн үед цагийг зөв хэмждэг
ESP8266 RTC байхгүй сүлжээний цаг - Nodemcu NTP цаг RTC байхгүй байна - ИНТЕРНЕТ ЦАГИЙН ТӨСӨЛ: 4 алхам
ESP8266 RTC байхгүй сүлжээний цаг | Nodemcu NTP цаг RTC байхгүй | ИНТЕРНЕТ ЦАГИЙН ТӨСӨЛ: Төсөл нь RTC -гүй цагны төсөл хийх бөгөөд wifi ашиглан интернэтээс цаг авч, st7735 дэлгэц дээр харуулах болно
Java (+-1s) ашиглан DS3231 RTC (Бодит цагийн цаг) -ыг нарийвчлалтай, хурдан, автоматаар тохируулах: 3 алхам
Java (+-1s) ашиглан DS3231 RTC (Бодит цагийн цаг) -ыг нарийвчлалтай, хурдан, автоматаар тохируулах: Энэхүү заавар нь Arduino болон жижиг Java програмыг ашиглан DS3231 бодит цагийн цагийг хэрхэн тохируулахыг танд үзүүлэх болно. Arduino -ийн цуваа холболт Энэ програмын үндсэн логик: 1. Arduino цуврал хүсэлт илгээдэг
DS1307 Arduino -той бодит цагийн цаг RTC: 4 алхам
DS1307 Real Time Clock RTC with Arduino: Энэхүү гарын авлагад бид Real Time Clock (RTC) болон хэрхэн Arduino & Бодит цагийн цаг IC DS1307 нь цаг хэмжигч төхөөрөмж хэлбэрээр хийгдсэн бөгөөд цагийг хянах, хуанли хөтлөхөд Бодит цаг (RTC) -ийг ашигладаг бөгөөд RTC ашиглахын тулд
DS1307 бодит цагийн цаг (RTC) модулийг ашиглан Arduino дээр суурилсан цаг ба 0.96: 5 алхам
DS1307 Real Time Clock (RTC) модулийг ашиглан Arduino -д суурилсан цаг & 0.96: Сайн байна уу залуусаа энэ хичээлээр бид DS1307 бодит цагийн модулийг ашиглан ажлын цагийг хэрхэн хийхийг харах болно. OLED дэлгэцүүд Тиймээс бид цагийг DS1307 модулаас унших болно. Үүнийг OLED дэлгэц дээр хэвлэ