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

求助:Arduino Uno WiFi调用PHP脚本失败(仅能连接服务器)

排查Arduino Uno WiFi调用PHP脚本无响应的问题

先把你提供的代码整理并补全(看起来代码有截断,先还原已有的部分):

#include <Wire.h>
#include <UnoWiFiDevEd.h>

void setup() {
  const char* connector = "rest";
  const char* server = "https://________.com";
  const char* method = "POST";
  const char* resource = "/send.php";
  
  Serial.begin(9600);
  Ciao.begin();
  pinMode(2, INPUT);
  delay(10000); // 代码到这里截断了,缺少请求发送的核心逻辑
}

// 大概率还缺少loop函数或完整的请求执行代码

接下来从几个核心方向帮你排查问题:

1. 补全Arduino端的请求逻辑

你目前的代码只完成了初始化,没有实际发送Rest请求的代码。UnoWifiDevEd库需要调用Ciao.write()来触发请求,尤其是POST请求需要携带参数或请求体才能让PHP脚本识别到调用。

给你一个完整的POST请求示例:

#include <Wire.h>
#include <UnoWiFiDevEd.h>

const char* connector = "rest";
const char* server = "https://your-domain.com";
const char* method = "POST";
const char* resource = "/send.php";

void setup() {
  Serial.begin(9600);
  while (!Serial); // 等待串口连接完成
  
  Ciao.begin();
  pinMode(2, INPUT);
  delay(2000);

  // 构造要发送的POST数据(比如读取引脚2的状态)
  String postData = "sensor_state=" + String(digitalRead(2));
  // 发送请求并获取响应
  CiaoData response = Ciao.write(connector, server, method, resource, postData);
  
  // 打印调试信息
  if (response.isValid()) {
    Serial.println("✅ 请求成功,服务器响应:");
    Serial.println(response.getContent());
  } else {
    Serial.println("❌ 请求失败");
    Serial.println("错误码:" + String(response.getCode()));
  }
}

void loop() {
  // 可以添加定时重复请求的逻辑
  delay(5000);
}

2. 检查PHP脚本的有效性

2.1 确保脚本能正确接收POST请求

如果你的PHP脚本需要处理POST参数,要确保它能正确获取数据,比如:

<?php
// send.php
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    // 接收POST参数
    $sensorState = isset($_POST['sensor_state']) ? $_POST['sensor_state'] : '无数据';
    // 执行你的业务逻辑(比如写入数据库、记录日志)
    file_put_contents('sensor_log.txt', $sensorState . "\n", FILE_APPEND);
    // 必须返回响应,Arduino才能判断请求是否成功
    echo "已接收数据:" . $sensorState;
} else {
    echo "仅支持POST请求";
}
?>

注意:如果Arduino发送的是原始文本(不是表单格式),PHP需要用file_get_contents('php://input')来读取,而不是$_POST。

2.2 排查服务器端权限与错误

  • 确保send.php的文件权限设置为755,让服务器能正常执行它。
  • 查看服务器的错误日志(比如Apache的error.log或Nginx的error.log),如果PHP脚本有语法错误、权限不足等问题,日志里会有明确提示。

3. HTTPS连接的特殊问题

你用的是HTTPS协议,UnoWifiDevEd库对HTTPS的支持有几个坑:

  • 旧版本库可能不支持SNI(服务器名称指示),如果你的服务器是共享主机,建议先换成HTTP协议测试,排除HTTPS的影响。
  • 服务器的SSL证书必须是受信任的,部分嵌入式设备无法识别自签名证书。如果测试HTTP正常,再考虑更新库版本或配置证书信任。

4. 用串口调试定位问题

在代码中添加更多串口输出,能帮你看清请求的细节:

// 在发送请求前打印请求信息
Serial.println("请求方法:" + String(method));
Serial.println("请求地址:" + String(server) + String(resource));
Serial.println("发送数据:" + postData);

// 请求后打印响应状态码
Serial.println("服务器状态码:" + String(response.getCode()));

状态码能直接说明问题:比如404是脚本路径错误,500是PHP脚本内部报错,200是请求成功但脚本逻辑有问题。


内容的提问来源于stack exchange,提问作者evocorsa

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:49:36