diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..fd333f8 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,14 @@ +{ + "files.associations": { + "array": "cpp", + "deque": "cpp", + "list": "cpp", + "string": "cpp", + "unordered_map": "cpp", + "vector": "cpp", + "string_view": "cpp", + "initializer_list": "cpp", + "ranges": "cpp", + "regex": "cpp" + } +} \ No newline at end of file diff --git a/platformio.ini b/platformio.ini index d5ab27a..7a84479 100644 --- a/platformio.ini +++ b/platformio.ini @@ -14,4 +14,6 @@ board = nodemcuv2 framework = arduino upload_speed = 921600 monitor_speed = 115200 -lib_deps = knolleary/PubSubClient@^2.8 +lib_deps = + knolleary/PubSubClient@^2.8 + ayushsharma82/ElegantOTA@^3.1.7 diff --git a/src/Switch/Switch.cpp b/src/Switch/Switch.cpp index 6f54343..f8233f4 100644 --- a/src/Switch/Switch.cpp +++ b/src/Switch/Switch.cpp @@ -41,6 +41,10 @@ { digitalWrite(输出引脚,状态); } + void Switch::设置输出PWM(byte value) + { + analogWrite(输出引脚,value); + } boolean Switch::获取状态() { 如果(反馈引脚!=0) diff --git a/src/Switch/Switch.h b/src/Switch/Switch.h index d002cbc..c3d6be8 100644 --- a/src/Switch/Switch.h +++ b/src/Switch/Switch.h @@ -17,6 +17,7 @@ class Switch void 关闭(); //关闭继电器 void 切换状态(); //切换继电器的状态 void 设置状态(boolean state); //设置继电器的状态 + void 设置输出PWM(byte value); //设置输出PWM boolean 获取状态(); //获取继电器的状态 diff --git a/src/WiFiConfig/Config.cpp b/src/WiFiConfig/Config.cpp index a0c03a7..96fda09 100644 --- a/src/WiFiConfig/Config.cpp +++ b/src/WiFiConfig/Config.cpp @@ -5,6 +5,9 @@ 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 自动连接等待时间):等待时间(自动连接等待时间) { @@ -31,12 +34,13 @@ void WiFiConfig::智能配网() 状态指示灯_类.切换状态(); if (WiFi.smartConfigDone()) { - 串口调试("\n配网完成!WiFi名称:[%s] WiFi密码:[%s]\n",WiFi.SSID().c_str(),WiFi.psk()); - WiFi.setAutoConnect(true); // 设置自动连接 - break; + 串口调试("\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::自动联网() @@ -45,27 +49,97 @@ boolean WiFiConfig::自动联网() //如果觉得时间太长可改 for (int i = 0; i < 等待时间; i++) { - int 状态 = WiFi.status(); - 状态指示灯_类.切换状态(); - if (状态 == WL_CONNECTED) + for (size_t j = 0; i < 255; j++) { - //WiFi.config(staticIP,gateway,subnet); + 状态指示灯_类.设置输出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(), - WiFi.localIP().toString().c_str(), - WiFi.gatewayIP().toString().c_str(), - WiFi.macAddress().c_str()); - - return true; + 串口调试("\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; + } } - else + for (size_t j = 255; i > 0; j--) { - 串口调试("\nWiFi自动配置,超时等待:[%d/%d]秒",i,等待时间); - delay(1000); + 状态指示灯_类.设置输出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 = "
"; + html += ""; + // 添加一些简单的样式让按钮更美观 + html += ""; + html += ""; + html += "