commit 195ebcb5a6666ab3bd66d89851634cdc047cd267 Author: nabla <164331442@qq.com> Date: Thu Jul 25 22:14:44 2024 +0800 UDP_Server arduino版本的针对ESP32S3的UDP服务器,上电后AP配网 diff --git a/WebServer03.ino b/WebServer03.ino new file mode 100644 index 0000000..f8b36ad --- /dev/null +++ b/WebServer03.ino @@ -0,0 +1,104 @@ +#include +#include +#include +#include "page.h" + +// 创建Web服务器对象,监听端口80 +WebServer server(80); + +// 存储用户输入的SSID和密码 +String ssid; +String password; +String target_ip; + +bool flag = true; +bool isConnected = false; + +WiFiUDP udp; +const char* udpAddress = "255.255.255.255"; +const int udpPort = 8000; + +// 定义ADC通道 +const int adcPins[] = { 1, 2, 3, 4, 5, 6, 7, 8 }; + +// 处理根路径的请求,显示配网页面 +void handleRoot() { + String html = page1; + server.send(200, "text/html", html); +} + +// 处理配置请求,获取用户输入的SSID和密码 +void handleConfigure() { + ssid = server.arg("ssid"); + password = server.arg("password"); + target_ip = server.arg("target_ip"); + server.send(200, "text/html", "

Configuration Successful

"); + + // 关闭AP模式并连接到用户指定的Wi-Fi + WiFi.softAPdisconnect(); + WiFi.begin(ssid.c_str(), password.c_str()); + + // 等待Wi-Fi连接 + while (WiFi.status() != WL_CONNECTED) { + delay(1000); + Serial.print("."); + } + Serial.println("Connected to WiFi"); + Serial.print("IP address: "); + Serial.println(WiFi.localIP()); + Serial.print("Target IP: "); + Serial.println(target_ip); + // udpAddress = target_ip.c_str(); + udp.begin(udpPort); // 启动UDP + isConnected = true; +} + +void setup() { + Serial.begin(115200); + + // 配置AP模式 + WiFi.softAP("ESP32_Config", "12345678"); + + // 配置Web服务器的路由 + server.on("/", handleRoot); + server.on("/configure", HTTP_POST, handleConfigure); + + // 启动Web服务器 + server.begin(); + + Serial.println("AP Mode Started"); +} + +void loop() { + // 处理客户端请求 + while (!isConnected) { + server.handleClient(); + } + if (flag) { + Serial.println("Now is connected to WiFi!"); + flag = false; + } + + while (isConnected) { + uint16_t adcData[8] = { 0 }; + uint8_t adcByteData[16] = { 0 }; + + // 读取ADC值 + for (int i = 0; i < 8; i++) { + adcData[i] = analogRead(adcPins[i]); + } + + for (int i = 0; i < 8; i++) { + adcByteData[2 * i] = (uint8_t)(adcData[i] & 0x00FF); // 低字节 + adcByteData[2 * i + 1] = (uint8_t)((adcData[i] >> 8) & 0x00FF); // 高字节 + } + + // 发送UDP数据 + udp.beginPacket(udpAddress, udpPort); + udp.write(adcByteData, 16); + udp.endPacket(); + + // Serial.println("Sent: " + adcData); // 打印发送的数据 + delay(25); // 每25ms发送一次数据 + } +} diff --git a/page.h b/page.h new file mode 100644 index 0000000..6246524 --- /dev/null +++ b/page.h @@ -0,0 +1,22 @@ +#ifndef __PAGE_H__ +#define __PAGE_H__ + +String page1 = R"( + + + + WiFi Configuration + + +

WiFi Configuration

+
+ SSID:
+ Password:
+ Target IP:
+ +
+ + +)"; + +#endif \ No newline at end of file