Mündəricat:

NODEMCU Lua ESP8266 Real Time Clock (RTC) və EEPROM ilə: 7 addım
NODEMCU Lua ESP8266 Real Time Clock (RTC) və EEPROM ilə: 7 addım

Video: NODEMCU Lua ESP8266 Real Time Clock (RTC) və EEPROM ilə: 7 addım

Video: NODEMCU Lua ESP8266 Real Time Clock (RTC) və EEPROM ilə: 7 addım
Video: LDmicro 18: GPS-будильник Ublox NEO-6M (программирование лестничной схемы ПЛК микроконтроллера с помощью LDmicro) 2024, Noyabr
Anonim
NODEMCU Lua ESP8266 Real vaxt saatı (RTC) və EEPROM ilə
NODEMCU Lua ESP8266 Real vaxt saatı (RTC) və EEPROM ilə

Bir məlumat qeydini saxlamaq istəyirsinizsə, doğru vaxtı əldə etmək çox vacibdir. İnternetdəki mənbələrdən vaxt almağın müxtəlif yolları var.

Sizə vaxt ayırmaq üçün niyə ESP8266 -dan istifadə etməməyinizi soruşa bilərsiniz. Bəli, öz daxili RTC (Real Time Clock) var, ancaq ESP8266 -da 3 fərqli işləmə tezliyi var - çəkildikdə 52MHz, normal iş zamanı 80MHz və gücləndirildikdə 160MHz. Xüsusilə daha uzun müddət ərzində daha dəqiq vaxt saxlamağa ehtiyacınız varsa, xarici bir RTC bir həll təmin edə bilər. Bu modullarda enerji itkisi halında batareya ehtiyatı da var. Bir RTC, qurulduğundan bəri keçən vaxtı saydığı üçün çox dəqiq deyil və əksər tətbiqlər üçün edə bilsə də, kritik vaxt saxlamaq üçün kifayət qədər yaxşı olmaya bilər. Lazım gələrsə, RTC -nin mütəmadi olaraq yenilənə biləcəyi bir SNTP vaxt serverindən dəqiq bir vaxt əldə etmək mümkündür.

DS1307 Tiny RTC I2C Modulu (yuxarıda) bu maddələrə bir nümunədir və Ebayda və digər təchizatçılardan 2 funt sterlinqdən aşağı qiymətə əldə edilə bilər. Eyni şəkildə işləyən və qiyməti 99p -dən yuxarı olan DS1302 və DS3231 kimi digərləri də var.

DS1307 modulu I2C interfeysindən istifadə edir və ESP-01 üçün aşağıdakı kimi bağlanmalıdır.

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

SDA və SCL, daha böyük ESP8266 -dakı hər hansı bir I/O pininə qoşula bilər (kodu müvafiq olaraq dəyişdirin). Bu modula yalnız sol tərəfdəki pinləri bağlamaq lazımdır.

Addım 1: Google Saatı

Google Saatı
Google Saatı

Google -dan vaxt almağın və buna bənzər bir çox nümunə var. GoogleTime.lua proqramını işlədərkən belə bir nəticə əldə edirsiniz:

dofile ("GoogleTime.lua")> Saat: Cümə, 15 Dekabr 2017 11:19:45 GMT

Bu metodun problemi, vaxtın sətir formatında olmasıdır və saatı, dəqiqəni, saniyəni fərdi bitlərə bölmək məcburiyyətindəsiniz. RTC vaxtı xüsusi bir formatda, yəni UNIX vaxt damğasında qəbul edir. Sadə dildə desək, bu, 1 Yanvar 1970 Cümə axşamından bu günə və saata qədər keçən saniyələrin sayıdır. UNIX Epoch (1970/01/01 00:00:00) əksər kompüter əməliyyat sistemləri tərəfindən istifadə olunur və keçən vaxt imzalanmış 32 bit nömrə olaraq saxlanılır. Bu o deməkdir ki, bu sistem 19 Yanvar 2038 -ə qədər işləyəcək və bu say belə saxlanılmayacaq qədər çox olacaq. Bir həll nömrəni 64 bit olaraq saxlamaqdır, amma hələlik 32 bitlik metod kifayət edər.

Daxili RTC -də 2015 İyul 9, 18:29:49 vaxtını təyin etmək üçün bu kod xəttini istifadə edərdiniz:

rtctime.set (1436430589, 0)

2 parametr saniyə və mikro saniyədir.

Daha çox məlumatı NodeMCU Sənədlərini oxuyaraq tapa bilərsiniz.

Addım 2: SNTP Zaman Serverləri

SNTP Zaman Serverləri
SNTP Zaman Serverləri

Sadə Şəbəkə Zaman Protokolu (SNTP) İnternetdəki bir çox mənbədən təmin edilir və dünyanın bir çox ölkələrində bu xidmət var.

SNTPTime2.lua proqramı daxili RTC -də vaxtı təyin edir. ESP8266 -nı yandırarkən quruluşunuzda rtctime & sntp modullarına sahib olmalısınız. Proqram serverdən saniyələr və mikro saniyələr ərzində vaxt alır və rtctime.set (sec, usec) ilə daxili RTC qurur.

Proqram daha sonra tarixi və saatı fərqli formatlarda göstərir.

Dünyada bir çox SNTP serveri var və bəziləri belədir:

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

Yuxarıda göstərilən bütün kod sətirləri SNTPTime2.lua proqramına daxil edilə bilər.

Aşağıdakı ünvanlarda daha çox proqramda istifadə oluna biləcək daha çox SNTP Serverləri var.

93.170.62.252, 130.88.202.49, 79.135.97.79, ntp.exnet.com

Google da bu ünvanlarda vaxt serverləri təqdim edir:

216.239.35.0, 216.239.35.4, 216.239.35.8, 216.239.35.12

