串口协议

更新时间:2025-02-28 02:56:01下载pdf

涂鸦 PLC 串口通信模组(以下简称模组),适用于采用 MCU + PLC 模组方案的产品。这类产品通常由 MCU 负责处理产品本身的逻辑,搭配 PLC 模组实现通信,MCU 与 模组之间通过 UART 串口通信。模组的主要功能有:

  • PLC 网络管理:例如设备配网、离网、本地群组和本地场景。

  • PLC 网关通信:设备与网关通信,从而实现设备与涂鸦云的数据交互。

  • PLC 设备通信:子设备与子设备之间进行通信。

  • MCU OTA:可通过 PLC 模组接收 MCU 的 OTA 文件,完成 MCU 端的 OTA 升级。

串口协议不断地完善迭代,例如新增命令字、优化命令交互时序等。本协议尽量做到向前兼容,但是无法保障部分低版本固件或非长期维护固件的协议一致性。

硬件连接

PLC 模组与 MCU 硬件连接如下图所示。

  • 只需要连接 UART TX 和 UART RX 两个管脚。
串口协议

串口通信参数

  • 波特率:9600/115200 bps
  • 数据位:8
  • 奇偶校验:无
  • 停止位:1
  • 数据流控:无
  • 供电电压:PLC 模组和 MCU 主控均采用 DC 3.3V

下表列出了部分 PLC 模组对应的串口管脚。固件不同,可能会有所差异,请以实际为准。

模组型号 模组 TX 模组 RX
S130N-ISI PB7 PB1

波特率自适应

PLC 模组支持两种串口波特率,分别是 9600 bps 和 115200 bps,MCU 可以采用这两种波特率中的任意一种。模组有波特率自适应机制,即在首次与 MCU 通讯时,模组会交替使用 9600 bps 和 115200 bps 波特率发送 查询产品信息 命令,MCU 在其中一个波特率下回复命令后,模组将该波特率保存,并持续生效。

  • PLC 模组固件 Key 和版本号不同,波特率自适应流程可能会有差异。
  • 波特率自适应流程,只在模组出厂模式下与 MCU 首次通信时进行,目前机制是波特率确认后不可修改。

串口帧格式说明

串口协议
字段 中文 说明
Frame Head 帧头 固定为 0x55AA
Version 版本号 串口通信协议版本,升级扩展用,本协议版本号为 0x02
SEQ 序列号 传输数据序列号(sequence number),0 ~ 0xfff0 循环,下文用 xx xx 表示
Command ID 命令字 命令 ID,持续更新
Data Length 数据长度 传输的有效数据长度
Data 数据 传输的有效数据
Checksum 校验和 用于数据校验,从帧头开始按字节求和得出的结果对 256 求余,下文用xx表示
  • PLC 数据单帧长度限制,发送和接收 Data 最大支持 384 字节。
  • 超过 1 字节数据,均采用大端格式。

命令字索引(Command ID)

命令字 发送方 说明
0x01 Z 查询产品信息
0x02 Z 模组网络状态通知
0x03 M 模组配网/复位
0x00 Z App 端解绑并清除数据通知
0x20 M 查询模组网络状态
0x25 M 查询网关联网状态
0x04 Z DP 消息接收
0x2A Z DP 消息接收(群控)
0x06 M DP 主动上报(可触发联动)
0x2C M DP 主动上报(不触发联动)
0x28 Z DP 查询
0x27 M 广播消息发送
0x43 M 私有命令组播发送
0x41 Z 场景配置(场景控制类设备)
0x0A M 场景触发(场景控制类设备)
0x0B Z MCU 固件版本查询
0x0C Z OTA 升级通知
0x0D M OTA 固件请求
0x0E M OTA 升级结果上报
0x24 M 时间同步
  • M:发送方是 MCU,表示该命令是由 MCU 发送给 PLC 模组。
  • Z:发送方是 PLC 模组,表示该命令是由 PLC 模组发送给 MCU。

配置类命令

查询产品信息(0x01)

PLC 模组每次上电后都会主动向 MCU 发送此命令,MCU 需在应答此命令后才能主动发送其他命令给模组。产品信息 包括产品的 PID 和 MCU 固件版本号等。同时,此命令也有 PLC 模组在出厂状态下,首次与 MCU 通信时用于确认 MCU 端的波特率的作用。

模组发送

字段 字节数 说明
帧头 2 0x55AA
版本 1 0x02
序列号 2 xx xx
命令字 1 0x01
数据长度 2 0x0000
数据 0
校验和 1 xx

示例:55 AA 02 xx xx 01 00 00 xx

