Daftar Isi:

NODEMCU Lua ESP8266 Dengan Jam Waktu Nyata (RTC) & EEPROM: 7 Langkah
NODEMCU Lua ESP8266 Dengan Jam Waktu Nyata (RTC) & EEPROM: 7 Langkah

Video: NODEMCU Lua ESP8266 Dengan Jam Waktu Nyata (RTC) & EEPROM: 7 Langkah

Video: NODEMCU Lua ESP8266 Dengan Jam Waktu Nyata (RTC) & EEPROM: 7 Langkah
Video: Full !!! Step By Step | Cara Mudah Setting Tanggal dan Jam RTC DS1302 Melalui Aplikasi Telegram 2024, Juli
Anonim
NODEMCU Lua ESP8266 Dengan Jam Waktu Nyata (RTC) & EEPROM
NODEMCU Lua ESP8266 Dengan Jam Waktu Nyata (RTC) & EEPROM

Mendapatkan waktu yang tepat sangat penting jika Anda ingin menyimpan log data. Ada berbagai cara untuk mendapatkan waktu dari sumber di Internet.

Anda mungkin bertanya mengapa tidak menggunakan ESP8266 untuk menghemat waktu Anda? Anda bisa, ia memiliki RTC (Real Time Clock) internalnya sendiri, tetapi ESP8266 memiliki 3 frekuensi jam operasi yang berbeda - 52MHz saat boot, 80MHz selama operasi reguler, dan 160MHz jika dikuatkan. Jika Anda membutuhkan pengaturan waktu yang lebih akurat, terutama dalam periode yang lebih lama, maka RTC eksternal mungkin memberikan solusi. Modul ini juga memiliki baterai cadangan jika terjadi kehilangan daya. RTC tidak terlalu akurat karena menghitung waktu yang telah berlalu sejak ditetapkan dan meskipun dapat dilakukan untuk sebagian besar aplikasi, mungkin tidak cukup baik untuk menjaga waktu kritis. Dimungkinkan untuk mendapatkan waktu yang akurat dari server waktu SNTP dari mana RTC dapat diperbarui secara berkala jika diperlukan.

Modul DS1307 Tiny RTC I2C (di atas) adalah contoh item ini dan dapat dibeli di Ebay dan pemasok lain dengan harga kurang dari £2. Ada juga yang lain seperti DS1302 dan DS3231 yang bekerja dengan cara yang sama dan harganya mulai 99p ke atas.

Modul DS1307 menggunakan antarmuka I2C dan untuk ESP-01 harus dihubungkan sebagai:

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

SDA dan SCL dapat dihubungkan ke salah satu pin I/O pada ESP8266 yang lebih besar (ubah kode yang sesuai). Hanya pin sisi kiri yang perlu dihubungkan pada modul ini.

Langkah 1: Waktu Google

Google Waktu
Google Waktu

Ada banyak contoh mendapatkan waktu dari Google dan terlihat seperti ini. Saat Anda menjalankan program GoogleTime.lua Anda mendapatkan hasil seperti ini:

dofile("GoogleTime.lua")> Waktu: Jum, 15 Des 2017 11:19:45 GMT

Masalah dengan metode ini adalah Anda mendapatkan waktu dalam format string dan Anda harus membagi string menjadi bit individual selama berjam-jam, menit, detik, dll. RTC menerima waktu dalam format khusus yaitu cap waktu UNIX. Dalam istilah awam, ini adalah jumlah detik yang telah berlalu sejak Kamis 1 Januari 1970 hingga hari dan waktu sekarang. UNIX Epoch (1970/01/01 00:00:00) digunakan oleh sebagian besar sistem operasi komputer dan waktu yang telah berlalu disimpan sebagai nomor 32 bit yang ditandatangani. Ini berarti bahwa sistem ini akan bekerja hingga 19 Januari 2038 ketika jumlahnya akan menjadi terlalu besar untuk disimpan dengan cara ini. Salah satu solusinya adalah menyimpan nomor sebagai 64 bit, tetapi untuk saat ini metode 32 bit sudah cukup.

Untuk menyetel waktu ke 9 Juli 2015, 18:29:49 di RTC internal, Anda akan menggunakan baris kode ini:

rtctime.set(1436430589, 0)

2 parameter adalah detik dan mikro detik.

Anda dapat menemukan informasi lebih lanjut dengan membaca Dokumentasi NodeMCU.

Langkah 2: Server Waktu SNTP

Server Waktu SNTP
Server Waktu SNTP

Simple Network Time Protocol (SNTP) disediakan dari banyak sumber di Internet, dan banyak negara di dunia memiliki layanan ini.

Program, SNTPTime2.lua mengatur waktu pada RTC internal. Anda harus memiliki modul rtctime & sntp di build Anda saat mem-flash ESP8266 Anda. Program mendapatkan waktu dari server dalam detik dan mikro detik dan menyetel RTC internal dengan rtctime.set(sec, usec).

Program kemudian menampilkan tanggal dan waktu dalam format yang berbeda.

Ada banyak Server SNTP di seluruh dunia dan beberapa adalah sebagai berikut:

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

Semua baris kode di atas dapat diganti ke dalam program SNTPTime2.lua.

Ada lebih banyak Server SNTP di alamat di bawah ini yang lagi-lagi dapat digunakan dalam program.

93.170.62.252, 130.88.202.49, 79.135.97.79, ntp.exnet.com

Google juga menyediakan server waktu di alamat berikut:

