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

如何使用PHP连接Arduino ESP32并下发数据库数据控制其运行

实现方案

方案1:短轮询(改造成本最低,适合绝大多数非强实时需求场景)

这是最适配你现有技术栈的方案,你已经掌握ESP32发HTTP请求、PHP读写数据库的能力,只需要新增少量逻辑即可实现:

  • 核心逻辑:ESP32按固定间隔主动请求服务器PHP接口拉取待执行指令,服务器收到请求后查询数据库返回对应指令
  • 操作步骤:
    1. 数据库新增device_command表,至少存储字段:id、device_id(设备唯一标识)、command(指令内容)、status(指令状态,0待执行/1已执行)、create_time
    2. PHP侧新增指令下发入口:用户访问PHP控制页面时,往device_command表插入对应设备的待执行指令记录即可
    3. PHP侧新增指令查询接口:接收ESP32的请求,查询对应设备的待执行指令,返回后修改指令状态为已执行避免重复下发
    <?php
    $conn = new mysqli('数据库地址', '账号', '密码', '数据库名');
    $device_id = trim($_GET['device_id']);
    // 查询待执行指令
    $stmt = $conn->prepare("SELECT command FROM device_command WHERE device_id = ? AND status = 0 LIMIT 1");
    $stmt->bind_param('s', $device_id);
    $stmt->execute();
    $res = $stmt->get_result();
    if ($res->num_rows > 0) {
        $command = $res->fetch_assoc()['command'];
        echo $command;
        // 标记为已执行
        $updateStmt = $conn->prepare("UPDATE device_command SET status = 1 WHERE device_id = ? AND status = 0");
        $updateStmt->bind_param('s', $device_id);
        $updateStmt->execute();
    } else {
        echo '';
    }
    $conn->close();
    ?>
    
    1. ESP32侧新增定时拉取逻辑,在原有上报逻辑的基础上,每隔固定时间(可根据延迟需求设置1-10秒)请求PHP指令查询接口,拿到指令后执行对应操作
    #include <WiFi.h>
    #include <HTTPClient.h>
    
    const char* ssid = "WiFi名称";
    const char* pwd = "WiFi密码";
    // 替换为你的服务器指令查询接口地址,device_id填当前设备的唯一标识
    const char* commandApi = "http://你的服务器域名/get_command.php?device_id=esp32_001";
    
    void setup() {
        Serial.begin(115200);
        pinMode(2, OUTPUT); // 示例控制引脚,按需修改
        // 连接WiFi
        WiFi.begin(ssid, pwd);
        while (WiFi.status() != WL_CONNECTED) {
            delay(500);
        }
    }
    
    void loop() {
        if (WiFi.status() == WL_CONNECTED) {
            HTTPClient http;
            http.begin(commandApi);
            int code = http.GET();
            if (code == 200) {
                String cmd = http.getString();
                // 执行指令逻辑,按需扩展
                if (cmd == "ON") {
                    digitalWrite(2, HIGH);
                } else if (cmd == "OFF") {
                    digitalWrite(2, LOW);
                }
            }
            http.end();
        }
        // 轮询间隔,3秒,按需调整
        delay(3000);
    }
    

方案2:WebSocket长连接(强实时场景使用,延迟可低至毫秒级)

如果你的场景需要指令立即执行(延迟低于1秒),可以采用长连接方案:

  • 核心逻辑:ESP32和服务器建立WebSocket长连接并保持,服务器有指令时直接通过长连接推送给ESP32,无需等待轮询
  • 注意点:PHP原生不支持长连接驻留,需要安装Swoole扩展或者部署Workerman作为WebSocket服务端,ESP32引入WebSocketsClient库实现连接即可

可搜索关键词

ESP32 服务器指令下发、ESP32 HTTP轮询、PHP ESP32 反向控制、ESP32 WebSocket 服务端推送


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 07:15:03