// /*********************************************************** // * function: 设备配网 // * board: esp8266 core for arduino v3.0.2 // * library: PubSubClient2.8.0 & ArduinoJson6.19.1 // * source: https://github.com/kerwincui/wumei-smart // ***********************************************************/ // #include // #include // String randomName="wumei-device"+(String)random(1000); // const char *ap_ssid =randomName.c_str(); // const char *ap_password = ""; //开放式网络 // char sta_ssid[32] = {0}; // char sta_password[64] = {0}; // char sta_user_id[32] = {0}; // IPAddress local_IP(192, 168, 4, 1); // IPAddress gateway(192, 168, 4, 1); // IPAddress subnet(255, 255, 255, 0); // void initApConfig(); // void initWebServer(); // void handleConfig(); // void handleStatus(); // void handleNotFound(); // ESP8266WebServer server(80); // // void setup(void) // // { // // //打开串行端口: // // Serial.begin(115200); // // // AP模式 // // initApConfig(); // // // web服务 // // initWebServer(); // // } // // void loop(void) // // { // // // Web服务端 // // server.handleClient(); // // } // /** // * AP模式 // */ // void initApConfig() // { // WiFi.mode(WIFI_AP_STA); // WiFi.softAPConfig(local_IP, gateway, subnet); // WiFi.softAP(ap_ssid, ap_password); // printMsg("已启动AP配网,IP地址:" + WiFi.softAPIP().toString()+", 热点名称:"+(String)ap_ssid); // } // /** // * 初始化webserver配置 // */ // void initWebServer() // { // server.on("/status", HTTP_GET, handleStatus); // server.on("/config", HTTP_POST, handleConfig); // server.onNotFound(handleNotFound); // server.enableCORS(true); // server.begin(); // printMsg("HTTP服务已启动"); // } // /** // * 连接WIFI // */ // void connectWifi() // { // printMsg("连接WIFI"); // WiFi.begin(sta_ssid, sta_password); // int cnt = 0; // while (WiFi.status() != WL_CONNECTED) // { // delay(500); // cnt++; // Serial.print("."); // if (cnt >= 30) // { // printMsg("设备连接WIFI超时,请重新配网"); // return; // } // } // server.close(); // WiFi.softAPdisconnect(false); // printMsg("Http服务和热点已关闭,设备已连接WIFI"); // } // /** // * 检测设备状态 // */ // void handleStatus(){ // server.send(200, "text/plain;charset=utf-8", "AP配网已准备就绪"); // } // /** // * 配网:下发配置信息 // */ // void handleConfig() // { // printMsg("进入配网......"); // // wifi名称、wifi密码、用户编号 // if (server.hasArg("SSID") && server.hasArg("password") && server.hasArg("userId")) // { // strcpy(sta_ssid, server.arg("SSID").c_str()); // strcpy(sta_password, server.arg("password").c_str()); // strcpy(sta_user_id, server.arg("userId").c_str()); // printMsg("收到WIFI名称:" + (String)sta_ssid); // printMsg("收到WIFI密码:" + (String)sta_password); // printMsg("收到用户编号:" + (String)sta_user_id); // } // else // { // printMsg("配网必须传递用户编号、WIFI名称和WIFI密码,配网失败"); // server.send(500, "text/plain;charset=utf-8", "配网必须传递用户编号、WIFI名称和WIFI密码,配网失败"); // return; // } // // 可选字段 // if (server.hasArg("deviceNum")) // { // printMsg("收到设备编号:" + server.arg("deviceNum")); // } // if (server.hasArg("extra")) // { // printMsg("收到补充信息:" + server.arg("extra")); // } // // TODO 可增加设备连接WIFI测试 // server.send(200, "text/plain;charset=utf-8", "设备已更新WIFI配置,开始连接WIFI..."); // connectWifi(); // } // void handleNotFound() // { // printMsg("进入预检请求或请求地址找不到"); // if (server.method() == HTTP_OPTIONS) // { // // 处理浏览器跨域问题 // server.sendHeader("Access-Control-Max-Age", "10000"); // server.sendHeader("Access-Control-Allow-Methods", "PUT,POST,GET,OPTIONS"); // server.sendHeader("Access-Control-Allow-Headers", "*"); // server.send(204); // } // else // { // server.send(404, "text/plain;charset=utf-8", "请求的地址找不到或无法访问"); // } // } // //打印提示信息 // void printMsg(String msg) // { // Serial.print("\r\n["); // Serial.print(millis()); // Serial.print("ms]"); // Serial.print(msg); // }