ESP32 NTP Client-Server: Dapatkan Tanggal dan Waktu – Arduino IDE

Esp32 Ntp Client Server Dapatkan Tanggal Dan Waktu Arduino Ide



ESP32 adalah papan Internet of Things (IoT) berbasis mikrokontroler yang dapat dihubungkan dengan berbagai perangkat. ESP32 banyak digunakan dalam proyek berbasis IoT.

Bekerja dengan ESP32 atau waktu mikrokontroler lainnya sangat penting karena pengatur waktu bawaan tidak begitu akurat sehingga kita dapat menggunakan NTP server untuk mengambil waktu nyata dan dapat menyimpannya di dalam variabel yang dapat digunakan nanti di dalam kode ESP32.

Network Time Protocol (NTP) menggunakan Coordinated Universal Time (UTC) yang menyinkronkan jam sistem dengan sangat presisi dan akurat. Pada jaringan yang lebih kecil NTP dapat memberi kita jam seakurat 1 ms sedangkan jaringan yang lebih besar seperti LAN (Local Area Network) NTP dapat memberikan akurasi dengan puluhan milidetik melalui internet. Menggunakan jam akurat ini ESP32 dapat menjalankan instruksi pada waktu tertentu.







Panduan ini berisi konten berikut:



  1. Pengantar NTP (Protokol Waktu Jaringan)
  2. Server NTP dan Pengaturan Waktu



  3. Mencetak Waktu Nyata Menggunakan Fungsi printLocalTime()





1: Pengantar NTP (Protokol Waktu Jaringan)

NTP adalah singkatan dari N etwork T melakukan P rotocol adalah standar yang digunakan untuk menyinkronkan waktu perangkat dengan zona waktunya. Protokol waktu jaringan menyinkronkan waktu semua perangkat jaringan dengan UTC juga dikenal sebagai Waktu Universal Terkoordinasi.

UTC seperti GMT (Greenwich Mean Time) tetapi tidak berubah dan tetap sama di seluruh dunia. Gagasan utama di balik penggunaan UTC adalah membaca waktu dari NTP server dan dengan menerapkan offset UTC kita bisa mendapatkan waktu lokal sesuai dengan zona waktu kita.



2: Server NTP dan Pengaturan Waktu

Untuk membaca waktu dari server NTP kita perlu mendeklarasikan variabel berikut di dalam kode menggunakan variabel ini kita bisa mendapatkan waktu dari server NTP.

  • Server NTP
  • GMT Offset
  • Offset Siang Hari

2.1: Server NTP

Kami akan meminta waktu dari pool.ntp.org yang berisi data waktu dunia di server dan siapa pun dapat meminta waktu lokal mereka menggunakan kumpulan ini. Berikut beberapa server lain yang bisa kita akses:

Daerah Nama host
Di seluruh dunia pool.ntp.org
Asia asia.pool.ntp.org
Eropa eropa.pool.ntp.org
Amerika Utara amerika utara.pool.ntp.org
Oceania oceania.pool.ntp.org
Amerika Selatan amerika selatan.pool.ntp.org

2.2: Penyeimbangan GMT

Offset GMT menjelaskan perbedaan waktu dalam jam antara zona waktu tempat Anda tinggal dengan GMT. Misalnya, jika kita menggunakan zona waktu USA, kita bisa mengaturnya UTC = -11:00 .

2.3: Offset Siang Hari

Di sini siang hari offset adalah waktu hemat siang hari yang biasanya diambil sebagai 1 jam. Daylight saving time berarti memajukan jam 1 jam selama musim panas dan mengubahnya kembali lagi di musim dingin. Perintah ini biasanya digunakan di mana zona waktu khusus digunakan dan aturan penghematan siang hari diterapkan.

Karena kami telah membahas dasar-dasar server NTP sekarang kami akan memeriksa bagaimana kami dapat mengirim permintaan ke server NTP dan membaca waktu lokal menggunakan ESP32 dengan kode Arduino IDE.

3: Mencetak Waktu Nyata Menggunakan Fungsi printLocalTime()

Itu printLocalTime() fungsi akan memanggil getLocalTime() fungsi yang mengirimkan permintaan ke server NTP dan menyimpan tanggal dan waktu yang diterima di dalam informasi waktu variabel.

3.1: Kode untuk Mencetak Waktu Nyata

Rekatkan kode yang diberikan untuk server klien NTP di editor Arduino IDE. Hubungkan ESP32 dengan PC, pilih port COM dan unggah kode.

#termasuk
#termasuk 'waktu.h'
const char * ssid     = “REPLACE_WITH_YOUR_SSID”;
const char * kata sandi = “REPLACE_WITH_YOUR_PASSWORD”;
const char * ntpServer = 'pool.ntp.org' ;
panjang const gmtOffset_sec = 18000 ; /* GMT OFFSET + 5 JAM ( 18000 DETIK ) */
const int  daylightOffset_sec = 3600 ; /* 1 offset jam siang hari */
batal printLocalTime ( )
{
struct tm info waktu;
jika ( ! getLocalTime ( & informasi waktu ) ) {
Serial.println ( 'Gagal mendapatkan waktu' ) ;
kembali ;
}
Serial.println ( & informasi waktu, '%A, %B %d %Y %H:%M:%S' ) ;
}
pengaturan batal ( )
{
Serial.mulai ( 115200 ) ;
// terhubung ke Wi-Fi
Serial.printf ( 'Menghubungkan ke %s' , ssd ) ;
WiFi.mulai ( ssid, kata sandi ) ;
ketika ( WiFi.status ( ) ! = WL_TERHUBUNG ) {
menunda ( 500 ) ;
Serial.cetak ( '.' ) ;
}
Serial.println ( 'TERHUBUNG' ) ;
// init dan dapatkan waktu
configTime ( gmtOffset_sec, siang hariOffset_sec, ntpServer ) ;
printLocalTime ( ) ;
// putuskan sambungan WiFi sebagai dia sudah tidak diperlukan lagi
WiFi.putuskan(benar);
WiFi.mode(WIFI_OFF);
}
lingkaran kosong()
{
penundaan (1000);
printLocalTime();
}

Kode dimulai dengan menyertakan WiFi dan perpustakaan waktu. Wifi perpustakaan akan membantu menghubungkan ESP32 dengan jaringan sementara waktu perpustakaan akan menangani sinkronisasi server NTP.

Setelah itu SSID dan kata sandi jaringan yang akan dihubungkan ESP32 ditentukan. Ganti kredensial jaringan Anda di sini. Setelah itu kita telah mendefinisikan GMT mengimbangi sebagai 18000 detik yaitu (UTC+5 jam). Anda dapat mengganti zona waktu UTC Anda sendiri di sini. Ikuti tautan untuk mendapatkan GMT mengimbangi untuk zona waktu Anda.

Selain itu, alamat server NTP ditentukan menggunakan perintah:

const char * ntpServer = 'pool.ntp.org' ;

Perintah ini secara otomatis memilih server waktu yang akan mencari Anda. Namun, kami juga dapat mengatur zona waktu menggunakan server NTP yang dijelaskan di Server NTP bagian.

Pada akhirnya kami mengonfigurasi ESP32 sebagai klien NTP dan untuk mendapatkan tanggal dan waktu. Untuk itu kami menggunakan configTime() fungsi.

Terakhir, menggunakan printLocalTime() fungsi, tanggal dan waktu saat ini dicetak pada monitor serial. Fungsi ini berisi struktur waktu tm yang menyimpan semua informasi dalam informasi waktu variabel.

Perintah berikut mewakili informasi waktu struktur.

Serial.println ( & informasi waktu, '%A, %B %d %Y %H:%M:%S' ) ;

Setiap huruf struktur waktu berhubungan dengan informasi spesifik:

Penentu Informasi
%SEBUAH Kembali hari dalam seminggu
%B Bulan kembali
%d Kembali hari bulan
%Y Kembali tahun ini
%H Kembali jam saat ini
%M Kembali menit saat ini
%S Kembalikan detik saat ini

3.2: Keluaran

Setelah mengunggah kode ESP32 akan terhubung dengan jaringan WiFi dan mengirimkan permintaan ke server NTP untuk menerima tanggal dan waktu saat ini. Output berikut dapat dilihat pada monitor serial Arduino.

Waktu saat ini di PC saya dan ESP32 cocok.

Kami telah berhasil membaca waktu dari server NTP menggunakan ESP32 sebagai klien.

Kesimpulan

Waktu sangat penting untuk aplikasi seperti stempel waktu dan menjalankan instruksi pada waktu tertentu untuk menghasilkan keluaran. Pengatur waktu bawaan tidak begitu akurat, jadi kami dapat menggunakan server NTP untuk membaca waktu dan tanggal saat ini. Kali ini dapat disimpan di dalam variabel untuk digunakan di dalam kode kita. Pelajaran ini membantu mendapatkan waktu yang akurat dari setiap zona waktu di seluruh dunia menggunakan ESP32.