MCU 应答

字段 字节数 说明
帧头 2 0x55AA
版本 1 0x02
序列号 2 xx xx
命令字 1 0x01
数据长度 2 N
数据 N 产品信息,示例 {"p":"AIp08kLIAIp08kLI"}
校验和 1 xx

产品信息 是 Json 格式的字符串,包含大括号 {},大括号内部是 "key":"value" 格式,下面是已支持的 keyvalue

  • p:必选,对应该产品在涂鸦开发者平台的 PID,例如上例中的 AIp08kLIAIp08kLI

示例:55 AA 02 xx xx 01 00 18 7b2270223a2241497030386b4c4941497030386b4c49227d xx

本例中,产品信息 部分为:{"p":"AIp08kLIAIp08kLI"}

模组网络状态通知(0x02)

网络状态是指 PLC 本地网络状态(非互联网连接状态),当模组加入网关后即为 已入网。网络状态不会因为网关断电、父节点丢失等原因变更。当模组的网络状态发生变化时,会主动通知 MCU。

模组发送

字段 字节数 说明
帧头 2 0x55AA
版本 1 0x02
序列号 2 xx xx
命令字 1 0x02
数据长度 2 0x0001
数据 1 模组网络状态
校验和 1 xx

模组网络状态:

  • 0x00:未入网,例如设备首次上电、设备配网失败、App 移除等。
  • 0x01:已入网,表示设备已加入一个 PLC 网络。
  • 0x02:网络异常。
  • 0x03:设备正在配网中。

示例:55 AA 02 xx xx 02 00 01 01 xx 模组已入网

MCU 应答

字段 字节数 说明
帧头 2 0x55AA
版本 1 0x02
序列号 2 N
命令字 1 0x02
数据长度 2 0x0000
数据 0
校验和 1 xx

示例:55 AA 02 xx xx 02 00 00 xx

解绑并清除数据通知(0x00)

在 App 端将设备 解绑并清除数据 时,模组以此命令通知 MCU。MCU 收到该通知后可清除本地数据,即恢复出厂设置。

模组发送

字段 字节数 说明
帧头 2 0x55AA
版本 1 0x02
序列号 2 xx xx
命令字 1 0x00
数据长度 2 0x0001
数据 1 0x01 默认值
校验和 1 xx

数据字段目前默认是 0x01,保留该字段将来用作拓展。

示例: 55 AA 02 xx xx 00 00 01 01 xx

MCU 应答

字段 字节数 说明
帧头 2 0x55AA
版本 1 0x02
序列号 2 N
命令字 1 0x00
数据长度 2 0x0001
数据 1 0x01
校验和 1 xx

示例: 55 AA 02 xx xx 00 00 01 01 xx

模组配网/复位(0x03)

MCU 可以发送此命令让模组进入配网或者软件复位。

MCU 发送

字段 字节数 说明
帧头 2 0x55AA
版本 1 0x02
序列号 2 xx xx
命令字 1 0x03
数据长度 2 0x0001
数据 1 0x00:模组复位重启
0x01:模组配网(先离网,再配网)
校验和 1 xx

示例:55 AA 02 xx xx 03 00 01 01 xx 模组配网

模组应答

字段 字节数 说明
帧头 2 0x55AA
版本 1 0x02
序列号 2 xx xx
命令字 1 0x03
数据长度 2 0x0000
数据 1
校验和 1 xx

示例:55 AA 02 xx xx 03 00 00 xx

查询模组网络状态(0x20)

模组网络状态发生变化时,会通过 模组网络状态通知 主动通知 MCU,MCU 也可以主动查询模组当前的网络状态。

MCU 发送

字段 字节数 说明
帧头 2 0x55AA
版本 1 0x02
序列号 2 xx xx
命令字 1 0x20
数据长度 2 0x0000
数据 0
校验和 1 xx

示例:55 AA 02 xx xx 20 00 00 xx

模组应答

字段 字节数 说明
帧头 2 0x55AA
版本 1 0x02
序列号 2 xx xx
命令字 1 0x20
数据长度 2 0x0001
数据 1 模组网络状态
校验和 1 xx

关于 模组网络状态,请参考 模组网络状态通知 命令。

示例:55 AA 02 xx xx 20 00 01 01 xx 模组当前状态为:已入网

查询网关联网状态 (0x25)

通过此命令可查询 PLC 网关是否连接互联网。若网关回复互联网在线,可以认为本产品也是互联网在线的,MCU 可以据此做一些状态显示。

MCU 发送

