/*
縮網址:twgo.io/oleds
此為OLED 範例程式,須使用U8G2程式庫
原始U8G2版本程式庫缺乏台灣中文字
請下載益師父版本(約7000中文字):twgo.io/u8g2L
Vin 3.3V
GND GND
SCL(SCK) GPIO 22
SDA(SDA) GPIO 21
*/
#include <WiFi.h>
#include <time.h>
#include "Wire.h"
#include "U8g2lib.h" //OLED 螢幕解析度為128*64
U8G2_SSD1306_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE);
// WiFi 設定
const char* ssid = "book";
const char* password = "12345678";
// 時區設定
const char* ntpServer = "pool.ntp.org";
const long gmtOffset_sec = 8 * 3600; // 時區為 +8 (台灣)
const int daylightOffset_sec = 0;
void setup() {
Serial.begin(115200);
u8g2.begin();//初始化
u8g2.enableUTF8Print();//啟用 UTF8字集
u8g2.setFont(u8g2_font_unifont_t_chinese1);//設定使用中文字形
u8g2.setDrawColor(1);//設定顏色,我們是單色只有1
u8g2.setFontPosTop();//座標從上開始
u8g2.setFontDirection(0);//0不旋轉、1->90、2->180、3->270
// 連接 WiFi
Serial.print("連接到 ");
Serial.println(ssid);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi 已連接");
Serial.println("IP 位址: ");
Serial.println(WiFi.localIP());
u8g2.clearBuffer();//顯示前清除螢幕
u8g2.setCursor(2, 2);
u8g2.print("WiFi 已連接!");
u8g2.setCursor(2, 20);
u8g2.print("IP: ");
u8g2.print(WiFi.localIP().toString());
u8g2.sendBuffer();//送到螢幕顯示
delay(2000);
// 配置時間
configTime(gmtOffset_sec, daylightOffset_sec, ntpServer);
u8g2.setCursor(2, 40);
u8g2.print("時間已同步");
u8g2.sendBuffer();//送到螢幕顯示
delay(5000);
}
void loop() {
// 獲取時間
struct tm timeinfo;
if(!getLocalTime(&timeinfo)){
Serial.println("獲取時間失敗");
u8g2.setCursor(2, 40);
u8g2.print("獲取時間失敗");
u8g2.sendBuffer();//送到螢幕顯示
delay(2000);
return;
}
// 顯示日期和時間
char dateStr[20];
char timeStr[20];
strftime(dateStr, sizeof(dateStr), "%Y/%m/%d", &timeinfo);
strftime(timeStr, sizeof(timeStr), "%H:%M:%S", &timeinfo);
u8g2.clearBuffer();//顯示前清除螢幕
// 顯示日期
//u8g2.setTextSize(1);
u8g2.setCursor(2, 2);//初始游標
u8g2.println("日期:");
//u8g2.setTextSize(2);
u8g2.setCursor(2, 20);//初始游標
u8g2.print(dateStr);
// 顯示時間
//u8g2.setTextSize(1);
u8g2.setCursor(2, 38);//初始游標
u8g2.print("時間:");
//u8g2.setTextSize(2);
u8g2.setCursor(2, 50);//初始游標
u8g2.print(timeStr);
u8g2.sendBuffer();//送到螢幕顯示
delay(1000); // 每秒更新一次
}