1. 温控屏网关协议
1.1. 1. 文档信息
- 协议版本:V1.1
- 温控屏做为网关, 称为服务端, MCU或其它设备通过WIFI或485同温控屏通信, 称为客户端
- 建议优先查看第6节整体交互时序图,了解概况
1.2. 2. 通讯方式
1.2.1. 2.1 485:
连接温控屏的485口进行通信,因为温控屏只有一个485口, 被占用后,此时温控屏只能用后壳的继电器接口, 使用水机功能 485通讯参数如下:
| 项目 | 参数值 |
|---|---|
| 传输模式 | 半双工 |
| 波特率 | 默认 9600bps |
| 数据格式 | 起始位 1 位,数据位 8 位 |
| 校验位 | 偶校验 (Even) |
| 停止位 | 1 位 |
1.2.2. 2.2 WIFI网络通信流程
采用 UDP 广播发现 + TCP 长连接 的机制。MCU 通过广播获取温控屏网关 IP 地址后,建立 TCP 链路进行数据交互 可以先看本节第5点交互时序图,了解大概流程
2.2.1. 设备发现阶段 (UDP Broadcast)
MCU 向局域网发送 UDP 广播报文,探测在线的温控屏设备
- 本地监听端口:
5567 - 目标端口:
43708 - 广播地址:
xxx.xxx.xxx.255(例如192.168.1.255) - 广播报文定义:
| 字节序号 | 数据 (Hex) | 说明 |
|---|---|---|
| Byte 0 | 0xFF |
帧头 |
| Byte 1 | 0xB0 |
功能码 (设备发现) |
| Byte 2-5 | 0x00, 0x00, 0x00, 0x00 |
预留/填充 |
| Byte 6 | 0xAF |
结束位/校验位 |
2.2.2. 温控屏网关响应阶段 (UDP Response)
温控屏网关收到广播后,向 MCU 回应自身的 IP 地址信息。
- 回应数据示例:
FF B0 FF FF 52 30 30 30 34 39 32 35 34 32 33 37 38 31 39 34 32 C0 A8 16 85 - 报文结构解析:
[!TIP] 解析说明:MCU 需从响应报文的最后4 个字节中提取网关的动态 IP 地址
| 字段 | 数据 (Hex) | 描述 |
|---|---|---|
| 固定头Byte 0-3 | 0xFF 0xB0 0xFF 0xFF |
识别网关响应标识 |
| 设备号Byte 4-19 | 0x52 0x30 0x30 0x30 0x34 0x39 0x32 0x35 0x34 0x32 0x33 0x37 0x38 0x31 0x39 0x34 |
唯一ID R000492542378194 |
| DHCP Byte 20 | 0x1 |
是否是动态IP |
| IP 地址Byte 21-24 | 0xC0 0xA8 0x16 0x85 |
对应 IP: 192.168.22.133 |
| 校验码Byte 25 | 0xxx ... |
校验码 |
2.2.3. 连接建立阶段 (TCP Connection)
MCU 获取 IP 地址后,作为 Client 端主动发起 TCP 连接
- 目标 IP:从步骤 2 中解析出的网关 IP
- 目标端口:
9999 - 后续动作:连接成功后,双方进入业务通信模式。
2.2.4. 业务通信 (Business Communication)
通信过程中, 由MCU定期发送心跳PING包, 如果网关在线, 会回应心跳PONG包
PING 包
| 字段 | 数据 (Hex) | 描述 |
|---|---|---|
| 固定头Byte 0-1 | 0x12 0x34 |
心跳标识 |
| 设备号Byte 2-17 | 0x52 0x30 0x30 0x30 0x34 0x39 0x32 0x35 0x34 0x32 0x33 0x37 0x38 0x31 0x39 0x34 |
唯一ID R000492542378194 |
| 地址Byte 18-25 | 0x0 0x0 ... |
保留位, 默认为0 |
| 校验码Byte 26 | 0xxx ... |
校验码 |
PONG包
| 字段 | 数据 (Hex) | 描述 |
|---|---|---|
| 固定头Byte 0-1 | 0x12 0x34 |
心跳标识 |
| 设备号Byte 2-17 | 0x52 0x30 0x30 0x30 0x34 0x39 0x32 0x35 0x34 0x32 0x33 0x37 0x38 0x31 0x39 0x34 |
唯一ID R000492542378194 |
| 地址Byte 18-25 | 0x0 0x0 ... |
保留位, 默认为0 |
| 校验码Byte 26 | 0xxx ... |
校验码 |
2.2.5. 交互时序图
sequenceDiagram
participant MCU as MCU (Client)
participant GW as 温控屏网关 (Server)
Note over MCU: 监听 UDP 5567
MCU->>GW: UDP 广播 (Port: 43708)
Note right of MCU: 发送 {0xFF, 0xB0...0xAF}
GW-->>MCU: UDP 响应 (包含网关 IP)
Note left of GW: 向UDP 5567端口,返回 {0xFF, 0xB0, 0xFF, 0xFF, IP...}
MCU->>GW: TCP 连接请求 (Port: 9999)
GW-->>MCU: TCP ACK (连接成功)
MCU->>GW: TCP 心跳包PING (Port: 9999)
GW-->>MCU: TCP ACK (心跳包Pong)
Note over MCU, GW: 开始正常业务通信
1.3. 3. 数据结构
1.3.1. 3.1 指令下发 (MCU -> 温控屏网关)
| 温控屏地址 | 功能码 | 功能参数 | 暖通设备数量 | 暖通设备地址 | 校验 (Checksum) |
|---|---|---|---|---|---|
| 1 byte | 1 byte | 1 byte | 1 byte | 数量 × 2 byte | 1 byte |
1.3.2. 3.2 数据反馈 (温控屏网关 -> MCU)
| 温控屏地址 | 功能码 | 功能参数 | 暖通设备数量 | 暖通设备地址 + 状态值 | 校验 (Checksum) |
|---|---|---|---|---|---|
| 1 byte | 1 byte | 1 byte | 1 byte | 数量 × 10 byte | 1 byte |
温控屏地址:本温控屏自身485地址, 默认为0x01
功能码:查询、控制指令
功能参数:功能码的参数值
暖通设备地址定义: 地址长度:由2个字节组成 空调地址:由(外机地址,内机地址)组成 。01 ???? 新风地址:第一个字节固定为
0x41(65),第二个字节为新风 485 地址 地暖地址:第一个字节固定为0x42(66),第二个字节为地暖 485 地址暖通设备状态值: 长度:由8个字节组成 房间:默认为00
| 开关 | 温度 | 模式 | 风速 | 房间 | 校验 | (故障) | 风向 |
|---|---|---|---|---|---|---|---|
| 1 byte | 1 byte | 1 byte | 1 byte | 1 byte | 1 byte | 1 byte | 1 byte |
- 校验计算:从“温控屏地址”到“校验”前所有数据字节的和,取低 8 位(溢出不计)
1.3.3. 3.3 状态主动反馈 (温控屏网关 -> MCU)
当温控屏网关中设备的状态被改变了, 会主动向MCU发送状态, 数据格式同3.2节, 数据中暖通设备数量是1
1.4. 4. 查询指令集
| 功能码 | 功能参数 | 相应含义 |
|---|---|---|
| 0x50-查询空调状态 | 0xFF | MCU主动查询 |
| 0x51-查询新风状态 | 0xFF | MCU主动查询 |
| 0x52-查询地暖状态 | 0xFF | MCU主动查询 |
| 0x10-查询温控屏网关温度和湿度 | 0xFF | MCU主动查询, 禁止频繁查询, 会有总线冲突 |
- 查询空调状态:
| 温控屏地址 | 功能码 | 功能参数 | 暖通设备数量 | 暖通设备地址 | 校验 (Checksum) |
|---|---|---|---|---|---|
| 1 byte | 0X50 | 0XFF | 0XFF | 0XFF 0XFF | 1 byte |
- 查询新风状态:
| 温控屏地址 | 功能码 | 功能参数 | 暖通设备数量 | 暖通设备地址 | 校验 (Checksum) |
|---|---|---|---|---|---|
| 1 byte | 0X51 | 0XFF | 0XFF | 0XFF 0XFF | 1 byte |
- 查询地暖状态:
| 温控屏地址 | 功能码 | 功能参数 | 暖通设备数量 | 暖通设备地址 | 校验 (Checksum) |
|---|---|---|---|---|---|
| 1 byte | 0X52 | 0XFF | 0XFF | 0XFF 0XFF | 1 byte |
- 查询温控屏温度和湿度:
指令
| 温控屏地址 | 功能码 | 功能参数 | 校验 (Checksum) |
|---|---|---|---|
| 1 byte | 0X10 | 0XFF | 1 byte |
回应
| 温控屏地址 | 功能码 | 功能参数 | 温度 | 湿度 | 校验 (Checksum) |
|---|---|---|---|---|---|
| 1 byte | 0X10 | 0XFF | 2字节 | 2字节 | 1 byte |
[!TIP] 温度,湿度实际值(一位小数) = (温度|湿度) / 10
1.5. 5. 控制指令集
1.5.1. 5.1 空调设备控制
| 功能码 | 功能参数 | 相应含义 |
|---|---|---|
| 0x31-控制开关 | 0x01 | 开机 |
| 0x00 | 关机 | |
| 0x32-控制温度 | 0x10~0x1E | 温度16~30℃ |
| 0x33-控制模式 | 0x01 | 制冷 |
| 0x02 | 除湿 | |
| 0x04 | 送风 | |
| 0x08 | 制热 | |
| 0x34-控制风速 | 0x00 | 自动 |
| 0x01 | 高速 | |
| 0x02 | 中速 | |
| 0x04 | 低速 | |
| 0x35-控制风向 | 前后左右风向, 1个字节, 按位控制 | 见下表, 风向参数 |
风向参数
| 风向类型 | Bit范围 | 规则说明 |
|---|---|---|
| 前后风向 | Bit7~Bit4(高四位) | 0:扫风 1-6:位置1-位置6 F:保持当前不变 |
| 左右风向 | Bit3~Bit0(低四位) | 0:扫风 1-6:位置1-位置6 F:保持当前不变 |
1.5.2. 5.2 新风设备控制
| 功能码 | 功能参数 | 相应含义 |
|---|---|---|
| 0x71-控制开关 | 0x01 | 开机 |
| 0x00 | 关机 | |
| 0x73-控制模式 | 0x01 | 换气 |
| 0x02 | 排风 | |
| 0x74-控制风速 | 0x00 | 自动 |
| 0x01 | 高速 | |
| 0x02 | 中速 | |
| 0x04 | 低速 |
1.5.3. 5.3 地暖设备控制
| 功能码 | 功能参数 | 相应含义 |
|---|---|---|
| 0x81-控制开关 | 0x01 | 开机 |
| 0x00 | 关机 | |
| 0x82-控制温度 | 0x5~0x5A | 温度5~90℃ |
1.5.4. 6. 交互时序图
sequenceDiagram
participant MCU as MCU (Client)
participant GW as 温控屏网关 (Server)
MCU->>GW: 0x50-查询空调状态, 获取到所有空调信息
GW-->>MCU: 发送 所有空调信息
MCU->>GW: 发送控制指令
GW-->>MCU: 回应空调状态变化
1.6. 7. 指令发送示例
1.6.1. 7.1 查询状态示例
- 查询地址为01的温控屏网关下全部空调参数:
发送:01 50 FF FF FF FF 4D 接收:01 50 FF 06 01 01 01 14 02 03 20 00 00 00 (室内机01-01的10字节状态) 01 02 00 14 02 01 23 00 00 00 (室内机01-02的10字节状态) 01 03 01 14 02 03 24 00 00 00 (室内机01-03的10字节状态) 02 00 01 14 03 01 20 00 00 00 (室内机02-00的10字节状态) 02 01 00 14 02 03 20 00 00 00 (室内机02-01的10字节状态) 02 02 00 14 03 01 20 00 00 00 (室内机02-02的10字节状态) 3C
1.6.2. 7.2 控制指令示例
空调地址1-3开机:
发送:01 31 01 01 01 03 38 接收:01 31 01 01 01 03 38空调地址1-3温度设定为26℃:
发送:01 32 1A 01 01 03 52 接收:01 32 1A 01 01 03 52