硬件入门 + 单片机基础(第21天)ESP32 全套项目联调
一、整体业务流程DHT11/DHT22 温湿度传感器采集 → ESP32 WiFi 联网 → MQTT 三元组加密鉴权上云 → 云端物模型解析存储 → 云端历史数据归档生成曲线 → 云端下发指令 → ESP32 驱动继电器执行开关动作二、硬件清单ESP32 开发板DHT11/DHT22 温湿度传感器5V/3.3V 继电器模块杜邦线若干三、硬件接线DHT11VCC → 3.3VGND → GNDDATA → GPIO4继电器VCC → 3.3VGND → GNDIN → GPIO2四、Arduino 库安装WiFi自带PubSubClientMQTT 客户端AliyunIoTSDK阿里云官方加密联网库DHT sensor libraryAdafruit 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 i0;ilen;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()-timeCntUPLOAD_INTERVAL) { timeCnt millis(); getSensorData(); uploadToCloud(); } }六、阿里云后台全套配置回顾创建产品与设备获取三元组完成身份认证物模型功能定义温度 Temperature 浮点 只读湿度 Humidity 浮点 只读设备开关 DeviceSwitch 布尔 可读写开启数据存储监控运维→数据存储→开启属性存储自动留存所有历史数据历史曲线查看设备详情→物模型数据→历史数据自由切换时段查看平滑变化曲线七、联调整体测试流程烧录代码上电串口打印 WiFi 联网 阿里云在线成功传感器自动采集环境温湿度定时加密上传云端云端页面实时刷新数值自动存入数据库云端手动切换设备开关状态ESP32 瞬间驱动继电器通断长时间运行无断连、无丢包、数据连续稳定进入历史数据页面查看全天温湿度变化平滑曲线八、结业达标能力掌握 ESP32 WiFi 配网、串口调试、外设驱动开发精通阿里云三元组加密 MQTT安全上云商用标准流程熟练自定义物联网标准物模型上下行协议对接实现感知层 - 网络层 - 平台层 - 应用层完整物联网链路打通具备小型工业采集终端、智能家居设备独立上云落地能力掌握数据云端存储、历史追溯、远程双向控制商用项目开发九、项目拓展方向商用升级增加多路传感器光照、气压、油烟、人体感应增加本地 OLED 屏同步显示数据搭建手机小程序 / APP 可视化控制面板配置云端规则引擎实现超限自动报警批量设备批量注册、批量运维管理