You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 16:54:02