Pada contoh kali ini, saya akan coba gabungkan Tutorial WiFi Manager dan NTP client pada ESP32.
Ada tambahan fungsi pada tutorial ini, yaitu configModeCallback. Fungsi ini dijalankan sebelum fungsi AutoConnect.
void configModeCallback (WiFiManager *myWiFiManager) {
Serial.println("===================================");
Serial.println("Masuk ke mode konfigurasi");
Serial.print("IP Address yang bisa diakses : ");
Serial.println(WiFi.softAPIP());
Serial.print("WiFi/SSID : ");
Serial.println(myWiFiManager->getConfigPortalSSID());
Serial.println("===================================");
}
Pada contoh di atas, dalam configModeCallback akan menampilkan IP Address dan SSID.
Program lengkapnya adalah sebagai berikut :
#include <WiFiManager.h> // https://github.com/tzapu/WiFiManager
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 configModeCallback (WiFiManager *myWiFiManager) {
Serial.println("===================================");
Serial.println("Masuk ke mode konfigurasi");
Serial.print("IP Address yang bisa diakses : ");
Serial.println(WiFi.softAPIP());
Serial.print("WiFi/SSID : ");
Serial.println(myWiFiManager->getConfigPortalSSID());
Serial.println("===================================");
}
void setup() {
bool res;
Serial.begin(115200);
//WiFiManager, Local intialization. Once its business is done, there is no need to keep it around
WiFiManager wm;
// reset settings - wipe stored credentials for testing
// these are stored by the esp library
// wm.resetSettings();
// Callback ini dipakai jika ingin melakukan sesuatu sebelum
// menjalankan AutoConnect
// Sebagai contoh, sebelum connect, kita akan tampilkan IP Addressnya
wm.setAPCallback(configModeCallback);
// Ambil SSID dan password dari EEPROM, lalu coba connect
// Jika SSID dan password tidak ada atau tidak bisa connect,
// maka board akan bertindak sebagai access point dengan SSID
// "Wemos D1 Mini AP" dengan pass = "132457"
// dan terus looping disini sampai menunggu konfigurasi
res = wm.autoConnect("ESP32 Server","123456789");
if(!res) {
Serial.println("Tidak bisa terhubung ke WiFi");
// ESP.restart();
}
else {
// Jika berhasil connect ke WiFi
Serial.println("WiFi siap digunakan");
Serial.print("IP Address :");
Serial.println(WiFi.localIP());
// Inisialiasi dan ambil waktu dari NTP Server
configTime(gmtOffset_sec, daylightOffset_sec, ntpServer);
printLocalTime();
}
}
void loop() {
delay(5000);
printLocalTime();
}
Pingback: ESP32 WiFi Manager OnDemandConfig - Stelselmatig