Kali ini akan membuat program pada ESP32 sebagai NTP Client menggunakan PlatformIO.
Langkah 1 : Setting platformio.ini
Karena outputnya akan ditampilkan pada serial monitor, jadi kita harus tambahkan parameter baud rate untuk serial monitor nya pada file platformio
monitor_speed = 115200
Langkah 2 : Menulis Program
/*
Program ESP32 sebagai NTP Client
Link yang bermanfaat :
https://github.com/espressif/arduino-esp32
https://docs.espressif.com/projects/arduino-esp32/en/latest/libraries.html
*/
#include <WiFi.h>
#include "time.h"
const char *ssid = "disi_nama_wifi";
const char *password = "diisi_password_wifi";
const char* ntpServer = "pool.ntp.org";
const long gmtOffset_sec = 3600*7;
const int daylightOffset_sec = 0;
void printLocalTime(){
struct tm timeinfo;
if(!getLocalTime(&timeinfo)){
Serial.println("Failed to obtain time");
return;
}
Serial.println(&timeinfo, "%A, %B %d %Y %H:%M:%S");
Serial.print("Hari: ");
Serial.println(&timeinfo, "%A");
Serial.print("Tanggal: ");
Serial.println(&timeinfo, "%d");
Serial.print("Bulan: ");
Serial.println(&timeinfo, "%B");
Serial.print("Tahun: ");
Serial.println(&timeinfo, "%Y");
Serial.print("Jam: ");
Serial.println(&timeinfo, "%H");
Serial.print("Jam (12 hour format): ");
Serial.println(&timeinfo, "%I");
Serial.print("Menit: ");
Serial.println(&timeinfo, "%M");
Serial.print("Detik: ");
Serial.println(&timeinfo, "%S");
Serial.println("=====================");
}
void setup(){
Serial.begin(115200);
// Connect ke Wi-Fi
Serial.print("Connecting to ");
Serial.println(ssid);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected.");
// Inisialiasi dan ambil waktu dari NTP Server
configTime(gmtOffset_sec, daylightOffset_sec, ntpServer);
printLocalTime();
//disconnect WiFi karena sudah tidak dibutuhkan
WiFi.disconnect(true);
WiFi.mode(WIFI_OFF);
}
void loop(){
delay(1000);
printLocalTime();
}
Tampilan di Serial Monitor nya adalah sebagai berikut :

Beberapa hal penting adalah sebagai berikut
- Karena posisi Indonesia di GMT+7 maka untuk gmtOffset nya adalah 3600*7
- Untuk ambil waktu dari NTP Server, kita bisa gunakan library ESP32 configTime(). Jika ingin lihat detailnya ada disini
- Kemudian untuk mendapatkan waktu dari Board, kita bisa gunakan perintah getLocalTime()
Berikut Format Date specifier
specifier | Replaced by | Example |
---|---|---|
%a | Abbreviated weekday name * | Thu |
%A | Full weekday name * | Thursday |
%b | Abbreviated month name * | Aug |
%B | Full month name * | August |
%c | Date and time representation * | Thu Aug 23 14:55:02 2001 |
%C | Year divided by 100 and truncated to integer (00-99 ) | 20 |
%d | Day of the month, zero-padded (01-31 ) | 23 |
%D | Short MM/DD/YY date, equivalent to %m/%d/%y | 08/23/01 |
%e | Day of the month, space-padded ( 1-31 ) | 23 |
%F | Short YYYY-MM-DD date, equivalent to %Y-%m-%d | 2001-08-23 |
%g | Week-based year, last two digits (00-99 ) | 01 |
%G | Week-based year | 2001 |
%h | Abbreviated month name * (same as %b ) | Aug |
%H | Hour in 24h format (00-23 ) | 14 |
%I | Hour in 12h format (01-12 ) | 02 |
%j | Day of the year (001-366 ) | 235 |
%m | Month as a decimal number (01-12 ) | 08 |
%M | Minute (00-59 ) | 55 |
%n | New-line character ('\n' ) |
|
%p | AM or PM designation | PM |
%r | 12-hour clock time * | 02:55:02 pm |
%R | 24-hour HH:MM time, equivalent to %H:%M | 14:55 |
%S | Second (00-61 ) | 02 |
%t | Horizontal-tab character ('\t' ) |
|
%T | ISO 8601 time format (HH:MM:SS ), equivalent to %H:%M:%S | 14:55:02 |
%u | ISO 8601 weekday as number with Monday as 1 (1-7 ) | 4 |
%U | Week number with the first Sunday as the first day of week one (00-53 ) | 33 |
%V | ISO 8601 week number (01-53 ) | 34 |
%w | Weekday as a decimal number with Sunday as 0 (0-6 ) | 4 |
%W | Week number with the first Monday as the first day of week one (00-53 ) | 34 |
%x | Date representation * | 08/23/01 |
%X | Time representation * | 14:55:02 |
%y | Year, last two digits (00-99 ) | 01 |
%Y | Year | 2001 |
Modifikasi Program:
Nama Hari dan Bulan menggunakan Bahasa Indonesia
/*
Program ESP32 sebagai NTP Client
Link yang bermanfaat :
https://github.com/espressif/arduino-esp32
https://docs.espressif.com/projects/arduino-esp32/en/latest/libraries.html
*/
#include <WiFi.h>
#include "time.h"
const char *ssid = "disi_nama_wifi";
const char *password = "diisi_password_wifi";
const char* ntpServer = "pool.ntp.org";
const long gmtOffset_sec = 3600*7;
const int daylightOffset_sec = 0;
String Hari[7] = {"Minggu", "Senin ", "Selasa", "Rabu", "Kamis", "Jumat", "Sabtu"};
String Bulan[12] = {"Januari", "Februari ", "Maret", "April", "Mei", "Juni", "Juli", "Agustus", "September", "Oktober", "November", "Desember"};
char Tanggal[50] = "";
char Jam[20] = "";
void printLocalTime(){
struct tm timeinfo;
if(!getLocalTime(&timeinfo)){
Serial.println("Failed to obtain time");
return;
}
// Year dalam timestruct dihitung sejak 1900
sprintf(Tanggal, "%s,%d %s %d ",Hari[timeinfo.tm_wday],timeinfo.tm_mday,Bulan[timeinfo.tm_mon],timeinfo.tm_year+1900);
sprintf(Jam, "%02d:%02d:%02d ",timeinfo.tm_hour,timeinfo.tm_min,timeinfo.tm_sec);
Serial.print("Tanggal Format Indonesia : ");
Serial.println(Tanggal);
Serial.print("Jam Format Indonesia : ");
Serial.println(Jam);
Serial.println("=====================");
}
void setup(){
Serial.begin(115200);
// Connect ke Wi-Fi
Serial.print("Connecting to ");
Serial.println(ssid);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected.");
// Inisialiasi dan ambil waktu dari NTP Server
configTime(gmtOffset_sec, daylightOffset_sec, ntpServer);
printLocalTime();
//disconnect WiFi karena sudah tidak dibutuhkan
WiFi.disconnect(true);
WiFi.mode(WIFI_OFF);
}
void loop(){
delay(5000);
printLocalTime();
}
Jika ingin mencoba di wokwi.com , cukup dengan mengganti WiFi nya seperti berikut. [Baca Tutorial Menggunakan Wokwi.com]
WiFi.begin("Wokwi-GUEST", "", 6);
