如何使用PHP连接Arduino ESP32并下发数据库数据控制其运行
实现方案
方案1:短轮询(改造成本最低,适合绝大多数非强实时需求场景)
这是最适配你现有技术栈的方案,你已经掌握ESP32发HTTP请求、PHP读写数据库的能力,只需要新增少量逻辑即可实现:
- 核心逻辑:ESP32按固定间隔主动请求服务器PHP接口拉取待执行指令,服务器收到请求后查询数据库返回对应指令
- 操作步骤:
- 数据库新增
device_command表,至少存储字段:id、device_id(设备唯一标识)、command(指令内容)、status(指令状态,0待执行/1已执行)、create_time - PHP侧新增指令下发入口:用户访问PHP控制页面时,往
device_command表插入对应设备的待执行指令记录即可 - 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(); ?>- 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
相关产品推荐
相关产品推荐

