#include <HTTPClient.h>
#include <time.h> //引用時間格式及操作函式庫, 時間及日期的STRUCTURE
#include <U8g2lib.h>
U8G2_SSD1306_128X64_NONAME_1_HW_I2C u8g2(U8G2_R0, U8X8_PIN_NONE);
const char* ssid = "Wokwi-GUEST";
const char* password = "";
//----- set NTP parameters ---------------
const char *ntpServer = "pool.ntp.org"; //ntp伺服器網址
const long gmtOffset_sec = 28800; // 台灣位於GMT+8,為28888秒
const int dayLightOffset_sec = 0; // 台灣不使用日光節約時間,設為0
void connectWiFi() {
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.print("\nIP位址:");
Serial.println(WiFi.localIP());
}
void setup() {
// put your setup code here, to run once:
Serial.begin(115200);
Serial.println("Hello, ESP32!");
connectWiFi();
u8g2.begin(); // 啟用 OLED
configTime(gmtOffset_sec,dayLightOffset_sec, ntpServer); //設定NTP參數
}
int year;
byte month;
byte day;
byte hour;
byte mmin;
byte sec;
void loop() {
if ((WiFi.status() != WL_CONNECTED)) {
connectWiFi();
}
struct tm timeinfo; //建立一個時間'結構',名字為timeinfo
if (!getLocalTime(&timeinfo)) { //取回NTP 時間
Serial.println("網路時間取回失敗"); //如果失敗,回傳訊息
return;
}
Serial.println(&timeinfo, "%F %T"); //列印取回的時間
day = timeinfo.tm_mday;
month = timeinfo.tm_mon+1;
year = timeinfo.tm_year+1900;
//自NTP取回時間
hour = timeinfo.tm_hour;
mmin = timeinfo.tm_min;
sec = timeinfo.tm_sec;
// 在OLED螢幕顯示資訊
u8g2.firstPage();
do {
u8g2.setFont(u8g2_font_inr16_mf); //選定字型或大小(字大小約為16)
//u8g2.setCursor(0, 36);
//u8g2.print(String(123.4, 1)+ "\xb0"); // 改放日期
//u8g2.setCursor(0, 62);
//u8g2.print(String(56) + " %"); // 改放時間
u8g2.setCursor(0, 20);
u8g2.print(String(year));
u8g2.setCursor(70, 20);
u8g2.print(String(month));
u8g2.setCursor(96, 20);
u8g2.print(String(day));
u8g2.setCursor(20, 60);
u8g2.print(String(hour));
u8g2.setCursor(65, 60);
u8g2.print(String(mmin));
u8g2.setCursor(96, 60);
u8g2.print(String(sec));
} while ( u8g2.nextPage() );
delay(1000); // 間隔 1 秒
}