#include <Arduino.h>
#include <WiFi.h> //EPS8266: <EPS8266WiFi.h>
#include <Wire.h>
#include <U8g2lib.h>
#include <HTTPClient.h>
#include <ArduinoJson.h>
#include <time.h>
#include "images.h"
U8G2_SSD1306_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE);
#define SDA 21
#define SCL 22
const char *ssid = "Wokwi-GUEST";
const char *password = "";
const char *NTPServer = "time1.aliyun.com";
char szTime[9];
char szData[20];
char szWeek[10];
uint8_t hour,minute,second,month,day,week;
uint16_t year;
// 连接WiFi
void connectWiFi(){
WiFi.begin(ssid, password); // 启动网络连接
Serial.print("Connecting to "); // 串口监视器输出网络连接信息
Serial.print(ssid); Serial.println(" ..."); // 告知用户NodeMCU正在尝试WiFi连接
int i = 0; // 这一段程序语句用于检查WiFi是否连接成功
while (WiFi.status() != WL_CONNECTED) { // WiFi.status()函数的返回值是由NodeMCU的WiFi连接状态所决定的。
delay(1000); // 如果WiFi连接成功则返回值为WL_CONNECTED
Serial.print(i++); Serial.print(' '); // 此处通过While循环让NodeMCU每隔一秒钟检查一次WiFi.status()函数返回值
} // 同时NodeMCU将通过串口监视器输出连接时长读秒。
// 这个读秒是通过变量i每隔一秒自加1来实现的。
Serial.println(""); // WiFi连接成功后
Serial.println("Connection established!"); // NodeMCU将通过串口监视器输出"连接成功"信息。
Serial.print("IP address: "); // 同时还将输出NodeMCU的IP地址。这一功能是通过调用
Serial.println(WiFi.localIP()); // WiFi.localIP()函数来实现的。该函数的返回值即NodeMCU的IP地址。
configTime(28800, 0, NTPServer); //NTP服务
}
void setup() {
Serial.begin(115200);
Wire.begin(SDA,SCL);
u8g2.begin();
delay(200);
u8g2.firstPage();
do{
u8g2.drawXBMP(34,14,WiFi_Logo_width, WiFi_Logo_height, WiFi_Logo_bits);
u8g2.sendBuffer();
}
while(u8g2.nextPage());
delay(2000);
u8g2.enableUTF8Print();
u8g2.clearBuffer();
u8g2.setFont(u8g2_font_unifont_t_chinese3);
u8g2.setCursor(14, 14);
u8g2.print("开始连接WiFi");
u8g2.sendBuffer();
connectWiFi();
}
void getTime() {
time_t now = time(nullptr); // 获取当前时间戳
struct tm *timeinfo = localtime(&now); // 转为本地时间
hour = timeinfo->tm_hour;
minute = timeinfo->tm_min;
second = timeinfo->tm_sec;
week = timeinfo->tm_wday;
month = timeinfo->tm_mon + 1;
day = timeinfo->tm_mday;
year = timeinfo->tm_year + 1900;
u8g2.clearBuffer();
// Date
u8g2.setFont(u8g2_font_bitcasual_tr);
strftime(szData,sizeof(szData),"%Y-%m-%d",timeinfo);
u8g2.drawStr(2, 12, szData);
// Weekday
strftime(szWeek,sizeof(szWeek),"%a",timeinfo);
u8g2.drawStr(100, 12, szWeek);
//Line
u8g2.drawHLine(0, 14, 128);
// Time
u8g2.setFont(u8g2_font_logisoso24_tr);
u8g2.drawStr(8, 44, szTime);
strftime(szTime,sizeof(szTime),"%X", timeinfo);
//Line
u8g2.drawHLine(0, 48, 128);
//IP address
String ipAddress = WiFi.localIP().toString();
u8g2.setFont(u8g2_font_pixzillav1_tr);
u8g2.drawStr(19, 61,ipAddress.c_str());
u8g2.setFont(u8g2_font_siji_t_6x10); // icon字体
u8g2.drawGlyph(113, 61, 0x0e200); // 电源图标
u8g2.drawGlyph(2, 61, 0x0e21a); // WiFi图标
//空心矩形
u8g2.drawFrame(0,0,128,64);
// Send buffer to display
u8g2.sendBuffer();
delay(1000);
}
void loop() {
getTime();
}