一、整体业务流程
DHT11/DHT22 温湿度传感器采集 → ESP32 WiFi 联网 → MQTT 三元组加密鉴权上云 → 云端物模型解析存储 → 云端历史数据归档生成曲线 → 云端下发指令 → ESP32 驱动继电器执行开关动作
二、硬件清单
- ESP32 开发板
- DHT11/DHT22 温湿度传感器
- 5V/3.3V 继电器模块
- 杜邦线若干
三、硬件接线
- DHT11
- VCC → 3.3V
- GND → GND
- DATA → GPIO4
- 继电器
- VCC → 3.3V
- GND → GND
- IN → GPIO2
四、Arduino 库安装
WiFi自带PubSubClientMQTT 客户端AliyunIoTSDK阿里云官方加密联网库DHT sensor library+Adafruit Unified Sensor温湿度库
五、完整整合源码(采集 + 上报 + 存储 + 远程控制一体)
#include <WiFi.h> #include <PubSubClient.h> #include <AliyunIoTSDK.h> #include "DHT.h" //===================== 配置区 自行修改 ===================== #define WIFI_SSID "你的WiFi名称" #define WIFI_PASSWORD "你的WiFi密码" #define PRODUCT_KEY "产品KEY" #define DEVICE_NAME "设备名称" #define DEVICE_SECRET "设备秘钥" #define REGION "cn-shanghai" #define DHTPIN 4 #define DHTTYPE DHT11 #define RELAY_PIN 2 #define UPLOAD_INTERVAL 3000 // 3秒上报一次 曲线平滑 //========================================================== DHT dht(DHTPIN,DHTTYPE); WiFiClient espClient; PubSubClient mqttClient(espClient); AliyunIoTSDK aliyunIot; bool relayState = false; float temp,humi; // 云端指令回调 远程控制继电器 void cloudCallback(char* topic,byte* payload,unsigned int len) { String recvData; for(int i=0;i<len;i++) recvData += (char)payload[i]; Serial.println("云端下发指令:"+recvData); if(recvData.indexOf("DeviceSwitch\":true")>0) { relayState = true; digitalWrite(RELAY_PIN,HIGH); Serial.println("继电器开启"); } if(recvData.indexOf("DeviceSwitch\":false")>0) { relayState = false; digitalWrite(RELAY_PIN,LOW); Serial.println("继电器关闭"); } } // WiFi连接 void initWiFi() { WiFi.begin(WIFI_SSID,WIFI_PASSWORD); while(WiFi.status()!=WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println("\nWiFi联网成功"); } // 阿里云MQTT加密连接 void initAliMQTT() { aliyunIot.connect(mqttClient,PRODUCT_KEY,DEVICE_NAME,DEVICE_SECRET,REGION); mqttClient.setCallback(cloudCallback); while(!mqttClient.connected()) { mqttClient.connect(DEVICE_NAME); delay(1000); } Serial.println("阿里云MQTT加密连接成功 设备已在线"); } // 采集温湿度 void getSensorData() { temp = dht.readTemperature(); humi = dht.readHumidity(); if(isnan(temp)||isnan(humi)) { Serial.println("传感器读取失败"); return; } } // 标准物模型JSON上报 void uploadToCloud() { char buf[256]; sprintf(buf,"{\"params\":{\"Temperature\":%.1f,\"Humidity\":%.1f,\"DeviceSwitch\":%s}}", temp,humi,relayState?"true":"false"); aliyunIot.postProperty(mqttClient,buf); Serial.println("数据上报:"+String(buf)); } void setup() { Serial.begin(115200); pinMode(RELAY_PIN,OUTPUT); digitalWrite(RELAY_PIN,LOW); dht.begin(); initWiFi(); initAliMQTT(); } void loop() { mqttClient.loop(); // 断网重连机制 if(!mqttClient.connected()) initAliMQTT(); static unsigned long timeCnt = 0; if(millis()-timeCnt>=UPLOAD_INTERVAL) { timeCnt = millis(); getSensorData(); uploadToCloud(); } }六、阿里云后台全套配置回顾
- 创建产品与设备获取三元组完成身份认证
- 物模型功能定义
- 温度 Temperature 浮点 只读
- 湿度 Humidity 浮点 只读
- 设备开关 DeviceSwitch 布尔 可读写
- 开启数据存储监控运维→数据存储→开启属性存储,自动留存所有历史数据
- 历史曲线查看设备详情→物模型数据→历史数据,自由切换时段查看平滑变化曲线
七、联调整体测试流程
- 烧录代码上电,串口打印 WiFi 联网 + 阿里云在线成功
- 传感器自动采集环境温湿度,定时加密上传云端
- 云端页面实时刷新数值,自动存入数据库
- 云端手动切换设备开关状态,ESP32 瞬间驱动继电器通断
- 长时间运行无断连、无丢包、数据连续稳定
- 进入历史数据页面,查看全天温湿度变化平滑曲线
八、结业达标能力
- 掌握 ESP32 WiFi 配网、串口调试、外设驱动开发
- 精通阿里云三元组加密 MQTT安全上云商用标准流程
- 熟练自定义物联网标准物模型,上下行协议对接
- 实现感知层 - 网络层 - 平台层 - 应用层完整物联网链路打通
- 具备小型工业采集终端、智能家居设备独立上云落地能力
- 掌握数据云端存储、历史追溯、远程双向控制商用项目开发
九、项目拓展方向(商用升级)
- 增加多路传感器:光照、气压、油烟、人体感应
- 增加本地 OLED 屏同步显示数据
- 搭建手机小程序 / APP 可视化控制面板
- 配置云端规则引擎,实现超限自动报警
- 批量设备批量注册、批量运维管理