中文字形需使用此U8g2-2.27.6.zip(lib) 解壓縮後放置於libraries下(取代原u8g2)
//ESP 使用d1 mini
//OLED SDA-->ESP D2 OLED SCL-->ESPD1
#include <ESP8266WiFi.h> // Replace with WiFi.h for ESP32
#include <ESP8266WebServer.h> // Replace with WebServer.h for ESP32
#include <AutoConnect.h>
#include <ESP8266mDNS.h>
#include "Wire.h"
#include "U8g2lib.h"
#include <time.h>
U8G2_SSD1306_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE);
ESP8266WebServer Server; // Replace with WebServer for ESP32
AutoConnect Portal(Server);
AutoConnectConfig config;
const char* host = "mydns";//mDNS使用
uint32_t currentTime, lastTime,dt;
uint8_t wd;
String wdc;
void rootPage() {
char content[] = "Hello, world";
Server.send(200, "text/plain", content);
}
int get_data_from_RTC(byte dataType) {
int myResult=0;
time_t t = time(NULL);
struct tm *t_st;
t_st = localtime(&t);
switch(dataType){
case 0:
myResult=(1900 + t_st->tm_year);
break;
case 1:
myResult=( 1 + t_st->tm_mon);
break;
case 2:
myResult=t_st->tm_mday;
break;
case 3:
myResult=t_st->tm_hour;
break;
case 4:
myResult=t_st->tm_min;
break;
case 5:
myResult=t_st->tm_sec;
break;
case 6:
myResult=t_st->tm_wday;
break;
}
return myResult;
}
void drawP2(){
String temp;
u8g2.setFont(u8g2_font_unifont_t_chinese1);
u8g2.setCursor(10, 2);
//u8g2.setCursor(0, 0);
u8g2.print(String(get_data_from_RTC(0)).c_str());
u8g2.print("年");
u8g2.print(String(get_data_from_RTC(1)).c_str());
u8g2.print("月");
u8g2.print(String(get_data_from_RTC(2)).c_str());
u8g2.print("日 ");
u8g2.setCursor(40, 20);
u8g2.print("星期");
wd=get_data_from_RTC(6);
switch(wd) {
case 0: {wdc="日"; break;}
case 1: {wdc="一"; break;}
case 2: {wdc="二"; break;}
case 3: {wdc="三"; break;}
case 4: {wdc="四"; break;}
case 5: {wdc="五"; break;}
case 6: {wdc="六"; break;}
}
u8g2.print(wdc.c_str());
//u8g2.setFont(u8g2_font_t0_22b_mr);
u8g2.setFont(u8g2_font_inb16_mn);
u8g2.setCursor(10, 40);
temp=String(get_data_from_RTC(3));
if(temp.toInt()<10){temp="0"+temp;}
u8g2.print(temp.c_str());//時
u8g2.print(":");
temp=String(get_data_from_RTC(4));
if(temp.toInt()<10){temp="0"+temp;}
u8g2.print(temp.c_str());
u8g2.print(":");
temp=String(get_data_from_RTC(5));
if(temp.toInt()<10){temp="0"+temp;}
u8g2.print(temp.c_str());
u8g2.sendBuffer();
}
void setup() {
u8g2.begin();
u8g2.enableUTF8Print();
u8g2.setFontMode(0);
u8g2.setFont(u8g2_font_6x10_tf);
u8g2.setFontRefHeightExtendedText();
u8g2.setDrawColor(1);
u8g2.setFontPosTop();
u8g2.setFontDirection(0);
u8g2.clearBuffer();
Serial.begin(115200);
Serial.println();
config.ota = AC_OTA_BUILTIN;
Portal.config(config);
Server.on("/", rootPage);
if (Portal.begin()) {
WiFi.softAP(String("IP-"+String((WiFi.localIP().toString()))),"");
Serial.println("WiFi connected: " + WiFi.localIP().toString());
delay(300);
MDNS.begin(host);
MDNS.addService("http", "tcp", 80);
configTime(8*3600, 0, "time.stdtime.gov.tw","time.nist.gov");
while(get_data_from_RTC(0)<2021){delay(500);}
u8g2.firstPage();
do {
u8g2.setCursor(0, 0);
u8g2.print(String("WiFi Connected").c_str());
u8g2.sendBuffer();
} while (u8g2.nextPage());
}
}
void loop() {
dt=1000;//1秒鐘(1000ms)執行一次
currentTime = millis();
if(currentTime - lastTime > dt){
u8g2.firstPage();
do {
drawP2();
} while (u8g2.nextPage());
lastTime = millis();
}
Portal.handleClient();
MDNS.update();
}
#include <ESP8266WiFi.h> // Replace with WiFi.h for ESP32
#include <ESP8266WebServer.h> // Replace with WebServer.h for ESP32
#include <AutoConnect.h>
#include <ESP8266mDNS.h>
#include "Wire.h"
#include "U8g2lib.h"
#include <time.h>
U8G2_SSD1306_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE);
ESP8266WebServer Server; // Replace with WebServer for ESP32
AutoConnect Portal(Server);
AutoConnectConfig config;
const char* host = "mydns";//mDNS使用
uint32_t currentTime, lastTime,dt;
uint8_t clock_center_x=64, clock_center_y=32;
void rootPage() {
char content[] = "Hello, world";
Server.send(200, "text/plain", content);
}
int get_data_from_RTC(byte dataType) {
int myResult=0;
time_t t = time(NULL);
struct tm *t_st;
t_st = localtime(&t);
switch(dataType){
case 0:
myResult=(1900 + t_st->tm_year);
break;
case 1:
myResult=( 1 + t_st->tm_mon);
break;
case 2:
myResult=t_st->tm_mday;
break;
case 3:
myResult=t_st->tm_hour;
break;
case 4:
myResult=t_st->tm_min;
break;
case 5:
myResult=t_st->tm_sec;
break;
case 6:
myResult=t_st->tm_wday;
break;
}
return myResult;
}
const float pi = 3.14159267 ;
int x_old;
int y_old;
int x_new;
int y_new;
void draw_second(int second){
y_old= (24*cos(pi-(2*pi)/60*second))+clock_center_y;
x_old =(24*sin(pi-(2*pi)/60*second))+clock_center_x;
u8g2.drawCircle(x_old, y_old, 2);
}
void draw_hour(int hour, int minute){
y_old= (18*cos(pi-(2*pi)/12*hour-(2*PI)/720*minute))+clock_center_y;
x_old =(18*sin(pi-(2*pi)/12*hour-(2*PI)/720*minute))+clock_center_x;
y_new=(18*cos(pi-(2*pi)/12*hour-(2*PI)/720*minute))+clock_center_y+1;
x_new=(18*sin(pi-(2*pi)/12*hour-(2*PI)/720*minute))+clock_center_x+1;
u8g2.drawLine(clock_center_x,clock_center_y,x_old,y_old);
u8g2.drawLine(clock_center_x+1,clock_center_y+1,x_new,y_new);
}
void draw_minute(int minute){
y_old= (24*cos(pi-(2*pi)/60*minute))+clock_center_y;
x_old =(24*sin(pi-(2*pi)/60*minute))+clock_center_x;
u8g2.drawLine(clock_center_x,clock_center_y,x_old,y_old);
}
void draw_clock_face(void){
u8g2.drawDisc(clock_center_x, clock_center_y,3);
for (int i=0;i<12;i++){
y_old= (32*cos(pi-(2*pi)/12*i))+clock_center_y;
x_old =(32*sin(pi-(2*pi)/12*i))+clock_center_x;
y_new= (28*cos(pi-(2*pi)/12*i))+clock_center_y;
x_new =(28*sin(pi-(2*pi)/12*i))+clock_center_x;
u8g2.drawLine(x_new,y_new,x_old,y_old);
}
u8g2.setCursor(clock_center_x-3,clock_center_y-32);
u8g2.setFont(u8g2_font_6x10_tf);
u8g2.println("12");
}
void runClock(){
//for (int count2 = 0; count2 < 10; count2++) {
u8g2.clearBuffer();
draw_clock_face();
draw_second(get_data_from_RTC(5));
draw_minute(get_data_from_RTC(4));
draw_hour(get_data_from_RTC(3),get_data_from_RTC(4));
u8g2.sendBuffer();
//delay(1000);
//}
}
void setup() {
u8g2.begin();
u8g2.enableUTF8Print();
u8g2.setFontMode(0);
u8g2.setFont(u8g2_font_6x10_tf);
u8g2.setFontRefHeightExtendedText();
u8g2.setDrawColor(1);
u8g2.setFontPosTop();
u8g2.setFontDirection(0);
u8g2.clearBuffer();
Serial.begin(115200);
Serial.println();
config.ota = AC_OTA_BUILTIN;
Portal.config(config);
Server.on("/", rootPage);
if (Portal.begin()) {
WiFi.softAP(String("IP-"+String((WiFi.localIP().toString()))),"");
Serial.println("WiFi connected: " + WiFi.localIP().toString());
delay(300);
MDNS.begin(host);
MDNS.addService("http", "tcp", 80);
configTime(8*3600, 0, "time.stdtime.gov.tw","time.nist.gov");
while(get_data_from_RTC(0)<2021){delay(500);}
u8g2.firstPage();
do {
u8g2.setCursor(0, 0);
u8g2.print(String("WiFi Connected").c_str());
u8g2.sendBuffer();
} while (u8g2.nextPage());
}
}
void loop() {
dt=1000;//1秒鐘(1000ms)執行一次
currentTime = millis();
if(currentTime - lastTime > dt){
u8g2.firstPage();
do {
runClock();
} while (u8g2.nextPage());
lastTime = millis();
}
Portal.handleClient();
MDNS.update();
}