216.239.35.0, 216.239.35.4, 216.239.35.8, 216.239.35.12

Anda harus ingat untuk mendapatkan waktu dari negara tempat Anda berada atau Anda mungkin harus memodifikasinya untuk zona waktu dunia yang berbeda. Juga beberapa negara memiliki waktu musim panas, jadi Anda mungkin harus menghadapinya juga.

Langkah 3: Mendapatkan Waktu Dari Modul RTC

Mendapatkan Waktu Dari Modul RTC
Mendapatkan Waktu Dari Modul RTC

Program GetRTCTime.lua membaca waktu dari RTC internal.

Bagian pertama membaca waktu dan menampilkannya dalam hitungan detik dan mikrodetik.

Bagian kedua mengubahnya menjadi format yang lebih mudah dibaca manusia.

saat memanggil tm = rtctime.epoch2cal(rtctime.get()) ia mengembalikan:

  • tahun - 1970 ~ 2038
  • mon - bulan 1 ~ 12 di tahun berjalan
  • hari - hari 1 ~ 31 di bulan berjalan
  • jam
  • min
  • detik
  • hari - hari 1 ~ 366 di tahun berjalan
  • wday - hari 1 ~ 7 dalam minggu ini (Minggu adalah 1)

Setiap item dapat diakses sebagai tm["hari"], tm["tahun"]…

Anda dapat menemukan informasi lebih lanjut dengan membaca Dokumentasi NodeMCU.

DisplaySNTPtime.lua adalah cara yang lebih rumit untuk menampilkan tanggal dan waktu pada layar LCD 128 x 64 OLED, karena mudah dihubungkan dan dapat digunakan dengan program ini.

Langkah 4: Memori Pengguna RTC

Sedikit pengalihan dari pencatat waktu adalah RTC internal pada ESP8266 memiliki alamat memori 128 x 32 bit yang dapat diakses oleh programmer. Mereka sangat berguna karena mereka dapat bertahan dari siklus tidur nyenyak ESP8266. Terserah programmer untuk mengontrol penggunaannya dan memastikan bahwa mereka tidak ditimpa secara tidak sengaja.

Saya telah menyertakan RTCmem.lua, sebuah program sederhana yang mendemonstrasikan penggunaannya. Anda harus memiliki modul rtcmem di file build.gradle Anda.

Langkah 5: Modul RTC Eksternal

Modul RTC Eksternal
Modul RTC Eksternal

Modul RTC eksternal terhubung ke ESP8266 melalui antarmuka I2C, yang hanya menggunakan dua pin I/O dan bekerja dengan ESP-01 serta sebagian besar perangkat ESP8266 lainnya.

Alamat modul RTC adalah 0x68 dan diakses menggunakan perintah I2C normal. Namun, ada sesuatu yang perlu diingat, data dalam register RTC disimpan dalam format BCD (basis 16), jadi program Anda harus menangani hal ini. Waktu dan tanggal disimpan dalam 7 register dalam RTC. Pada RTC internal, konversi BCD ditangani oleh modul rtctime.

SetExtRTC.lua mengonversi data ke BCD dan menyetel waktu.

ReadExtRTC.lua membaca data waktu dan mencetaknya. CATATAN: data dicetak dalam heksadesimal.

Saya tidak menghabiskan banyak waktu untuk memformat tampilan karena Anda mungkin memiliki ide sendiri tentang apa yang ingin Anda lakukan dengan tanggal dan waktu. Ini adalah mesin dasar dalam bentuknya yang paling sederhana, sehingga Anda dapat mengembangkannya lebih lanjut jika Anda mau.

Langkah 6: Pencatatan Data

Pencatatan Data
Pencatatan Data

Jika Anda melihat lebih dekat pada modul RTC, Anda akan melihat bahwa mereka memiliki IC EEPROM AT24C32 atau sejenisnya yang terpasang di dalamnya, atau Anda dapat menggunakan papan 24C256 seperti di atas. Sebagian besar IC EEPROM ini memiliki pin out yang sama seperti di atas. Mereka datang dengan berbagai jumlah penyimpanan, tetapi semuanya diakses dengan cara yang sama. Karena AT24C32 sudah disolder ke papan, AT24C32 dapat digunakan langsung dari I2C RTC eksternal.

Jika Anda hanya memiliki IC 24C256 atau serupa, Anda dapat mengaturnya di papan roti, sambungkan A1, A2 dan A3 ke Gnd, Vcc ke 3.3V dan SDA AND SCL ke I2C, WP dapat dibiarkan mengambang. Beberapa IC EEPROM hanya beroperasi pada 5V, jadi periksa lembar data yang relevan terlebih dahulu.

ByteWR.lua menulis 1 byte data ke lokasi memori 0x00 EEPROM dan membacanya kembali.

Desiderata.lua menulis beberapa baris dari teks terkenal ke EEPROM.

eeRead.lua membaca data dari EEPROM dan mencetaknya.

CATATAN: Program-program ini juga harus bekerja dengan papan EEPROM lainnya.

Langkah 7: Kesimpulan

Saya telah mencoba menunjukkan cara kerja RTC dan EEPROM untuk pencatatan data. Ini hanyalah permulaan bagi Anda untuk berkembang lebih jauh. Anda dapat menghubungkan berbagai perangkat ke bus I2C seperti sensor cahaya, sensor tekanan barometrik, sensor suhu dan kelembaban dan merekam data pada EEPROM.

Direkomendasikan: