硬件入门 + 单片机基础(第19天)云端远程下发控制 一、你必须确认的物模型必须一致标识符DeviceSwitch类型布尔型权限可读写二、硬件接线继电器 VCC→ 5V / 3.3V继电器 GND→ GND继电器 IN→GPIO2(ESP32 板载 LED 也可以用这个脚方便测试)三、完整可直接上传代码只改WiFi 三元组直接用#include WiFi.h #include PubSubClient.h #include AliyunIoTSDK.h // 改这里 #define WIFI_SSID 你的WiFi名 #define WIFI_PASSWD 你的WiFi密码 #define PRODUCT_KEY 你的PK #define DEVICE_NAME 你的DN #define DEVICE_SECRET 你的DS #define REGION_ID cn-shanghai // #define RELAY_PIN 2 // 继电器控制脚 WiFiClient espClient; PubSubClient client(espClient); AliyunIoTSDK iot; bool DeviceSwitch false; // 开关状态 // 【核心云端下发回调】 void callback(char* topic, byte* payload, unsigned int length) { String data ; for (int i 0; i length; i) { data (char)payload[i]; } Serial.println(云端指令 data); // 解析开关 if (data.indexOf(\DeviceSwitch\:true) ! -1) { DeviceSwitch true; digitalWrite(RELAY_PIN, HIGH); // 开继电器 Serial.println(✅ 继电器打开); } if (data.indexOf(\DeviceSwitch\:false) ! -1) { DeviceSwitch false; digitalWrite(RELAY_PIN, LOW); // 关继电器 Serial.println(❌ 继电器关闭); } } // void connectWifi() { WiFi.begin(WIFI_SSID, WIFI_PASSWD); while (WiFi.status() ! WL_CONNECTED) { delay(500); Serial.print(.); } Serial.println(\nWiFi OK); } void connectMQTT() { iot.connect(client, PRODUCT_KEY, DEVICE_NAME, DEVICE_SECRET, REGION_ID); client.setCallback(callback); while (!client.connected()) { if (client.connect(DEVICE_NAME)) { Serial.println(阿里云连接成功 ✅); } else { delay(2000); } } } // 上报状态给云端保持同步 void uploadStatus() { char json[150]; sprintf(json, {\params\:{\DeviceSwitch\:%s}}, DeviceSwitch ? true : false); iot.postProperty(client, json); } void setup() { Serial.begin(115200); pinMode(RELAY_PIN, OUTPUT); digitalWrite(RELAY_PIN, LOW); connectWifi(); connectMQTT(); } void loop() { client.loop(); if (!client.connected()) { connectMQTT(); } // 每秒同步状态 static unsigned long t 0; if (millis() - t 1000) { t millis(); uploadStatus(); } }四、操作方法满分验收步骤上传代码打开串口监视器看到阿里云连接成功 ✅进入阿里云后台 → 设备 →物模型 → 设备开关点击 开启 / 关闭继电器立刻动作无延迟五、验收标准全部满足✅ 网页后台点击按钮下发指令✅ ESP32实时接收✅ 继电器立即动作✅无延迟、无卡顿、不断连✅ 状态双向同步