字段 字节数 说明
帧头 2 0x55AA
版本 1 0x02
序列号 2 xx xx
命令字 1 0x25
数据长度 2 0x0000
数据 0
校验和 1 xx

示例:55 AA 02 xx xx 25 00 00 xx

模组应答

字段 字节数 说明
帧头 2 0x55AA
版本 1 0x02
序列号 2 xx xx
命令字 1 0x25
数据长度 2 0x0001
数据 1 0x00:网关互联网离线
0x01:网关互联网在线
0x02:网关回复超时
校验和 1 xx

示例:55 AA 02 xx xx 25 00 01 01 xx 网关当前互联网在线

应用数据收发类命令

DP 消息接收(0x04)

当模组收到 DP 消息时通过此命令通知 MCU,DP 消息通常来自 PLC 网关或其他 PLC 子设备。例如,通过涂鸦智能 App 下发一个 DP 消息给设备时,该消息会先到达网关,然后由网关通过 PLC 网络发送给设备。MCU 在收到此命令后,需要进行 DP 消息应答 (只应答对应的 DP 消息) 这样涂鸦智能 App 上该设备的状态才会相应地更新。

模组发送

字段 字节数 说明
帧头 2 0x55AA
版本 1 0x02
序列号 2 xx xx
命令字 1 0x04
数据长度 2 N
数据 N DP 消息格式
校验和 1 xx

DP 消息格式:

串口协议

接收的消息中,可能会同时包含多个 DP 数据,每一个 DP 数据的格式如下:

  • DP ID:对应该产品 ( PID ) 在涂鸦开发者平台的 DP ID。
  • Type:对应该 DPID 的数据类型,部分数据类型其 Length 是固定的。
  • Length:Value 部分的数据长度。
  • Value:DP 有效数据。

Type:

Type 对应的 DP 类型 数据长度 说明
0x00 Raw 自定义 Raw 数据,Hex 格式,可自定义每个字节的含义
0x01 Bool 1 布尔型,0x00、0x01
0x02 Value 4 数值型,例如 1,23,104
0x03 String 自定义 字符串,可自由定义含义
0x04 Enum 1 枚举型,范围 0-255
0x05 Bitmap 1/2/4 Bitmap 型,主要用于错误码上报等

示例:55 AA 02 xx xx 04 00 05 03 01 00 01 01 xx 模组收到 DP 消息,包含 1 个 DP 数据,如下所示:

  • DP ID:03
  • Type:01
  • Length:00 01
  • Value:01
  • DP 消息中可能会包含多个 DP 数据结构,比如 App 同时下发了多个 DP 给设备。
  • 当 DP 消息是 Raw 类型时,只会有 1 个 DP 数据结构,即 Raw 类型的 DP 不会多个同时下发,也不会和其他类型的 DP 混合下发。

MCU 回复

字段 字节数 说明
帧头 2 0x55AA
版本 1 0x02
序列号 2 xx xx
命令字 1 0x04
数据长度 2 0x0000
数据 0
校验和 1 xx

示例:55 AA 02 xx xx 04 00 00 xx

DP 消息接收-群控(0x2A)

当模组收到群控(包括组播、广播)DP 消息后,采用此命令通知 MCU。如果使用的是涂鸦网关,那么 MCU 在收到此消息后,不需要进行 DP 消息应答,涂鸦网关在发送群控消息后,会主动读取 DP。

模组发送

字段 字节数 说明
帧头 2 0x55AA
版本 1 0x02
序列号 2 xx xx
命令字 1 0x2A
数据长度 2 N
数据 N DP 消息格式
校验和 1 xx

示例:55 AA 02 xx xx 2A 00 04 01 01 00 01 01 xx 表示模组收到了一条群控 DP 消息

  • DP ID:01
  • Type:00
  • Length:01
  • Value:01

MCU 应答

字段 字节数 说明
帧头 2 0x55AA
版本 1 0x02
序列号 2 xx xx
命令字 1 0x2A
数据长度 2 0x0000
数据 0
校验和 1 xx

示例:55 AA 02 xx xx 2A 00 00 xx

DP 消息上报-可触发联动(0x06)

当 MCU 检测到本地状态有变化,例如用户手动按压了一个开关,可通过此命令主动上报发生了变化的 DP,以便将本地状态同步到云端。模组收到此命令后会发送给网关,并且关心网关的响应,根据网关响应情况应答 MCU。通过本命令上报 DP 数据,能够触发联动,包含本地联动和云端联动。

  • 如果网关在等待时间内确认,模组应答 MCU 上报成功。
  • 如果网关未在等待时间内确认,模组应答 MCU 上报失败。
  • 如果模组未入网,模组立即应答 MCU 上报失败。
  • MCU 可根据模组回复,判断模组与网关的链路是否通畅。
    注:明确需要触发联动的数据,请用0x06命令上报,建议MCU不要频繁上报,只在需要触发联动时,上报。

