Arduino发送GET请求上传传感器数据到MySQL失败问题咨询
问题原因及修复方案
你的Arduino发送的HTTP请求不符合标准格式,服务器无法正常解析,所以不会执行对应的PHP脚本,自然不会更新数据库。串口输出connected仅说明TCP三次握手成功完成,和HTTP请求是否被正确处理没有关联。
具体错误点
- 缺少HTTP协议版本声明,标准GET请求行必须附带协议版本,比如
HTTP/1.1 - 缺少必填的Host请求头,HTTP1.1协议强制要求携带Host头标识目标服务
- 请求末尾缺少空行,HTTP协议要求请求头结束后必须加两个连续的换行(
\r\n\r\n)标识请求结束
修复后的代码
#include <SPI.h> #include <Ethernet.h> byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; byte ip[] = {192, 168, 1, 101 }; // 以太网盾IP byte serv[] = {192, 168, 1, 16} ; // 服务器IP EthernetClient cliente; void runWebSetup() { Ethernet.begin(mac, ip); } void runWebLoop(float temp) { if (cliente.connect(serv, 80)) { Serial.println("connected"); // 构造完整合规的HTTP GET请求 cliente.print("GET /bezp/data.php?temperature="); cliente.print(temp); cliente.println(" HTTP/1.1"); // 补充HTTP协议版本 cliente.println("Host: 192.168.1.16"); // 补充必填Host头 cliente.println("Connection: close"); // 告知服务器处理完请求即可关闭连接 cliente.println(); // 补充空行标识请求结束 // 可选:读取服务器返回内容方便调试 while(cliente.connected() || cliente.available()) { if(cliente.available()) { Serial.write(cliente.read()); // 串口打印服务器返回,可直观看到请求状态 } } cliente.stop(); } else { Serial.println("connection failed"); } delay(5000); }
额外验证建议
- 修复后如果串口输出服务器返回200状态码,说明请求已经被正确处理
- 若仍有问题可查看服务器Web服务的访问日志,通过请求状态码进一步定位问题
- 确认PHP侧是通过
$_GET['temperature']接收参数,不需要额外加引号即可和浏览器访问逻辑对齐
内容的提问来源于stack exchange,提问作者DatZiggyZig
相关产品推荐
相关产品推荐

