esp32/esp8266是启动内置http服务器的主流方案,调用wifi.softap()建热点、webserver类注册路由并循环调用handleclient();表单需用post方法、name匹配server.arg()取值,且须校验输入长度。

单片机作为AP时,如何启动内置HTTP服务器
ESP32/ESP8266 是实际项目中最常选的方案,因为它们原生支持 SoftAP + WebServer 组合,且 Arduino Core 提供了封装好的 WiFi.softAP() 和 WebServer 类。其他单片机(如 STM32)若无 Wi-Fi 模块,必须外接 ESP-01S 等模组,并通过 UART 透传 AT 指令——此时 HTTP 服务实际运行在 ESP 上,MCU 只负责转发和存储配置。
关键点:不能直接在裸机 STM32 上用 C++ 写 HTTP 服务器,资源和 TCP/IP 协议栈不支持。所以“C++单片机”在这里实质是“带 Wi-Fi 能力的 MCU”,主流就是 ESP 系列。
-
WiFi.softAP("MyConfigAP", "12345678")启动热点,注意密码至少 8 位,否则部分手机会拒绝连接 - 调用
server.on("/", HTTP_GET, handleRoot)注册根路径处理函数,别漏掉server.begin() - 必须在主循环中调用
server.handleClient(),否则请求永远不被响应
网页表单提交后,怎么安全接收并解析 Wi-Fi 凭据
浏览器 POST 表单时,默认是 application/x-www-form-urlencoded 编码,不是 JSON。很多初学者误用 server.arg("json") 或手动读取原始 body,结果收不到参数。
正确做法是用 server.hasArg("ssid") 判断字段是否存在,再用 server.arg("ssid") 取值。ESP 的 WebServer 类已自动解析 query string 和 form data。
- HTML 表单
<form method="POST"></form>对应后端用HTTP_POST注册路由 - 字段名必须一致:
<input name="ssid">→ 后端用server.arg("ssid") - 务必对输入做长度检查:
ssid.length() > 0 && ssid.length() ,避免缓冲区溢出 - 密码字段建议用
type="password",但传输仍为明文——AP 配网本就假设局域网可信,无需 TLS
保存配置后,如何触发 Wi-Fi STA 模式重连并退出 AP
写入 Wi-Fi 配置后不能立刻调用 WiFi.disconnect() 或 WiFi.mode(WIFI_STA),否则可能中断正在响应的 HTTP 请求,导致网页卡死或“无法访问此网站”错误。
可靠做法是:先完整响应 HTTP(比如返回一段 JS 跳转或提示),再在下一次 loop() 中切换模式。可用标志位控制状态迁移。
- 设置全局变量
bool shouldSwitchToSTA = false,在 POST 处理完后置为true - 主循环里检测该标志,然后依次执行:
WiFi.softAPdisconnect(true)→WiFi.begin(ssid.c_str(), password.c_str()) -
WiFi.begin()后需轮询WiFi.status() == WL_CONNECTED,超时(如 20 秒)则回退到 AP 模式,防止配错密码锁死 - 连接成功后,用
ESP.restart()清除 AP 状态更稳妥,避免残留 DNS 或 IP 冲突
为什么手机连上 AP 后打不开配置页?常见链路断点
这不是代码写错,而是网络层配置没对齐。最典型的是 DNS 和 IP 分配问题:手机连上 ESP 的 AP 后,需要能解析 http://192.168.4.1(默认 AP 网关地址),但部分安卓机默认不走本地 DNS,会直连公网 DNS 导致超时。
- 确保调用
WiFi.softAPConfig(local_ip, gateway, subnet),其中local_ip设为IPAddress(192, 168, 4, 1),gateway 相同 - 不要依赖 DHCP 默认行为;显式调用
WiFi.softAP("xxx", "yyy", channel, true)的第四个参数开启 DHCP 服务 - 网页中避免用域名(如
http://config.local),全用http://192.168.4.1,iOS/Android 对 mDNS 支持不稳定 - Chrome on Android 有时会缓存失败响应,换 Firefox 或强制下拉刷新
AP 配网真正难的不是写几行 C++,而是把 Wi-Fi、TCP/IP、HTTP、浏览器行为这四层耦合关系理清楚。任何一个环节缺位,都会表现为“连得上但打不开网页”或“填了密码没反应”——这时候要抓包看是 DNS 解析失败、TCP 连不上,还是 HTTP 返回了 404 或空响应。
C++免费学习笔记(深入):立即使用
在学习笔记中,你将探索 C++ 的入门与实战技巧!











