基于ESP32与阿里云的智能家居控制系统(上)
上篇:硬件搭建与云端配置
一、项目概述
智能家居是物联网技术最贴近日常生活的应用场景之一。一套完整的智能家居系统通常需要解决三个核心问题:感知(环境状态采集)、控制(设备执行指令)和通信(设备与云端的数据交互)。
本文项目聚焦于门禁安防与环境监测两个方向,具体实现以下功能:
| 功能模块 | 具体内容 |
|---|---|
| RFID门禁 | 刷卡识别、舵机开门、非法刷卡报警 |
| 环境监测 | 温湿度、空气质量、火焰检测 |
| 远程控制 | 云端远程开门、报警阈值调整 |
| 本地控制 | 板载按钮、嵌入式Web服务器 |
技术选型说明:ESP32兼具WiFi/BLE通信能力与足够的GPIO接口,适合作为物联网终端主控;阿里云物联网平台提供免费的公共实例,支持MQTT协议接入,无需自建服务器即可完成设备管理、数据存储与消息转发。
二、系统硬件选型
2.1 主控芯片
TinkerNode是基于ESP32的物联网开发板,主要技术参数如下:
| 参数 | 规格 |
|---|---|
| 主控芯片 | ESP32 |
| 无线通信 | WiFi 2.4GHz / 蓝牙4.0 / NB-IoT |
| 数字I/O | 5个(D0-D4) |
| 模拟输入 | 2个(A0-A1) |
| 通信接口 | SPI / I2C / UART |
| 工作电压 | 3.3V |
| Flash | 16MB |
2.2 外围设备选型
| 设备 | 型号 | 功能 |
|---|---|---|
| RFID读卡模块 | RC522 | 读取ISO/IEC 14443A标准卡片UID |
| 舵机 | SG90 | 控制门锁开闭(0°关 / 90°开) |
| 温湿度传感器 | DHT11 | 温度0-50℃ / 湿度20-90%RH |
| 空气质量传感器 | MQ135 | 检测氨气/苯/烟雾等有害气体 |
| 火焰传感器 | 红外型 | 检测火焰红外光谱 |
| 蜂鸣器 | 有源 |
本地声音报警 |
2.3 GPIO引脚分配
| 模块 | 信号引脚 | 连接ESP32引脚 |
|---|---|---|
| RC522 | SCK(时钟) | SCK(GPIO18) |
| RC522 | MOSI(主出从入) | MOSI(GPIO23) |
| RC522 | MISO(主入从出) | MISO(GPIO19) |
| RC522 | RST(复位) | GPIO22 |
| RC522 | SDA(片选) | GPIO21 |
| 火焰传感器 | 模拟输出 | A0 |
| MQ135 | 模拟输出 | A1 |
| DHT11 | 数据线 | D0 |
| 蜂鸣器 | 信号线 | D1 |
| SG90舵机 | 信号线 | D2 |
注意:TinkerNode的D3引脚连接了板载按键,D4引脚连接了板载LED,在使用这两个引脚时需考虑板载电路的影响。
三、阿里云物联网平台配置
3.1 创建产品
登录阿里云物联网平台控制台,进入“设备管理 → 产品”,点击创建产品:
| 配置项 | 填写内容 |
|---|---|
| 产品名称 | SmartHome |
| 节点类型 | 设备 |
| 连网方式 | WiFi |
| 数据格式 | ICA标准数据格式(Alink JSON) |
创建成功后,系统生成唯一的ProductKey,作为该产品下所有设备的统一标识。
3.2 创建设备
在产品下添加设备,每台设备分配唯一的三元组信息:
| 参数 | 说明 |
|---|---|
| ProductKey | 产品标识,同一产品下所有设备共用 |
| DeviceName | 设备名称,产品下唯一 |
| DeviceSecret | 设备密钥,用于MQTT连接认证 |
本次系统共创建5个设备:
| 设备名称 | 功能说明 |
|---|---|
| Servo_Device | 舵机远程控制 |
| Door_Device | 门禁事件上报 |
| Humiture_Device | 温湿度数据上报 |
| Air_Device | 空气质量数据上报 |
| Flame_Device | 火焰数据上报 |
3.3 物模型定义
物模型(TSL,Thing Specification Language)是阿里云对设备功能的标准描述,包含属性、服务、事件三种类型。
属性:描述设备运行状态,分为只读(设备上报)和读写(云端可下发)。
事件:设备主动上报的异常或通知,无需云端响应。

四、设备端开发环境
4.1 核心库依赖
| 库名称 | 用途 | 安装方式 |
|---|---|---|
| DFRobot_Iot | 阿里云IoT平台连接 | 库管理器搜索安装 |
| PubSubClient | MQTT协议实现 | 库管理器搜索安装 |
| ArduinoJson | JSON数据解析与构建 | 库管理器搜索安装 |
| MFRC522 | RC522读卡模块驱动 | 库管理器搜索安装 |
| ESP32Servo | 舵机控制 | 库管理器搜索安装 |
| DHT | DHT11/DHT22传感器驱动 | 库管理器搜索安装 |
4.2 工程目录结构
SmartHome/ ├── smarthome.ino // 主程序入口 ├── headfile.h // 统一头文件引用 ├── AccessControl.h/cpp // 门禁控制模块 ├── EnMonitor.h/cpp // 环境监测模块 ├── CloudControl.h/cpp // 云端通信模块 ├── WebServer.h/cpp // 嵌入式Web服务器
五、WiFi连接与设备认证
5.1 WiFi连接
设备端通过STA模式连接家庭路由器:
const char *WIFI_SSID = "路由器名称";
const char *WIFI_PASSWORD = "路由器密码";
void connectWiFi()
{
Serial.print("正在连接 WiFi...");
WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
while (WiFi.status() != WL_CONNECTED)
{
delay(500);
Serial.print(".");
}
Serial.println("\nWiFi 连接成功");
Serial.print("IP 地址: ");
Serial.println(WiFi.localIP());
}
5.2 MQTT连接与设备认证
使用DFRobot_Iot库完成阿里云MQTT连接:
void connectDevice(CloudDevice &device)
{
// 使用三元组初始化MQTT客户端
device.iot.init(ALIYUN_SERVER, PRODUCT_KEY, device.clientId,
device.deviceName, device.deviceSecret);
device.mqttClient = new PubSubClient(device.wifiClient);
device.mqttClient->setServer(device.iot._mqttServer, PORT);
// 若有回调函数,设置消息处理回调
if (device.callback != nullptr)
{
device.mqttClient->setCallback(device.callback);
}
// 建立连接
while (!device.mqttClient->connected())
{
if (device.mqttClient->connect(device.iot._clientId,
device.iot._username,device.iot._password))
{
// 订阅设备属性设置Topic(仅需要接收指令的设备)
if (device.needSubscribe)
{
device.mqttClient->subscribe(subTopic.c_str());
}
}
else
{
delay(5000);
}
}
}
5.3 Topic设计
设备与云端通信通过发布/订阅特定的MQTT Topic实现:
| Topic类型 | 格式 | 用途 |
|---|---|---|
| 属性上报 | /sys/${ProductKey}/${DeviceName}/thing/event/property/post |
设备上报属性数据 |
| 属性设置 | /sys/${ProductKey}/${DeviceName}/thing/service/property/set |
云端下发属性指令 |
| 事件上报 | /sys/${ProductKey}/${DeviceName}/thing/event/${EventName}/post |
设备上报事件 |
发布/订阅模式是MQTT协议的核心机制。设备通过发布操作将数据发送到特定Topic,云端通过订阅同一Topic接收数据;云端下发的指令发布到设备的订阅Topic,设备在回调函数中处理。
六、小结
上篇完成了硬件选型、云端配置与基础通信框架的搭建。核心成果包括:
-
确定了ESP32主控与各类传感器/执行器的硬件连接方案
-
在阿里云物联网平台完成产品创建、设备注册与物模型定义
-
建立了设备端WiFi连接与MQTT认证的基础代码框架
-
明确了各模块的Topic设计方案
下篇将进入具体的软件实现,包括门禁控制逻辑、传感器数据采集、云端数据上报与指令响应、以及嵌入式Web服务器的搭建。
更多推荐

所有评论(0)