UDP_Server

arduino版本的针对ESP32S3的UDP服务器,上电后AP配网
This commit is contained in:
nabla 2024-07-25 22:14:44 +08:00
commit 195ebcb5a6
2 changed files with 126 additions and 0 deletions

104
WebServer03.ino Normal file
View File

@ -0,0 +1,104 @@
#include <WiFi.h>
#include <WebServer.h>
#include <WiFiUdp.h>
#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", "<html><body><h1>Configuration Successful</h1></body></html>");
// 关闭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发送一次数据
}
}

22
page.h Normal file
View File

@ -0,0 +1,22 @@
#ifndef __PAGE_H__
#define __PAGE_H__
String page1 = R"(
<!DOCTYPE html>
<html>
<head>
<title>WiFi Configuration</title>
</head>
<body>
<h1>WiFi Configuration</h1>
<form action="/configure" method="POST">
SSID: <input type="text" name="ssid"><br>
Password: <input type="text" name="password"><br>
Target IP: <input type="text" name="target_ip"><br>
<input type="submit" value="configure">
</form>
</body>
</html>
)";
#endif