MCU 发送

字段 字节数 说明
帧头 2 0x55AA
版本 1 0x02
序列号 2 xx xx
命令字 1 0x06
数据长度 2 N
数据 N DP 消息格式
校验和 1 xx

示例:55 AA 02 xx xx 06 00 05 03 01 00 01 01 xx

本例展示 MCU 主动上报一个 DP 数据,且该 DP 上报可用于触发联动。

  • DP ID:03
  • DP Type:01
  • DP Length:00 01
  • DP Value:01

模组应答

字段 字节数 说明
帧头 2 0x55AA
版本 1 0x02
序列号 2 xx xx
命令字 1 0x06
数据长度 2 0x0001
数据 1 0x00:DP 上报失败
0x01:DP 上报成功
校验和 1 xx

示例: 55 AA 02 xx xx 06 00 01 01 xx DP 消息上报成功

  • 上报成功:模组将 DP 消息发送给了网关,并收到了网关的确认。
  • 上报失败:模组未加入网关、网关确认超时等。
  • 数据 部分最多只能包含一个 Raw 类型的 DP,且不能与其他类型的 DP 合并上报。

DP 消息上报-不触发联动(0x2C)

本命令是 DP 消息上报(0x06) 的拓展命令,目的是同步本地状态到云端,但是不希望直接触发联动。例如,开关和灯具配置了联动关系:当开关打开时,灯具打开,当开关关闭时,灯具关闭。那么当开关断电后再上电时,它的状态应该同步到云端,但是不希望去触发灯具的动作。为了将这种单纯的状态同步(不希望触发联动)与真实的状态变化后的主动上报(希望触发联动)区分开,特增加本命令。

  • 设备配网成功或设备上电后,建议通过本命令上报 DP 消息,以便同步状态。注意,为了避免大批量的设备同时上报造成网络拥堵,设备应该设定随机 5 ~15 秒延时上报。
  • 您需要确认所采用的模组和固件是否支持本命令。
    注:普通数据,请用 0x2c 上报,协议栈会根据上报数据做一些策略,保证网络的畅通

MCU 发送

字段 字节数 说明
帧头 2 0x55AA
版本 1 0x02
序列号 2 xx xx
命令字 1 0x2C
数据长度 2 N
数据 N DP 消息格式
校验和 1 xx

示例:55 AA 02 xx xx 2C 00 05 03 01 00 01 01 xx

本例展示 MCU 主动上报一个 DP 数据, 目的只是为了同步状态到云端,不用于触发联动。

  • DP ID:03
  • DP Type:01
  • DP Length:00 01
  • DP Value:01

模组应答

字段 字节数 说明
帧头 2 0x55AA
版本 1 0x02
序列号 2 xx xx
命令字 1 0x2C
数据长度 2 0x0001
数据 1 0x00:DP 上报失败
0x01:DP 上报成功
校验和 1 xx

示例: 55 AA 02 xx xx 2C 00 01 01 xx DP 消息上报成功

  • 上报成功:模组将 DP 消息发送给了网关,并收到了网关的确认。
  • 上报失败:模组未加入网关、网关确认超时等。
  • 数据 部分最多只能包含一个 Raw 类型的 DP,且不能与其他类型的 DP 合并上报。

DP 查询 (0x28)

本指令用于网关主动查询设备的 DP,MCU 收到本命令后,先应答本命令,后上报对应的 DP。这种情况通常发生在网关断电后再上电、网关与某个子设备长时间断连后恢复等。

模组发送

字段 字节数 说明
帧头 2 0x55AA
版本 1 0x02
序列号 2 xx xx
命令字 1 0x28
数据长度 2 N
数据 N DP Nums(1Byte) + DP List
校验和 1 xx
  • 例如 0x02 0x03 0x04 表示网关要查询本设备的 2 个 DP,DP ID 为 0x030x04 的两个 DP。

示例 :55 AA 02 xx xx 28 00 03 02 03 04 xx 网关要查询本设备 DP3 和 DP4。

MCU 应答

字段 字节数 说明
帧头 2 0x55AA
版本 1 0x02
序列号 2 xx xx
命令字 1 0x28
数据长度 2 N
数据 0 DP nums(1Byte) + DP Value list
校验和 1 xx
  • DP nums:02
  • DP ID 为 03 和 04,均为 bool 型数据,值均为 1。
  • Dp Value list 为:03 01 00 01 01 04 01 00 01 01

