ESP8266 AP模式下无法向XAMPP服务器发送HTTP请求写入数据库
问题排查与修复步骤
1. 修复ESP8266代码的核心错误
你的ESP代码只初始化了HTTP客户端,但从未执行实际的请求。http.begin()仅完成请求准备,必须调用http.GET()才能发送请求到服务器。修改后的loop代码如下:
void loop() { WiFiClient client; HTTPClient http; // 先尝试建立TCP连接,排查网络连通性 if (!client.connect("192.168.4.2", 80)) { Serial.println("无法连接到服务器"); delay(5000); return; } // 初始化HTTP请求并执行 if (http.begin(client, "http://192.168.4.2:80/swater/update.php?value=1")) { int httpCode = http.GET(); // 关键:发送GET请求 Serial.printf("HTTP响应码: %d\n", httpCode); // 打印服务器返回内容,便于排查PHP端问题 if (httpCode > 0) { String payload = http.getString(); Serial.println("服务器返回: " + payload); } else { Serial.printf("请求失败: %s\n", http.errorToString(httpCode).c_str()); } http.end(); // 释放资源 } else { Serial.println("HTTP客户端初始化失败"); } delay(5000); }
2. 增强PHP代码的错误排查能力
原PHP代码无任何错误处理,无法确认请求是否到达、数据库操作是否成功。修改update.php,添加参数校验和错误反馈:
<?php require_once "db.php"; // 检查参数是否存在 if (!isset($_GET['value'])) { http_response_code(400); die("缺少value参数"); } // 转成整数,匹配表字段类型同时避免SQL注入 $value = intval($_GET['value']); $query = "INSERT INTO test(value) VALUES ($value)"; $result = mysqli_query($conn, $query); if (!$result) { // 记录错误到Apache日志,同时返回给客户端 error_log("数据库插入失败: " . mysqli_error($conn)); http_response_code(500); die("数据库错误: " . mysqli_error($conn)); } echo "数据插入成功,value=" . $value; ?>
3. 排查网络与环境问题
- 连通性验证:通过ESP串口输出查看是否能连接到服务器(若提示
无法连接到服务器,说明网络不通)。可在笔记本上ping ESP的默认IP(192.168.4.1),同时在ESP代码中添加ping功能验证反向连通。 - 防火墙拦截:检查笔记本防火墙(如Windows Defender防火墙)是否允许Apache(XAMPP)接收来自
192.168.4.0/24网段的请求,可临时关闭防火墙测试是否恢复正常。 - AP网络参数:确认ESP的AP模式DHCP功能正常,笔记本获得的IP确实为
192.168.4.2(可在笔记本网络设置中查看)。
4. 验证请求是否到达服务器
查看XAMPP的Apache访问日志(xampp/apache/logs/access.log),若ESP请求到达,会出现类似192.168.4.1 - - [日期] "GET /swater/update.php?value=1 HTTP/1.1" 200 长度的记录。若无此记录,说明请求未到达服务器,重点排查ESP网络代码或防火墙。
内容的提问来源于stack exchange,提问作者Mauricio Buendía
相关产品推荐
相关产品推荐

