Talaan ng mga Nilalaman:

NODEMCU Lua ESP8266 Sa Real Time Clock (RTC) at EEPROM: 7 Hakbang
NODEMCU Lua ESP8266 Sa Real Time Clock (RTC) at EEPROM: 7 Hakbang

Video: NODEMCU Lua ESP8266 Sa Real Time Clock (RTC) at EEPROM: 7 Hakbang

Video: NODEMCU Lua ESP8266 Sa Real Time Clock (RTC) at EEPROM: 7 Hakbang
Video: FLProg9: RTC Alarm Clock | ESP32 NodeMCU | Arduino Visual Embedded Programming 2024, Nobyembre
Anonim
NODEMCU Lua ESP8266 Sa Real Time Clock (RTC) at EEPROM
NODEMCU Lua ESP8266 Sa Real Time Clock (RTC) at EEPROM

Mahalaga ang pagkuha ng tamang oras kung nais mong mapanatili ang isang data log. Mayroong iba't ibang mga paraan upang makakuha ng oras mula sa mga mapagkukunan sa Internet.

Maaari kang magtanong kung bakit hindi gamitin ang ESP8266 upang mapanatili ang oras para sa iyo? Kaya mo, mayroon itong sariling panloob na RTC (Real Time Clock), ngunit ang ESP8266 ay may 3 magkakaibang mga frequency ng operating hour - 52MHz kapag nag-boot ito, 80MHz habang regular na operasyon, at 160MHz kung pinalakas. Kung kailangan mo ng mas tumpak na pagpapanatili ng oras, lalo na sa mas matagal na panahon, kung gayon ang isang panlabas na RTC ay maaaring magbigay ng isang solusyon. Ang mga modyul na ito ay mayroon ding backup ng baterya kung sakaling mawalan ng kuryente. Ang isang RTC ay hindi katakut-takot na binibilang ang oras na lumipas mula nang itakda ito at bagaman maaari itong gawin para sa karamihan ng mga aplikasyon, maaaring hindi ito sapat para sa kritikal na pagpapanatili ng oras. Posibleng makuha ang isang tumpak na oras mula sa isang time server ng SNTP kung saan mai-update ang RTC sa mga regular na agwat kung kinakailangan.

Ang DS1307 Tiny RTC I2C Module (sa itaas) ay isang halimbawa ng mga item na ito at maaaring mabili sa Ebay at iba pang mga tagatustos ng mas mababa sa £ 2. Mayroon ding iba tulad ng DS1302 at DS3231 na gumagana sa isang katulad na paraan at nagkakahalaga mula 99p pataas.

Ang module ng DS1307 ay gumagamit ng isang interface ng I2C at para sa isang ESP-01 ay dapat na konektado bilang:

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

Ang SDA at SCL ay maaaring konektado sa alinman sa mga I / O na pin sa mas malaking ESP8266's (baguhin ang code nang naaayon). Ang mga pin na kaliwang kamay lamang ang kailangang konektado sa modyul na ito.

Hakbang 1: Oras ng Google

Oras ng Google
Oras ng Google

Maraming mga halimbawa ng pagkuha ng oras mula sa Google at magmukhang ganito. Kapag pinatakbo mo ang GoogleTime.lua program nakakakuha ka ng isang resulta tulad nito:

dofile ("GoogleTime.lua")> Oras: Biyernes, 15 Dis 2017 11:19:45 GMT

Ang problema sa pamamaraang ito ay makuha mo ang oras sa format ng string at kailangan mong hatiin ang string sa mga indibidwal na piraso nito sa loob ng oras, minuto, segundo atbp. Tumatanggap ang RTC ng oras sa isang espesyal na format ibig sabihin ng UNIX time stamp. Sa mga tuntunin ng layman ito ang bilang ng mga segundo na lumipas mula Huwebes noong ika-1 ng Enero 1970 hanggang sa kasalukuyang araw at oras. Ang UNIX Epoch (1970/01/01 00:00:00) ay ginagamit ng karamihan sa mga operating system ng computer at ang lumipas na oras ay nakaimbak bilang isang naka-sign na 32 bit na numero. Nangangahulugan ito na ang sistemang ito ay gagana hanggang sa ika-19 ng Enero 2038 kung ang bilang ay magiging sobrang laki upang maiimbak sa ganitong paraan. Ang isang solusyon ay itabi ang bilang bilang 64 bits, ngunit sa ngayon ang 32 bit na pamamaraan ay sapat na.

Upang maitakda ang oras sa 2015 Hulyo 9, 18: 29: 49 sa panloob na RTC gagamitin mo ang linyang ito ng code:

rtctime.set (1436430589, 0)

Ang 2 mga parameter ay segundo at micro segundo.

Maaari kang makahanap ng karagdagang impormasyon sa pagbabasa ng Dokumentasyon ng NodeMCU.

Hakbang 2: Mga Serbisyo ng Oras ng SNTP

Mga Serbisyo ng Oras ng SNTP
Mga Serbisyo ng Oras ng SNTP

Ang Simple Network Time Protocol (SNTP) ay ibinibigay mula sa maraming mga mapagkukunan sa Internet, at maraming mga bansa sa buong mundo ang mayroong serbisyong ito.

Ang programa, itinatakda ng SNTPTime2.lua ang oras sa panloob na RTC. Kailangan mong magkaroon ng mga rtctime at sntp module sa iyong build kapag na-flash mo ang iyong ESP8266. Nakukuha ng programa ang oras mula sa server sa segundo at micro segundo at itinatakda ang panloob na RTC na may rtctime.set (sec, usec).

Ipinapakita ng programa ang petsa at oras sa iba't ibang mga format.

Maraming mga SNTP Servers sa buong mundo at ang ilan ay ang mga sumusunod:

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

Ang lahat ng mga linya sa itaas ng code ay maaaring mapalitan sa programa ng SNTPTime2.lua.

Mayroong higit pang mga SNTP Server sa mga address sa ibaba na muling magagamit sa programa.

93.170.62.252, 130.88.202.49, 79.135.97.79, ntp.exnet.com

Nagbibigay din ang Google ng mga time server sa mga address na ito:

216.239.35.0, 216.239.35.4, 216.239.35.8, 216.239.35.12

Kailangan mong tandaan upang makakuha ng oras mula sa bansang iyong kinaroroonan o maaari mong baguhin ito para sa iba't ibang mga time zone ng mundo. Gayundin ang ilang mga bansa ay may oras sa pag-save ng daylight, kaya maaaring makitungo ka rin doon.

Hakbang 3: Pagkuha ng Oras Mula sa RTC Modyul

Pagkuha ng Oras Mula sa RTC Modyul
Pagkuha ng Oras Mula sa RTC Modyul

Binabasa ng programang GetRTCTime.lua ang oras mula sa panloob na RTC.

Binabasa ng unang bahagi ang oras at ipinapakita ito sa segundo at microseconds.

Ang ikalawang bahagi ay nagko-convert ito sa higit na nababasa na format ng tao.

kapag tumatawag sa tm = rtctime.epoch2cal (rtctime.get ()) bumalik ito:

  • taon - 1970 ~ 2038
  • mon - buwan 1 ~ 12 sa kasalukuyang taon
  • araw - araw 1 ~ 31 sa kasalukuyang buwan
  • oras
  • min
  • seg
  • araw - araw 1 ~ 366 sa kasalukuyang taon
  • wday - araw 1 ~ 7 sa kasalukuyang linggo (Linggo ay 1)

Ang bawat item ay maaaring ma-access bilang tm ["araw"], tm ["taon"]…

Maaari kang makahanap ng karagdagang impormasyon sa pagbabasa ng Dokumentasyon ng NodeMCU.

Ang DisplaySNTPtime.lua ay isang mas detalyadong paraan ng pagpapakita ng petsa at oras sa isang LCD 128 x 64 OLED display, dahil madali itong konektado at maaaring magamit sa mga programang ito.

Hakbang 4: Memory ng Gumagamit ng RTC