示例:`55 aa 02 xx xx 28 00 0b 02 03 01 00 01 01 04 01 00 01 01 xx

发送广播 DP 消息(0x27)

本命令用于发送全网通知的 DP 广播消息,可以让全网络中的设备接收到。如果存在低功耗设备,该设备需要处于周期唤醒的状态,且唤醒周期需要小于广播周期。否则,在唤醒前,下一条广播数据就会将之前的广播数据覆盖。

广播消息之间需要有一定的时间间隔,间隔由网络的规模决定,否则容易造成网络拥堵。

MCU 发送

字段 字节数 说明
帧头 2 0x55AA
版本 1 0x02
序列号 2 xx xx
命令字 1 0x27
数据长度 2 N
数据 N DP 消息格式
校验和 1 xx

示例:55 AA 02 xx xx 27 08 05 02 00 04 00 00 00 1E xx 发送一条广播消息,消息内容如下:

  • DP ID:05
  • DP Type:02
  • DP Length:00 04
  • DP Value:00 00 00 1E

模组应答

字段 字节数 说明
帧头 2 0x55AA
版本 1 0x02
序列号 2 xx xx
命令字 1 0x27
数据长度 2 0x0001
数据 1 0x00:发送失败
0x01:发送成功
校验和 1 xx

示例:55 AA 02 xx xx 27 00 01 01 xx 表示广播消息发送成功。

发送群组 DP 消息(0x43)

以组播方式向群组发送 DP 消息,控制那些支持涂鸦 DP 的设备。这里发送的 DP 消息格式是被控设备的 DP 格式,包含 DPID + DP Type + DP Length + DP Value,该命令中 Group ID 是通过 其他命令(还未定义)获取到的。遥控器品类才需要用到。

MCU 发送

字段 字节数 说明
帧头 2 0x55AA
版本 1 0x02
序列号 2 xx xx
命令字 1 0x43
数据长度 2 N
数据 N DP 消息格式
校验和 1 xx

示例:55 AA 02 xx xx 43 00 07 2A 08 01 01 00 01 01 xx 以组播方式发送一条 DP 消息,内容如下:

  • Group ID:0x2A08
  • DP ID:01
  • DP Type:01
  • DP Length:00 01
  • DP Value:01

模组响应

字段 字节数 说明
帧头 2 0x55AA
版本 1 0x02
序列号 2 xx xx
命令字 1 0x43
数据长度 2 0x0001
数据 1 0x00:发送失败
0x01:发送成功
校验和 1 xx

示例:55 AA 02 xx xx 43 00 01 01 xx 表示 DP 组播发送成功。

场景类命令

场景有时候也称作联动,即当满足某个条件时,执行某个动作。条件可以是时间、天气、某个设备的状态等,动作可以是对另一些设备执行控制命令。例如,温度传感器检测到温度超过 30℃ 时,打开空调并设置目标温度为 25℃。

有一类设备称为场景控制器(场景开关、手持遥控等),它们的作用是充当场景中的条件设备。该类设备通常配备多个按键,每个按键都可以用来触发不同的场景。例如,按键 1 触发灯具全关,按键 2 触发灯具全开。

目前涂鸦 PLC 支持的场景有 标准场景联动场景,不同的创建方式决定了创建出来的场景的类型。

标准场景

标准场景:标准场景只在创建时依赖网关(需要通过网关下发相关配置信息),而以后的场景触发则不依赖网关,即使网关断电也不影响标准场景触发,场景控制器是直接发送控制命令给执行设备的。

标准场景的创建需要满足以下条件:

  • 创建入口:需要从场景控制器设备的 App 面板进入,选定某个按键后进行场景创建。
  • 执行设备:执行设备是和场景控制器同一个网关下的 PLC 设备,可以添加多个执行设备,但是不能有群组。

标准场景的创建与触发,如下所示:

串口协议
  • 标准场景配置(Scene config):在 App 上创建标准场景后,App 会通过网关向场景控制器发送按键号(Key ID)和场景号 (Scene ID)。相同的场景号也会发送给被控设备,同时会包含被控设备要执行的动作。

  • 标准场景触发(Scene recall):操作场景控制器按键,场景控制器通过默认群组0x0000,广播场景号 (Scene ID),被控设备收到该消息后,通过过滤场景号 (Scene ID),进行匹配,如果匹配上,进入该场景号 (Scene ID) 对应的状态;匹配不上,不做处理。

联动场景

联动场景:是指通过网关或云端作为中转,触发设备将状态报告给网关,网关检查该联动关系是否已托管在本地。如果已托管在本地,则可以称该场景为 网关联动,若未托管在本地,则称为 云端联动

  • 网关联动:由 PLC 网关保存着联动关系,触发设备将状态报告给网关,网关根据本地保存的联动关系去控制执行设备。例如,上面举例的温度传感器和空调,当这两个设备都是同一个网关下的 PLC 设备时,通常采用网关联动。
  • 云端联动:由云端保存着联动关系,触发设备状态报告给网关后,网关报告给云端,云端根据联动关系去控制执行设备。例如,一个 PLC 设备作为触发条件,Wi-Fi 设备作为执行设备时,通常采用云端联动。

当创建的场景是联动场景时,开发者无需关心它是网关联动还是云端联动,这是由涂鸦后台根据用户创建时选择的不同设备类型决定的。

目前,场景类命令只开放给场景控制器类设备使用,且需要特定的模组固件,用户创建场景的方式不同,最终会生成不同的场景类型。

场景配置-场景控制器设备(0x41)

模组发送

字段 字节数 说明
帧头 2 0x55AA
版本 1 0x02
序列号 2 xx xx
命令字 1 0x41
数据长度 2 N
数据 2 Key ID(1 字节) + Scene ID(1 字节)
校验和 1 xx

注:通常设备通过 dp17 场景号 (Scene ID)

示例:55 AA 02 xx xx 41 00 02 01 02 xx 表示收到来自网关的场景配置命令:

  • Key ID:01
  • Scene ID:0x02

MCU 应答

字段 字节数 说明
帧头 2 0x55AA
版本 1 0x02
序列号 2 xx xx
命令字 1 0x41
数据长度 2 0x0001
数据 1 0x00:失败
0x01:成功
校验和 1 xx

示例:55 AA 02 xx xx 41 00 01 01 xx

场景触发-场景控制器设备(0x0A)

触发标准场景和云端场景。云端场景是指在涂鸦 App 上配置的设备间联动(配置入口不在场景控制器设备的面板中),本设备作为联动触发设备,当检测到按键动作时,发送标准场景触发命令(Recall scene,通过默认群组 0x0000,广播场景号 Scene ID),同时向网关上报所要执行通道对应的 dpid(这个 dpid 是产品创建时,前台对应每个通道的 dpid,并不是通过 0x41 下发的场景号 Scene ID),触发云端联动。若未配置标准场景,则本命令仅用于触发云端联动。

MCU 发送

字段 字节数 说明
帧头 2 0x55AA
版本 1 0x02
序列号 2 xx xx
命令字 1 0x0A
数据长度 2 0x0002
数据 2 按键 ID + 场景 dpid
校验和 1 xx

场景 dpid 为产品创建时,按键通道对应的场景 DP。

示例:55 AA 02 xx xx 0A 00 02 01 scenedpid xx 触发场景,Key ID 为 1

模组应答

字段 字节数 说明
帧头 2 0x55AA
版本 1 0x02
序列号 2 xx xx
命令字 1 0x41
数据长度 2 0x0001
数据 1 0x00:失败
0x01:成功
校验和 1 xx

示例:55 AA 02 xx xx 0A 00 01 01 xx 触发成功,云端联动和标准场景,任意一个只要模组发送成功即认为是触发成功。

MCU OTA 类命令

支持通过模组进行 MCU OTA 升级,通常的流程如下:

  1. 网关通过 MCU 固件版本查询 命令获取到 MCU 当前的固件版本号,并上报给涂鸦云端。
  2. 涂鸦云端检测到该 PID (或该设备 ID) 配置了 MCU OTA 升级,且设备当前的 MCU 固件版本号符合升级条件,则通知设备进行 MCU OTA。
  3. 此通知到达模组后,模组会以 OTA 升级通知 命令通知 MCU。
  4. MCU 可以开始进行 OTA 文件请求,待整个文件请求完毕后,开始内部的升级操作。
  5. 升级完成后,上报 OTA 结果,并上报新的 MCU 固件版本号,即 MCU 固件版本查询 中的 MCU 应答帧格式。

MCU 固件版本查询(0x0B)

同步 MCU 当前的固件版本号给涂鸦云端,用于展示或者 OTA 升级的判断。若产品需要 MCU OTA 升级,则必须支持本命令。该命令实际有两个作用:

  • 网关查询设备 MCU 版本号:模组收到来自网关的查询命令后通知给 MCU,MCU 需要进行应答。
  • 设备主动上报 MCU 版本号:例如配网成功、OTA 成功,MCU 主动发送应答帧格式给模组,模组收到后会上报给网关。

模组发送

字段 字节数 说明
帧头 2 0x55AA
版本 1 0x02
序列号 2 xx xx
命令字 1 0x0B
数据长度 2 0x0000
数据 0
校验和 1 xx

示例:55 AA 02 xx xx 0B 00 00 xx 查询 MCU 的当前版本号。

MCU 应答

字段 字节数 说明
帧头 2 0x55AA
版本 1 0x02
序列号 2 xx xx
命令字 1 0x0B
数据长度 2 3
数据 3 MCU 升级通道(1 字节)+ 固件版本号(2 字节)
校验和 1 xx

MCU 升级通道,用户在开发者平台前台上传固件时,需要选择 MCU 的 OTA 升级通道,根据平台分配的值填写;MCU 固件版本号,2 字节,16 个 Bits 按二进制 xxxx.yyyy.zzzzzzzz 格式,例如 0x1222 二进制为 0001 0002 00100010,则表示版本号为 1.2.34,由于字节限制,最大版本号为 15.15.255。

示例 1:55 AA 02 xx xx 0B 00 03 09 12 22 xx 表示当前版本号为 0x1222,二进制为 0001 0002 00100010,即 1.2.34。

示例 2:55 AA 02 xx xx 0B 00 06 09 12 22 0a 12 23 xx

表示升级通道 9,当前版本号为 0x1222,二进制为 0001 0002 00100010,即 1.2.34

  • 该命令通常是用于涂鸦云端获取设备的 MCU 版本号信息,用作是否推送 OTA 的判断。
  • MCU 可以在未收到模组查询命令的情况下,主动发送 MCU 应答帧,模组收到后也会上报给网关,从而实现设备主动上报 MCU 版本号。

OTA 升级通知(0x0C)

在涂鸦开发者平台配置了设备 MCU 升级,并开启了推送后,如果设备满足升级条件,则会在客户端 App 上进行提示,或者无提示自动升级。该命令由网关发送给模组,模组收到后通知 MCU 准备 OTA 升级。

模组发送

字段 字节数 说明
帧头 2 0x55AA
版本 1 0x02
序列号 2 xx xx
命令字 1 0x0C
数据长度 2 0x000b
数据 11 升级通道(1 字节)+ 新固件版本号(2 字节)+ 固件大小 bytes(4 字节)+ 固件校验和(4 字节)
校验和 1 xx
  • 升级通道(1 字节):用户在涂鸦开发者平台前台上传固件时,需要选择 MCU 的 OTA 升级通道,根据平台分配的值填写;
  • 新固件版本号(2 字节):例如 0x1222,表示 1.2.34。
  • 固件大小(4 字节):单位为字节数。
  • 固件校验和(4 字节):从固件第一个字节开始对整个固件的校验和。MCU 在接收完整个升级固件后,应该计算校验和并与本字段进行对比。如果不一致,说明传输过程中可能有问题,可以报升级失败。

示例:`0x55 AA 02 xx xx 0C 00 0a 09 12 22 00 00 78 00 30 31 32 33 xx OTA 升级通知,内容为:

  • 升级通道:9
  • 新固件版本号:0x1222,表示 1.2.34
  • 固件大小:0x00007800,即 30 KB
  • 固件校验和:0x30313233

MCU 应答

字段 字节数 说明
帧头 2 0x55AA
版本 1 0x02
序列号 2 xx xx
命令字 1 0x0C
数据长度 2 0x0001
数据 1 0x00 默认值
校验和 1 xx

示例:55 AA 02 xx xx 0C 00 01 00 xx

目前,模组端没有处理 MCU 对 0x0C 命令的应答帧。如果 MCU 检查到数据有误,可以重新发起该数据包的请求。

OTA 文件请求(0x0D)

设备在收到来自网关的 OTA 升级通知 后,可以开始下载 OTA 文件。下载过程是由设备端控制的,即设备发送文件数据请求命令,包含数据偏移量和数据包大小。网关收到后根据设备端的请求信息,将 OTA 文件中对应位置和长度的数据包返回给设备。该命令由 MCU 端发起,模组收到后发送给网关。

MCU 发送

字段 字节数 说明
帧头 2 0x55AA
版本 1 0x02
序列号 2 xx xx
命令字 1 0x0D
数据长度 2 0x0009
数据 9 升级通道(1 字节) + 新固件版本号(2 字节)+ 数据包偏移量(4 字节)+ 数据包大小(2 字节)
校验和 1 xx
  • 升级通道(1 字节):用户在开发者平台前台上传固件时,需要选择 MCU 的 OTA 升级通道,根据平台分配的值填写;
  • 新固件版本号(2 字节):例如 0x1222,表示 1.2.34。
  • 数据包偏移量(4 字节):单位字节数,即本次请求的数据,在 OTA 文件中的偏移量。
  • 数据包大小(2 字节):单位字节数,即本次请求的数据包的大小,最大不能超过 384 字节。