Vaxtınızı yaşadığınız ölkədən almağı xatırlamalısınız və ya fərqli dünya saat quruluşları üçün dəyişdirə bilərsiniz. Ayrıca bəzi ölkələrdə yaz vaxtı var, buna görə də bununla məşğul olmalısınız.

Addım 3: RTC Modulundan Vaxt Alınması

RTC Modulundan Vaxt Alınması
RTC Modulundan Vaxt Alınması

GetRTCTime.lua proqramı, vaxtı daxili RTC -dən oxuyur.

Birinci hissə saatı oxuyur və saniyə və mikrosaniyələrdə göstərir.

İkinci hissə onu daha çox insan tərəfindən oxunan formata çevirir.

tm = rtctime.epoch2cal (rtctime.get ()) çağırarkən geri qaytarır:

  • il - 1970 ~ 2038
  • mon - cari ildə 1 ~ 12 ay
  • gün - cari ayda 1 ~ 31 gün
  • saat
  • dəq
  • saniyə
  • gün - cari ildə gün 1 ~ 366
  • wday - cari həftədə 1-7 gün (bazar günü 1)

Hər bir elementə tm ["gün"], tm ["il"] kimi daxil olmaq olar …

Daha çox məlumatı NodeMCU Sənədlərini oxuyaraq tapa bilərsiniz.

DisplaySNTPtime.lua, asanlıqla bağlandığı və bu proqramlarla birlikdə istifadə edilə biləcəyi üçün 128 x 64 OLED LCD ekranda tarixi və vaxtı göstərməyin daha mürəkkəb bir yoludur.

Addım 4: RTC İstifadəçi Yaddaşı

ESP8266 -dakı daxili RTC proqramlaşdırmaçı tərəfindən əldə edilə bilən 128 x 32 bit yaddaş ünvanına malikdir. ESP8266 -nın dərin yuxu dövründən sağ çıxa bildikləri üçün xüsusilə faydalıdır. Onların istifadəsinə nəzarət etmək və təsadüfən onların üzərinə yazılmamasını təmin etmək proqramçıya aiddir.

İstifadəsini göstərən sadə bir proqram olan RTCmem.lua daxil etdim. Quruluşunuzda rtcmem modulu olmalıdır.

Addım 5: Xarici RTC Modulları

Xarici RTC modulları
Xarici RTC modulları

Xarici RTC modulları ESP8266-ya I2C interfeysi vasitəsi ilə qoşulur, bu da yalnız iki I/O pinindən istifadə edir və buna görə də ESP-01 və digər ESP8266 cihazlarının əksəriyyəti ilə işləyir.

RTC modulu ünvanı 0x68 -dir və normal I2C əmrlərindən istifadə etməklə əldə edilir. Nəzərə almaq lazım olan bir şey var, RTC qeydlərindəki məlumatlar BCD formatında (baza 16) saxlanılır, buna görə də proqramlarınız bununla məşğul olmalıdır. Saat və tarix RTC daxilində 7 qeyddə saxlanılır. Daxili RTC -də, BCD dönüşümləri rtctime modulu tərəfindən idarə olunur.

SetExtRTC.lua məlumatları BCD -ə çevirir və vaxtı təyin edir.

ReadExtRTC.lua vaxt məlumatlarını oxuyur və çap edir. QEYD: məlumatlar onaltılıq olaraq çap olunur.

Ekranı format etmək üçün çox vaxt sərf etməmişəm, çünki tarix və vaxtla nə etmək istədiyinizə dair öz fikirləriniz ola bilər. İstədiyiniz təqdirdə daha da inkişaf etdirmək üçün bu, ən sadə formada əsas mühərrikdir.

Addım 6: Məlumat Qeydiyyatı

Məlumat Qeydiyyatı
Məlumat Qeydiyyatı

RTC modullarına yaxından baxsanız, onların içərisində bir AT24C32 EEPROM IC və ya bənzəri olduğunu görərsiniz və ya yuxarıdakı kimi 24C256 lövhəsindən istifadə edə bilərsiniz. Bu EEPROM IC -lərin çoxu yuxarıdakı kimi oxşar pin çıxışlarına malikdir. Müxtəlif miqdarda saxlama ilə gəlirlər, lakin hamısına eyni şəkildə daxil olurlar. AT24C32 artıq lövhəyə lehimləndiyi üçün birbaşa xarici RTC I2C -dən istifadə edilə bilər.

Yalnız bir 24C256 IC və ya bənzər bir cihazınız varsa, onu bir çörək taxtasına qura bilərsiniz, A1, A2 və A3 -ü Gnd -ə, Vcc -i 3.3V -ə və SDA AND SCL -i I2C -yə qoşa bilərsiniz, WP üzən qala bilər. Bəzi EEPROM IC -ləri yalnız 5V -də işləyir, buna görə əvvəlcə müvafiq məlumat vərəqini yoxlayın.

ByteWR.lua, EEPROMun 0x00 yaddaş yerinə 1 bayt məlumat yazır və geri oxuyur.

Desiderata.lua məşhur mətndən EEPROM -a bir neçə sətir yazır.

eeRead.lua, EEPROM -dan məlumatları oxuyur və çap edir.

Qeyd: Bu proqramlar digər EEPROM lövhələri ilə də işləməlidir.

Addım 7: Nəticə

Məlumat girişi üçün RTC və EEPROM -un necə işlədiyini göstərməyə çalışdım. Bu, daha da inkişaf etməyiniz üçün başlanğıcdır. İşıq sensoru, barometrik təzyiq sensoru, temperatur və rütubət sensoru kimi müxtəlif cihazları I2C avtobusuna qoşa və məlumatları EEPROM -da qeyd edə bilərsiniz.

Tövsiyə: