目录
六、IoT Core 端 Topic 权限控制策略示例(Policy)
ESP32 设备端到 AWS 云端的 MQTT 通信协议文档,适配 AWS IoT Core,满足设备低功耗、通信可靠、云端处理高效的需求。
一、通信协议总览(MQTT)
项目 | 内容 |
协议类型 | MQTT v3.1.1 / v5.0 |
连接加密 | MQTT over TLS(端口:8883) |
认证方式 | AWS IoT X.509 证书认证 |
消息 QoS | QoS 1(可升级 QoS 2) |
保持连接 | KeepAlive: 60s |
消息格式 | JSON |
上报频率 | 设备定时/事件触发上报 |
主题命名 | 分层主题结构,设备隔离 |
二、Topic 设计规范
1. 上行主题(设备 → 云端)
用途 | Topic 格式 | 说明 |
心跳/状态 | device/{deviceId}/status | 定期上报在线/电量等状态 |
数据上报 | device/{deviceId}/data | 上报传感器、事件数据 |
应答消息 | device/{deviceId}/ack/{commandId} | 设备响应控制指令结果 |
异常上报 | device/{deviceId}/error | 上报故障、异常信息 |
2. 下行主题(云端 → 设备)
用途 | Topic 格式 | 说明 |
控制命令 | device/{deviceId}/command | 云端向设备下发控制指令 |
OTA 更新通知 | device/{deviceId}/ota | 通知设备有新固件可更新 |
时间同步 | device/{deviceId}/sync | 云端同步时间给设备 |
三、消息负载(Payload)格式
全部使用 JSON 格式,便于跨端解析。
1.心跳消息(status
)
{
"deviceId": "lock-001",
"timestamp": 1715567890,
"battery": 82,
"signal": -65,
"firmware": "v1.2.3"
}
2.传感器/数据上报(data
)
{
"deviceId": "lock-001",
"timestamp": 1715567900,
"event": "unlock",
"method": "fingerprint",
"user": "Tom"
}
3.控制命令(下发,command
)
{
"commandId": "cmd-987654",
"action": "lock",
"params": {},
"timestamp": 1715567910
}
4.命令应答(ack/{commandId}
)
{
"commandId": "cmd-987654",
"deviceId": "lock-001",
"status": "success",
"message": "Locked successfully",
"timestamp": 1715567920
}
5.OTA 更新通知(ota
)
{
"firmwareVersion": "v1.3.0",
"url": "https://firmware.bucket.s3.amazonaws.com/v1.3.0.bin",
"md5": "abcdef1234567890"
}
6.异常上报(error
)
{
"deviceId": "lock-001",
"timestamp": 1715567930,
"errorCode": "BAT_LOW",
"message": "Battery too low"
}
四、安全通信说明(设备端)
内容 | 实现细节 |
证书认证 | ESP32 上烧录 AWS IoT Core 分配的设备证书 |
TLS 加密 | 使用 mbedTLS 等库连接 mqtts://...:8883 |
客户端标识(ClientID) | lock-001(建议为设备唯一 ID) |
防止劫持 | 使用 AWS IoT 策略限制 topic 订阅与发布范围 |
五、MQTT 参数建议配置(ESP32 端)
参数 | 建议值 | 说明 |
KeepAlive | 60 秒 | 保活间隔 |
CleanSession | FALSE | 支持离线命令 |
QoS | 1 | 至少一次传输 |
Retain | FALSE | 状态数据不需保留 |
Reconnect Interval | 5~10 秒重试连接 | 遇断线自动重连 |
六、IoT Core 端 Topic 权限控制策略示例(Policy)
{
"Effect": "Allow",
"Action": [
"iot:Connect",
"iot:Publish",
"iot:Subscribe",
"iot:Receive"
],
"Resource": [
"arn:aws:iot:region:account-id:client/lock-001",
"arn:aws:iot:region:account-id:topic/device/lock-001/
",
* "arn:aws:iot:region:account-id:topicfilter/device/lock-001/*
"
]
}
七、总结
模块 | 设计亮点 |
Topic 命名 | 分层清晰,按设备隔离 |
Payload | 全部 JSON,字段标准化,便于云端和前端统一解析 |
安全性 | TLS + X.509 证书,配合策略精准授权 |
易扩展性 | 可支持多类型设备、支持 OTA 与异步应答 |
扩展阅读:
物联网低功耗保活协同优化方案:软硬件与WiFi网关动态联动 | 物联网低功耗保活协同优化方案:软硬件与WiFi网关动态联动 |
基于 ESP32 与 AWS 全托管服务的 IoT 架构:MQTT + WebSocket 实现设备-云-APP 高效互联 | 基于 ESP32 与 AWS 全托管服务的 IoT 架构:MQTT + WebSocket 实现设备-云-APP 高效互联 |
ESP32-MQTT-AWS IoT Core低功耗通信架构:可靠性设计与云端智能处理 | ESP32-MQTT-AWS IoT Core低功耗通信架构:可靠性设计与云端智能处理 |
设备到云端全双工通信的 TCP 协议设计 | 设备到云端全双工通信的 TCP 协议设计 |
MQTT协议心跳机制详解:PINGREQ与PINGRESP如何保障连接持续活跃 | MQTT协议心跳机制详解:PINGREQ与PINGRESP如何保障连接持续活跃 |
主流物联网通信协议选型:TCP, MQTT, WebSocket, UDP, RTSP, Modbus TCP | 主流物联网通信协议选型:TCP, MQTT, WebSocket, UDP, RTSP, Modbus TCP |
TCP 断开重连机制设计与实现说明 | TCP 断开重连机制设计与实现说明 |
MQTT 客户端断线重连机制设计与实现 | MQTT 客户端断线重连机制设计与实现 |
基于 AWS IoT Core 的 MQTT 断线处理与自动重连策略设计文档 | 基于 AWS IoT Core 的 MQTT 断线处理与自动重连策略设计文档 |
AWS IoT Core MQTT 设备接入与断线重连机制的项目模板 | AWS IoT Core MQTT 设备接入与断线重连机制的项目模板 |