示例:0x55 AA 02 xx xx 0C 00 09 09 12 34 00 00 10 00 00 30 xx 表示请求 4096 位置开始的 48 字节数据包:

  • 升级通道(1 字节):9。
  • 新固件版本号:0x1222,表示 1.2.34。
  • 数据包偏移量:0x00001000,即偏移量为 4096 位置。
  • 数据包大小:0x0030,即请求 48 字节的数据。

模组应答

字段 字节数 说明
帧头 2 0x55AA
版本 1 0x02
序列号 2 xx xx
命令字 1 0x0D
数据长度 2 N
数据 N 结果(1 字节)+ 升级通道(1 字节)+ 新固件版本号(2 字节)+ 数据包偏移量(4 字节)+ 数据包内容
校验和 1 xx
  • 结果:0x00 请求成功,0x01 请求失败,失败状态时后面的数据不存在。
  • 升级通道(1 字节):用户在IOT前台上传固件时,需要选择 MCU 的 OTA 升级通道,根据平台分配的值填写。
  • 新固件版本号(2 字节):0x1222,表示 1.2.34。
  • 数据包偏移量(4 字节):单位字节,即本次请求的数据,在 OTA 文件中的偏移量。
  • 数据包内容(N 字节):本次返回的数据包的内容。

示例:55 AA 02 xx xx 0D xxxx 00 09 12 22 00 00 10 00 ... xx 表示请求成功 (数据部分用省略号表示)。

OTA 结果上报(0x0E)

设备在进行 MCU OTA 升级后,将 OTA 升级结果上报给网关,该命令由 MCU 发起。

MCU 发送

字段 字节数 说明
帧头 2 0x55AA
版本 1 0x02
序列号 2 xx xx
命令字 1 0x0E
数据长度 2 0x0004
数据 4 升级结果(1 字节)+ 升级通道(1 字节)+ 新固件版本号(2 字节)
校验和 1 xx
  • 升级结果(1 字节):0x00 升级成功,0x01 升级失败。

示例:0x55 AA 02 xx xx 0E 00 04 00 09 12 22 xx 表示设备 MCU OTA 成功

  • MCU OTA 结果:0x00 成功
  • 升级通道:9
  • 新固件版本号:0x1222,表示 1.2.34

模组应答

字段 字节数 说明
帧头 2 0x55AA
版本 1 0x02
序列号 2 xx xx
命令字 1 0x0E
数据长度 2 0x0001
数据 1 0x00:OK
0x01:Error
校验和 1 xx

示例:0x55 AA 02 xx xx 0E 00 01 00 xx

时间

时间同步(0x24)

部分设备关心当前时间信息,例如用于本地定时或者显示屏显示。设备可以向网关请求时间信息,在网关应答时间信息时已经完成了时区转换。该命令由 MCU 发起,模组收到该命令后向网关发起时间请求,在收到网关回复后通过本命令的应答帧,将时间信息返回给 MCU。

MCU 发送

字段 字节数 说明
帧头 2 0x55AA
版本 1 0x02
序列号 2 xx xx
命令字 1 0x24
数据长度 2 0x0000
数据 0
校验和 1 xx

示例:55 AA 02 xx xx 24 00 00 xx MCU 发起,请求时间同步。

模组应答

字段 字节数 说明
帧头 2 0x55AA
版本 1 0x02
序列号 2 xx xx
命令字 1 0x24
数据长度 2 0x0008
数据 8 标准时间戳(4 字节) + 本地时间戳(4 字节)
校验和 1 xx
  • 标准时间戳:格林威治时间,以 1970.01.01 00:00:00 为起点到现在的总秒数。
  • 本地时间戳:考虑时区和夏令时的本地时间,即标准时间 ± 时差。一般设备以本地时间为准。

示例:55 AA 02 xx xx 24 00 08 66 45 DB F0 66 46 4C 70 xx

  • 标准时间:0x6645DBF0
  • 本地时间:0x66464C70

更新记录

主要变更 修订日期 修订说明
出版 20250227 1. PLC 串口对接第一版