// Learn about the ESP32 WiFi simulation in
// https://docs.wokwi.com/guides/esp32-wifi
#include <WiFi.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include "time.h"
char* gb_val_std_date;
char* gb_val_std_time;
//* Timer variables (send new readings every three minutes)
unsigned long sendDataPrevMillis = 0;
// unsigned long timerDelay = 180000; //3 นาที
// unsigned long timerDelay = 60000; //1 นาที
// unsigned long timerDelay = 300000; //5 นาที
// unsigned long timerDelay = 5000; //1 วินาที
//unsigned long timerDelay = 1200000; //20 วินาที
//unsigned long timerDelay = 1800000; //20 นาที
unsigned long timerDelay = 60000; //1 นาที
unsigned long sendDataPrevMillisShow = 0;
unsigned long timerDelayShow = 5000; //5 วินาที
LiquidCrystal_I2C LCD = LiquidCrystal_I2C(0x27, 16, 2);
#define NTP_SERVER "pool.ntp.org"
#define UTC_OFFSET 0
#define UTC_OFFSET_DST 0
void spinner() {
static int8_t counter = 0;
const char* glyphs = "\xa1\xa5\xdb";
LCD.setCursor(15, 1);
LCD.print(glyphs[counter++]);
if (counter == strlen(glyphs)) {
counter = 0;
}
}
// void ReadSensorData()
// {
// struct tm timeinfo;
// if (!getLocalTime(&timeinfo)) {
// LCD.setCursor(0, 1);
// LCD.println("Connection Err");
// return;
// }
// LCD.setCursor(8, 0);
// LCD.println(&timeinfo, "%H:%M:%S");
// LCD.setCursor(0, 1);
// LCD.println(&timeinfo, "%d/%m/%Y %Z");
// Serial.println(&timeinfo, "%H:%M:%S");
// Serial.println("ReadSensorData");
// }
void ReadSensorData()
{
Serial.println(">>>ReadSensorData");
Serial.println(gb_val_std_time);
}
void ShowData()
{
Serial.println("****ShowData");
Serial.println(gb_val_std_time);
}
void setup() {
Serial.begin(115200);
LCD.init();
LCD.backlight();
LCD.setCursor(0, 0);
LCD.print("Connecting to ");
LCD.setCursor(0, 1);
LCD.print("WiFi ");
WiFi.begin("Wokwi-GUEST", "", 6);
while (WiFi.status() != WL_CONNECTED) {
delay(250);
spinner();
}
Serial.println("");
Serial.println("WiFi connected");
Serial.print("IP address: ");
Serial.println(WiFi.localIP());
LCD.clear();
LCD.setCursor(0, 0);
LCD.println("Online");
LCD.setCursor(0, 1);
LCD.println("Updating time...");
configTime(UTC_OFFSET, UTC_OFFSET_DST, NTP_SERVER);
}
void loop() {
// printLocalTime();
// delay(250);
struct tm timeinfo;
if (!getLocalTime(&timeinfo)) {
LCD.setCursor(0, 1);
LCD.println("Connection Err");
return;
}
char dateStringBuff[50]; //50 chars should be enough
char timeStringBuff[50]; //50 chars should be enough
strftime(timeStringBuff, sizeof(timeStringBuff), "%H:%M:%S", &timeinfo);
strftime(dateStringBuff, sizeof(dateStringBuff), "%d/%m/%Y", &timeinfo);
gb_val_std_date = dateStringBuff;
gb_val_std_time = timeStringBuff;
if (millis() - sendDataPrevMillisShow > timerDelayShow || sendDataPrevMillisShow == 0){
sendDataPrevMillisShow = millis(); //หน่วยของ milli-Second
ShowData();
//printLocalTime();
}
if (millis() - sendDataPrevMillis > timerDelay){
sendDataPrevMillis = millis(); //หน่วยของ milli-Second
ReadSensorData();
//printLocalTime();
}
}