Ang isang maliit na paglilipat mula sa pag-iingat ng oras ay ang panloob na RTC sa ESP8266 ay may 128 x 32 bit mga address ng memorya na maaaring ma-access ng programmer. Lalo silang kapaki-pakinabang dahil makakaligtas sila sa malalim na siklo ng pagtulog ng ESP8266. Nasa sa programmer na kontrolin ang kanilang paggamit at matiyak na hindi sila na-o-overtake nang hindi sinasadya.

Isinama ko ang RTCmem.lua, isang simpleng programa na nagpapakita ng paggamit nito. Kailangan mong magkaroon ng module ng rtcmem sa iyong build.

Hakbang 5: Mga Panlabas na Module ng RTC

Panlabas na Mga Modyul ng RTC
Panlabas na Mga Modyul ng RTC

Ang panlabas na mga module ng RTC ay kumonekta sa ESP8266 sa pamamagitan ng interface ng I2C, na gumagamit lamang ng dalawang mga I / O na pin at sa gayon gumagana sa ESP-01 pati na rin ang karamihan sa iba pang mga aparatong ESP8266.

Ang address ng module ng RTC ay 0x68 at na-access gamit ang normal na mga utos ng I2C. Gayunpaman, mayroong isang bagay na dapat tandaan, ang data sa mga rehistro ng RTC ay nakaimbak sa format na BCD (base 16), kaya't haharapin ito ng iyong mga programa. Ang oras at petsa ay nakaimbak sa 7 rehistro sa loob ng RTC. Sa panloob na RTC, ang mga conversion sa BCD ay alagaan ng module ng rtctime.

Kinokonekta ng SetExtRTC.lua ang data sa BCD at itinakda ang oras.

Basahin ng ReadExtRTC.lua ang data ng oras at i-print ito. TANDAAN: ang data ay nakalimbag sa hexadecimal.

Hindi ako gumugol ng maraming oras sa pag-format ng display dahil maaaring mayroon kang sariling mga ideya tungkol sa kung ano ang nais mong gawin sa petsa at oras. Ito ang pangunahing makina sa pinakasimpleng form nito, upang maaari mo itong paunlarinin nang higit pa kung nais mo.

Hakbang 6: Pag-log ng Data

Pag-log ng Data
Pag-log ng Data

Kung titingnan mo nang mabuti ang mga module ng RTC, mapapansin mo na mayroon silang isang AT24C32 EEPROM IC o katulad na built sa kanila, o maaari mong gamitin ang isang board na 24C256 tulad ng nasa itaas. Karamihan sa mga EEPROM IC na ito ay may katulad na mga pin outs tulad ng nasa itaas. Mayroong iba't ibang mga halaga ng imbakan, ngunit lahat sila ay na-access sa parehong paraan. Tulad ng AT24C32 na na-solder sa board, maaari itong magamit nang direkta mula sa I2C ng panlabas na RTC.

Kung mayroon ka lamang isang 24C256 IC o katulad, maaari mo itong i-set up sa isang board ng tinapay, ikonekta ang A1, A2 at A3 sa Gnd, Vcc sa 3.3V at SDA AT SCL sa I2C, maaaring iwanang nakalutang ang WP. Ang ilang mga EEPROM IC ay nagpapatakbo lamang sa 5V, kaya suriin muna ang nauugnay na sheet ng data.

Nagsusulat ang ByteWR.lua ng 1 byte ng data sa lokasyon ng memorya na 0x00 ng EEPROM at binabasa ito pabalik.

Sumusulat ang Desiderata.lua ng ilang mga linya mula sa sikat na teksto hanggang sa EEPROM.

Nagbabasa ang eeRead.lua ng data mula sa EEPROM at nai-print ito.

TANDAAN: Ang mga programang ito ay dapat na gumana sa iba pang mga board ng EEPROM din.

Hakbang 7: Konklusyon

Sinubukan kong ipakita kung paano gumagana ang RTC at EEPROM para sa pag-log ng data. Ito ay isang starter lamang para sa iyo upang paunlarin pa. Maaari mong ikonekta ang iba't ibang mga aparato sa I2C bus tulad ng mga light sensor, sensor ng barometric pressure, sensor ng temperatura at halumigmig at itala ang data sa EEPROM.

Inirerekumendang: