Sesekali, Anda akan menemukan ide di mana menjaga waktu menjadi prioritas utama. Misalnya, bayangkan sebuah relai yang harus diaktifkan pada waktu tertentu atau pencatat data yang harus menyimpan nilai pada interval yang tepat.
Hal pertama yang terlintas dalam pikiran adalah menggunakan chip RTC (Real Time Clock). Namun, karena chip ini tidak sepenuhnya akurat, Anda harus melakukan penyesuaian manual secara berkala agar tetap sinkron.
Sebaliknya, lebih baik menggunakan Network Time Protocol (NTP). Jika proyek ESP8266 Anda memiliki akses internet, Anda bisa mendapatkan tanggal dan waktu (dengan presisi beberapa milidetik UTC) secara GRATIS. Selain itu, Anda tidak memerlukan perangkat keras tambahan.
Apa itu NTP?
NTP adalah singkatan dari Network Time Protocol. Ini adalah Protokol Internet (IP) standar untuk menyinkronkan jam komputer melalui jaringan.
Protokol ini menyinkronkan semua perangkat yang terhubung ke Waktu Universal Terkoordinasi (UTC) dalam beberapa milidetik (50 milidetik melalui internet publik dan kurang dari 5 milidetik dalam lingkungan LAN).
Waktu Universal Terkoordinasi (UTC) adalah standar waktu global yang serupa dengan GMT (Greenwich Mean Time). UTC tidak berubah; sama di seluruh dunia.
Idenya di sini adalah menggunakan NTP untuk mengatur jam komputer ke UTC, lalu menerapkan zona waktu lokal atau waktu musim panas. Hal ini memungkinkan kita untuk menyinkronkan jam komputer terlepas dari lokasi atau perbedaan zona waktu.
Arsitektur NTP
NTP menggunakan arsitektur hierarkis. Setiap tingkatan dalam hierarki dikenal sebagai stratum.
Di bagian paling atas terdapat perangkat penunjuk waktu presisi tinggi, seperti jam atom, GPS, atau jam radio, yang dikenal sebagai jam perangkat keras stratum 0.
Server Stratum 1 terhubung langsung ke jam perangkat keras stratum 0 dan oleh karena itu menyediakan waktu yang paling akurat.
Setiap strata dalam hierarki tersinkronisasi dengan strata di atasnya dan bertindak sebagai server bagi komputer di strata yang lebih rendah.
Bagaimana NTP Bekerja?
NTP dapat beroperasi dengan beberapa cara. Konfigurasi yang paling umum adalah beroperasi dalam mode klien-server.
Prinsip operasi dasarnya adalah sebagai berikut:
1. Perangkat klien, seperti ESP8266, terhubung ke server NTP melalui Protokol Datagram Pengguna (UDP) pada port 123.
2. Klien kemudian mengirimkan paket permintaan ke server NTP.
3. Menanggapi permintaan ini, server NTP mengirimkan paket stempel waktu. Paket stempel waktu berisi berbagai data, seperti stempel waktu UNIX, akurasi, penundaan, atau zona waktu.
4. Klien kemudian dapat mengekstrak tanggal dan waktu saat ini dari paket tersebut.
Mempersiapkan Arduino IDE
Anda harus memasang add-on ESP8266 di Arduino IDE Anda sebelum melanjutkan tutorial ini. Jika Anda belum memasangnya, ikuti tutorial di bawah ini.
Menginstal Pustaka Klien NTP
Pustaka Klien NTP menyederhanakan proses pengambilan waktu dan tanggal dari server NTP. Ikuti langkah-langkah di bawah ini untuk menginstal pustaka ini di Arduino IDE Anda.
Arahkan ke Sketch > Sertakan Pustaka > Kelola Pustaka… Tunggu Pengelola Pustaka mengunduh indeks pustaka dan memperbarui daftar pustaka yang terinstal.
Filter pencarian Anda dengan mengetikkan 'ntpclient'. Cari NTPClient karya Fabrice Weinberg. Klik entri tersebut, lalu pilih Instal.
Mendapatkan Tanggal dan Waktu dari Server NTP
Sketsa di bawah ini akan menunjukkan kepada Anda cara mendapatkan tanggal dan waktu dari Server NTP.
#include <NTPClient.h>
#include <ESP8266WiFi.h>
#include <WiFiUdp.h>
const char *ssid = "YOUR_SSID";
const char *password = "YOUR_PASS";
const long utcOffsetInSeconds = 3600;
char daysOfTheWeek[7][12] = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"};
// Define NTP Client to get time
WiFiUDP ntpUDP;
NTPClient timeClient(ntpUDP, "pool.ntp.org", utcOffsetInSeconds);
void setup(){
Serial.begin(115200);
WiFi.begin(ssid, password);
while ( WiFi.status() != WL_CONNECTED ) {
delay ( 500 );
Serial.print ( "." );
}
timeClient.begin();
}
void loop() {
timeClient.update();
Serial.print(daysOfTheWeek[timeClient.getDay()]);
Serial.print(", ");
Serial.print(timeClient.getHours());
Serial.print(":");
Serial.print(timeClient.getMinutes());
Serial.print(":");
Serial.println(timeClient.getSeconds());
//Serial.println(timeClient.getFormattedTime());
delay(1000);
}
Sebelum mulai mengunggah sketsa, Anda perlu membuat beberapa perubahan untuk memastikannya berfungsi.
1. Ubah dua variabel berikut dengan kredensial jaringan Anda agar ESP8266 dapat terhubung ke jaringan yang ada.
const char* ssid = "YOUR_SSID";
const char* password = "YOUR_PASS";
2. Sesuaikan offset UTC untuk zona waktu Anda (dalam detik). Lihat daftar offset waktu UTC. Berikut beberapa contoh untuk berbagai zona waktu:
- Untuk UTC -5.00: -5 * 60 * 60: -18000
- Untuk UTC +1.00: 1 * 60 * 60: 3600
- Untuk UTC +0.00: 0 * 60 * 60: 0
const long utcOffsetInSeconds = 3600;
Setelah mengunggah sketsa, tekan tombol RST pada NodeMCU Anda. Monitor serial akan menampilkan tanggal dan waktu setiap detik.
Penjelasan Kode
Mari kita lihat sekilas kodenya untuk melihat cara kerjanya. Untuk memulai, kita sertakan pustaka yang diperlukan untuk proyek ini.
NTPClient.h adalah pustaka waktu yang menangani sinkronisasi server NTP dengan baik.
ESP8266WiFi.h adalah pustaka yang berisi metode WiFi khusus ESP8266 yang akan kita gunakan untuk terhubung ke jaringan.
Pustaka WiFiUdp.h menangani tugas-tugas protokol UDP seperti membuka port UDP, mengirim dan menerima paket UDP, dan sebagainya.
#include <NTPClient.h>
#include <ESP8266WiFi.h>
#include <WiFiUdp.h>
Beberapa konstanta didefinisikan, seperti SSID, kata sandi WiFi, dan offset UTC. Array 2D daysOfTheWeek juga didefinisikan.
const char *ssid = "YOUR_SSID";
const char *password = "YOUR_PASS";
const long utcOffsetInSeconds = 3600;
char daysOfTheWeek[7][12] = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"};
Selain itu, alamat Server NTP ditentukan. pool.ntp.org adalah proyek NTP terbuka yang hebat untuk hal semacam ini.
WiFiUDP ntpUDP;
NTPClient timeClient(ntpUDP, "pool.ntp.org", utcOffsetInSeconds);
pool.ntp.org secara otomatis memilih server waktu yang secara fisik dekat dengan Anda. Namun, jika Anda ingin memilih server tertentu, gunakan salah satu sub-zona pool.ntp.org.
Pada bagian pengaturan, pertama-tama kita buat komunikasi serial dengan PC, lalu hubungkan ke jaringan WiFi dengan memanggil fungsi WiFi.begin().
Serial.begin(115200);
WiFi.begin(ssid, password);
while ( WiFi.status() != WL_CONNECTED ) {
delay ( 500 );
Serial.print ( "." );
}
Setelah ESP8266 terhubung ke jaringan, kami menggunakan fungsi begin() untuk menginisialisasi klien NTP.
timeClient.begin();
Sekarang, kita cukup memanggil fungsi update() untuk mendapatkan tanggal dan waktu saat ini. Fungsi ini mengirimkan paket permintaan ke server NTP dan mengurai paket stempel waktu yang diterima ke dalam format yang dapat dibaca.
timeClient.update();
Anda dapat mengambil tanggal dan waktu saat ini dengan memanggil metode objek Klien NTP.
Serial.print(daysOfTheWeek[timeClient.getDay()]);
Serial.print(", ");
Serial.print(timeClient.getHours());
Serial.print(":");
Serial.print(timeClient.getMinutes());
Serial.print(":");
Serial.println(timeClient.getSeconds());
Siap Untuk Membuat Proyek Impianmu Menjadi Kenyataan?
Klik di sini untuk chat langsung via WhatsApp dan dapatkan dukungan langsung dari tim ahli kami!










0 Komentar