目录
设备到云端、云端到设备通信的 TCP 协议设计,适用于 ESP32 设备与云端进行直连通信的自定义协议场景(非 MQTT/非 HTTP/WebSocket,纯 TCP Socket 连接,适用于内网/专网/局域网或需要极低延迟和带宽占用的 IoT 应用)。
一、通信总览
项目 | 说明 |
连接方式 | 双向长连接,基于 TCP 协议 |
传输方向 | 设备 ⇆ 云端(Server) |
通信模型 | 云端为 TCP Server,设备为 Client |
通信端口 | 自定义,如 9000 |
编码格式 | 自定义二进制协议 或 JSON 文本 |
保活机制 | 心跳包 + 超时断开机制 |
重连机制 | 设备端检测断线自动重连 |
二、协议结构设计(推荐二进制格式)
使用 定长头 + 变长体 的结构,效率高、易于解析。
-
消息结构格式
字段 | 长度(字节) | 说明 |
Magic Header | 2 | 固定为 0xAA55 标识起始位 |
Msg Type | 1 | 消息类型标识(如 0x01 状态上报) |
Device ID | 4 | 设备编号(uint32) |
Payload Len | 2 | 数据长度(N) |
Payload | N | 实际数据(JSON或二进制) |
CRC16 | 2 | 整体校验(可选) |
示例结构:
| AA 55 | 01 | 00 00 00 01 | 00 10 | {...JSON数据...} | CRC |
三、常见消息类型定义(MsgType)
类型名称 | 十六进制标识 | 方向 | 说明 |
心跳包 | 0x00 | 双向 | 保活,无实际数据 |
状态上报 | 0x01 | 设备 → 云 | 上报当前状态、版本、信号等 |
控制命令 | 0x02 | 云 → 设备 | 云端控制指令,如“开锁” |
命令应答 | 0x03 | 设备 → 云 | 回应控制命令处理结果 |
OTA 通知 | 0x04 | 云 → 设备 | 通知设备进行 OTA 升级 |
OTA 数据 | 0x05 | 云 → 设备 | OTA 固件分片传输 |
异常上报 | 0x06 | 设备 → 云 | 电量低、传感器异常等 |
四、Payload 示例(JSON方式)
状态上报(0x01
)
| AA 55 | 01 | 00 00 00 01 | 00 10 | {...JSON数据...} | CRC |
控制命令(0x02
)
{
"commandId": "cmd-123456",
"action": "unlock",
"params": {
"user": "admin"
}
}
命令应答(0x03
)
{
"commandId": "cmd-123456",
"status": "success",
"message": "Unlocked successfully"
}
五、心跳机制(0x00
)
-
心跳包 Payload 为空;
-
设备每
30s
向云端发送一次; -
云端如
60s
未收到心跳,则断开设备连接并标记为离线; -
云端也可主动发起心跳探测。
六、安全通信建议
项目 | 推荐方式 |
加密 | TLS over TCP(或 AES 对称加密) |
设备认证 | 第一次连接时发送设备编号 + token 校验 |
流量压缩 | 可选使用 zlib 等压缩 Payload 数据 |
CRC 校验 | 简单可用 CRC16,对二进制帧进行校验 |
七、设备重连机制
-
ESP32 检测 socket 断开后,间隔
5s
重连; -
支持指数回退算法,防止频繁请求;
-
云端应允许重复连接,处理异常断开场景。
八、云端服务器处理流程(Server 伪代码)
def handle_client(socket):
while True:
msg = recv_full_packet(socket)
if not validate_crc(msg):
continue
msg_type = msg[2]
device_id = extract_device_id(msg)
if msg_type == 0x00:
update_heartbeat(device_id)
elif msg_type == 0x01:
save_device_status(device_id, parse_payload(msg))
elif msg_type == 0x03:
log_command_response(device_id, parse_payload(msg))
...
总结优势(TCP 自定义协议)
优点 | 说明 |
轻量高效 | 相比 MQTT 更小开销,无需 broker |
低延迟 | 实时性更强,适用于控制类设备 |
可扩展性强 | 自定义 MsgType,协议灵活 |
更适用于专网/私有云环境 | 无需依赖 MQTT 中间件,方便局域部署 |
扩展阅读:
物联网低功耗保活协同优化方案:软硬件与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 设备接入与断线重连机制的项目模板 |