基于ESP32的网络天气时钟 微服务器

电子说

1.3w人已加入

描述

2024年国庆期间,假期无聊写的程序

ESP32主界面 ESP32

主程序

 

#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();
}

 

手机界面

ESP32

实物图(实物--4led是采用中断实现)-- 手机相机拍摄会有频闪

ESP32

项目地址:

https://www.alipan.com/t/mcfNjbGrBJJX9AIxfa7I

审核编辑 黄宇

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分