2024年国庆期间,假期无聊写的程序
主界面
主程序
#include < Arduino.h >
#include "Backend_service.h"
#include "SMG_4.h"
void setup() {
Serial.begin(115200);
SMG_4_Init(); // 初始化数码管显示
connectToWiFi(); // 连接Wi-Fi
initOLED(); // 初始化 OLED
// 初始化 NTP 客户端
timeClient.begin();
// 等待时间同步
while(!timeClient.update()) {
Serial.println("Waiting for NTP time sync...");
delay(1000); // 每秒钟检查一次
}
// 处理网页请求
server.on("/", handleRoot); // 处理根路径
server.on("/setCity", handleSetCity); // 处理设置城市请求
server.on("/time", handleTime); // 处理时间请求
server.on("/weather", handleWeather); // 处理天气请求
server.begin(); // 启动服务器
}
void loop() {
static unsigned long lastWeatherUpdate = 0; // 上一次天气刷新的时间
static unsigned long lastTimeUpdate = 0; // 上一次时间刷新的时间
unsigned long currentMillis = millis();
// 确保 NTP 客户端保持更新
timeClient.update();
// 获取当前时间的小时和分钟
hours = timeClient.getHours();
minutes = timeClient.getMinutes();
// 每20s更新 OLED 上的时间
if (currentMillis - lastTimeUpdate >= 10000) { // 20s更新一次
lastTimeUpdate = currentMillis;
String timeString = String(hours) + ":" + (minutes < 10 ? "0" + String(minutes) : String(minutes)); // 格式化时间 (HH:MM)
// 更新 OLED 显示时间和天气信息
updateOLED(timeString, weatherEnglish, temp + "°C", WiFi.localIP().toString(),city);
}
// 每 20 分钟刷新一次天气信息
if (currentMillis - lastWeatherUpdate >= 1200000) { // 1200000 毫秒 = 20 分钟
lastWeatherUpdate = currentMillis;
// 调用获取天气数据的函数
handleWeather();
}
// 显示当前时间的小时和分钟到数码管
displayTime(hours, minutes);
// 处理网页请求
server.handleClient();
}
手机界面
实物图(实物--4led是采用中断实现)-- 手机相机拍摄会有频闪