电子说
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是采用中断实现)-- 手机相机拍摄会有频闪
项目地址:
https://www.alipan.com/t/mcfNjbGrBJJX9AIxfa7I
审核编辑 黄宇
全部0条评论
快来发表一下你的评论吧 !