Files
ESP8266_SmartSwitch/src/WiFiConfig/Config.cpp
2025-10-01 08:49:56 +08:00

145 lines
5.0 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#include <WiFiConfig/Config.h>
#include <Switch/Switch.h>
Switch _类(D4,0,LOW);
IPAddress staticIP(192, 168, 1, 22);
IPAddress gateway(192, 168, 1, 1);
IPAddress subnet(255, 255, 255, 0);
ESP8266WebServer server(80); // 创建一个Web服务器对象监听端口为80
static unsigned long ota_progress_millis = 0;
WiFiConfig::WiFiConfig(int ):()
{
}
WiFiConfig::~WiFiConfig()
{
}
/**
* 一键配网关键代码
*/
void WiFiConfig::()
{
WiFi.mode(WIFI_STA);
("\n正在执行智能配网");
(500);
// 等待配网
WiFi.beginSmartConfig();
{
(".");
delay(500);
_类.();
if (WiFi.smartConfigDone())
{
("\n配网完成!WiFi名称:[%s] WiFi密码:[%s]\n",WiFi.SSID().c_str(),WiFi.psk().c_str());
WiFi.setAutoConnect(true); // 设置自动连接
break;
}
}
("\nWiFi连接成功,IP地址:[%s],Mac地址:[%s]\n",WiFi.localIP().toString().c_str(),WiFi.macAddress().c_str());
_类.();
}
boolean WiFiConfig::()
{
WiFi.begin();
//如果觉得时间太长可改
for (int i = 0; i < ; i++)
{
for (size_t j = 0; i < 255; j++)
{
_类.PWM(j++);
if (WiFi.status() == WL_CONNECTED)
{
//WiFi.config(staticIP,gateway,subnet);
("\nWiFi连接成功,WiFi名称:[%s] WiFi密码:[%s],IP地址:[%s],网关:[%s],Mac地址:[%s]\n",
WiFi.SSID().c_str(),
WiFi.psk().c_str(),
WiFi.localIP().toString().c_str(),
WiFi.gatewayIP().toString().c_str(),
WiFi.macAddress().c_str());
return true;
}
}
for (size_t j = 255; i > 0; j--)
{
_类.PWM(j++);
if (WiFi.status() == WL_CONNECTED)
{
//WiFi.config(staticIP,gateway,subnet);
("\nWiFi连接成功,WiFi名称:[%s] WiFi密码:[%s],IP地址:[%s],网关:[%s],Mac地址:[%s]\n",
WiFi.SSID().c_str(),
WiFi.psk().c_str(),
WiFi.localIP().toString().c_str(),
WiFi.gatewayIP().toString().c_str(),
WiFi.macAddress().c_str());
return true;
}
}
("\nWiFi自动配置,超时等待:[%d/%d]",i,);
}
("WiFi自动配置失败!" );
return false;
}
void WiFiConfig::(){
// 定义根路径("/")的处理函数
server.on("/", []() {
// 使用text/html类型并在头部指定charset=utf-8
String html = "<!DOCTYPE html><html><head>";
html += "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\">";
// 添加一些简单的样式让按钮更美观
html += "<style>";
html += "body { font-family: Arial, sans-serif; text-align: center; padding: 50px; }";
html += ".update-btn { padding: 12px 24px; font-size: 18px; background-color: #4CAF50; color: white;";
html += " border: none; border-radius: 4px; cursor: pointer; text-decoration: none; }";
html += ".update-btn:hover { background-color: #45a049; }";
html += "</style>";
html += "</head><body>";
html += "<h1>您好! 这是 狼魂 OTA升级。</h1>";
// 添加跳转按钮链接到当前IP的/update页面
html += "<a href=\"/update\" class=\"update-btn\">点击进行固件升级</a>";
html += "</body></html>";
server.send(200, "text/html", html);
});
ElegantOTA.setAutoReboot(true);
ElegantOTA.begin(&server); // 初始化ElegantOTA传入WebServer实例
// 设置OTA回调函数
ElegantOTA.onStart(&WiFiConfig::onOTAStart);
ElegantOTA.onProgress(&WiFiConfig::onOTAProgress);
ElegantOTA.onEnd(&WiFiConfig::onOTAEnd); // 注册OTA结束时的回调
server.begin(); // 启动Web服务器
Serial.println("HTTP服务器已启动");
}
void WiFiConfig::(){
server.handleClient(); // 处理客户端请求
ElegantOTA.loop(); // 处理OTA相关任务
}
void WiFiConfig::onOTAStart() {
Serial.println("OTA更新开始!");
}
void WiFiConfig::onOTAProgress(size_t current, size_t final) {
if (millis() - ota_progress_millis > 1000) {
ota_progress_millis = millis();
Serial.printf("OTA进度 当前: %u 字节, 总大小: %u 字节\n", current, final);
}
}
void WiFiConfig::onOTAEnd(bool success) {
if (success) {
Serial.println("OTA更新成功完成!");
} else {
Serial.println("OTA更新过程中出现错误!");
}
}