简介
该代码仓主要用于发布基于AT命令的SIG MESH透传固件,帮助那些想要更专注于MESH应用层上开发的工程师,无须对SIG MESH进行深入地了解,只需发送相关的AT命令即可实现SIG MESH组网。
硬件平台
采用Nordic的52832或者52840平台,至于物理的载体可以是HX-DK-夏 Z1A00
或者Nordic 52832模组
固件功能简介
红旭基于SIG MESH的AT命令透传固件有如下两个功能:
- 支持二值信号量信息的组网应用,如开灯或关灯
- 支持自定义数据透传的组网应用,如传送自定义透传的内容,单次最大传输单元为200字节
其中Provisioner以及入网的节点的相关信息如下:
Provisioner
- 元素与模型 \
Element0 \
└── Configuration Client Model \
└── Configuration Server Model \
└── Health Client Model \
└── Health Server Model \
└── Generic OnOff Client Model \
└── HX Vendor Control Model
- 最大可配置入网的节点数为80
- 当Publish Address为单播地址和组地址时,最大可存储的数量为165
- 当Publish Address为虚拟地址时,最大可存储的数量为1
Provisionee
元素与模型 \
Element0 \
└── Configuration Server Model
└── Health Server Model \
└── Generic OnOff Server Model \
└── HX Vendor Control Model
最大订阅列表为8个
当Publish Address为单播地址和组地址时,最大可存储的数量为8
当Publish Address为虚拟地址时,最大可存储的数量为1
响应Generic OnOff命令的GPIO为P0.17
AT指令集
下述的所有AT指令,如果对端设备成功接收到,那么均会响应相对应的命令;同时,所有的指令最后都要加上
串口的配置信息如下:
- 波特率:115200
- 校验位:None
- 数据位:8
- 停止位:1
- 流控制:无
- TX: PIN0.06
- RX: PIN0.08
接下来介绍所有的命令详情,具体如下所示:
AT
作用:
用于测试串口通讯是否正常
命令格式:
AT
返回的命令格式:
+OK
示例:
AT\r\n<br>
+OK\r\n
AT+START
作用:
开启或者停止配置周边发出Unprovisioned Device Beacon的设备(该命令仅对Provisioner有效!!!)
命令格式:
其中Parameter的含义如下所示:
- 0x01:搜索周围发出unprovisioned Device Beacon的设备并配置其入网
- 0x00:停止搜索周边的未入网设备
- ?:查询当前的状态
- 其他的值均无效
返回的命令格式:
其中Parameter的含义如下所示:
- 0x02:处于搜索状态
- 0x03:处于停止状态 (默认的状态)
- 0x04:已经配置完一个未入网的设备
- 0x05:配网失败或者配置失败
示例:
AT+START=1\r\n<br>
+START:0x02\r\n
AT+TX
作用:
向指定的目标地址透传数据,目标地址可以是单播地址、组地址、Label UUID以及固定的组地址
命令格式:
AT+TX=Parameter1,Parameter2,Parameter3,Parameter4
其中Parameter1的含义如下所示:
- V: 表示使用HX的自定义透传模型
- S: 表示使用Generic Onoff Model
- D: 删除发布地址,包括单播地址、组地址以及虚拟地址
- ?: 查询Generic Onoff Server Model的状态
其中Parameter2的含义如下所示:
其中Parameter3的含义如下所示:
当Parameter1为V时:Parameter3的值允许如下:
- 0:不需要ACK响应。
- 1:需要ACK响应。包和包之间的间隔必须大于50ms 否则,网络响应不过来。
备注:Provisioner 不会对任何的节点(Provisionee)做ACK响应。也就是,如果节点向Provisioner 发送一包数据,该参数(Parameter3)必须为0。
其中Parameter4的含义如下所示:
- 当Parameter1为V时,需要透传的数据,最大长度不能大于380字节
- 当Parameter1为S时,透传的数据只能是0或1
- 当Parameter1为D时,该参数务必为0
- 当Parameter1为?时,第一个是当前的状态,紧接着是目标的状态值
---
返回的命令格式:
其中Parameter的含义如下所示:
- 0x00:发送成功
- 0x01:目标地址没在DSM中,所以在新添的过程中导致DSM的空间不足,需要删除在DSM中没用的地址
- 0x02:发送失败,请稍后再试
- 0x04:还未发送完成,请稍后再发
- 0x05:发送超时
- 0x06:删除的发布地址不存在
- 0x07:发布地址列表为空
- 0x08:透传数据的长度已经超过380字节
示例:
发送方
AT+TX=V,0201,0,abcdef\r\n<br>
+TX:0\r\n
AT+ADDRESS
作用:
查询Provisioner或者节点的所有发布地址,包括单播地址、组地址以及虚拟地址
命令格式:
AT+ADDRESS=Parameter1
其中Parameter1的含义如下所示:
- ?:
- Provisioner
查询当前Provisioner所有的发布地址,其中单播地址就是所有入网节点的元素地址
- Provisionee(入网的节点)
查询当前节点所有的发布地址,其中返回的第一个地址就是该节点的单播地址,其他的均为其发布地址
- 其他的值无效
返回的命令格式:
+ADDRESS: Parameter1,Parameter2,......,Parameter n
其中上述Parameter的含义如下所示:
- Provisioner
- 如果Parameter1的值为0x05时:说明Provisioner没有存储任何入网设备的信息
- 如果Parameter1的值为0x06时:说明Provisioner获取地址信息失败
- 除了上述值之外,其他值表示Provisioner所创建的MESH网络中的所有发布地址
- Provisionee(入网的节点)
- 如果Parameter1的值为0x05时:说明此时还没有入网
- 除了上述值之外,返回的第一个地址就是该节点的单播地址,其他值表示入网节点所有的发布地址,可以有一个,也可以有多个
示例:
AT+ADDRESS=?\r\n<br>
+ADDRESS:0x1234\r\n
AT+REMOVE
作用:
将入网的节点从当前的SIG Mesh网络中移除(该命令仅对Provisioner有效!!!)
命令格式:
其中Parameter1的含义如下所示:
- 入网节点首要元素地址,即节点的单播地址
- 其他的值无效
返回的命令格式:
其中上述Parameter1的含义如下所示:
- 0x00: 表示移除成功
- 0x01: 移除的节点的地址无效
- 0x02: 移除的节点失败
- 0x03: 对端节点的入网信息已经清除,但是Provisioner本地存储该节点的信息清除失败
---
示例:
AT+REMOVE=1234\r\n<br>
+REMOVE:0x00\r\n
AT+SUBSCRIBE
作用:
增删查节点所属透传模型或者通用ON/OFF服务端模型的订阅地址
命令格式:
AT+SUBSCRIBE=Parameter1,Parameter2,Parameter3,Parameter4
其中Parameter1的含义如下所示:
- ?:查询节点所属模型的订阅地址,如有多个则按顺序显示多个订阅地址
- 0:删除节点所属模型的订阅地址(该参数仅对Provisioner有效!!!)
- 1:增加节点所属模型的订阅地址(该参数仅对Provisioner有效!!!)
- 其他的值无效
Parameter2的含义如下所示:
- V:节点对应的所属模型为HX透传自定义模型
- S:节点对应的所属模型为通过ON/OFF服务端模型
- 其他的值无效
而Parameter3(该参数仅对Provisioner有效!!!)的含义如下所示:
- 该参数表示新增/删除/查询时,需要执行的对端设备的单播地址
而Parameter4(该参数仅对Provisioner有效!!!)的含义如下所示:
- 新增时,表示需要新增订阅的组地址或者Label UUID(128 Bits)的模型,其所属的元素地址
- 移除时,表示需要删除的模型,其所属的元素地址
- 查询时,不需要该参数,即只需上述的3个参数即可
返回的命令格式:
+SUBSCRIBE=Parameter1,Parameter2,……,Parameter n
其中上述Parameter的含义如下所示:
- Parameter1为0x00时:删除或者增加订阅地址成功
- Parameter1为0x04时:订阅列表为空或者查询的地址是不存在的
- Parameter1为0x06时:无效的地址,并不是当前网络中节点的单播地址
- Parameter1为0x07时:没未收到对端设备的响应,请60秒后再查
- Parameter1为0x08时:传进来的地址不是单播地址
- Parameter1为0x09时:订阅列表空间不足
- Parameter1为0x0A时:相关的命令执行无效
- 除了上述值之外,此时则表示有效的订阅地址(组地址或者虚拟地址)
示例:
AT+SUBSCRIBLE=1,S,0201,C003\r\n<br>
+SUBSCRIBLE:0x00\r\n
AT+RESET
作用:
Provisioner或者入网的节点删除所有MESH相关的配置信息,回到初始化状态;但是需要注意下述两点:
- Provisioner执行该命令,等同于恢复出厂设置
- Provisionee也是等同于恢复出厂设置,但是此时Provisioner不知道该节点已经恢复出厂设置,其仍然保存有该节点的信息;因此,当入网的节点需要恢复出厂设置时,建议采用AT+REMOVE命令
命令格式:
返回的命令格式:
其中Parameter的含义如下所示:
示例:
AT+RESET=1\r\n<br>
+RESET:0x00\r\n
错误码
上述所有AT指令的错误值返回的格式如下:
其中,各个错误码表达的含义如下所示:
- 0xFA:AT命令中找不到等号
- 0xFB:AT命令列表不存在该AT命令
- 0xFC:内存分配失败
- 0xFD:传入的实参为空
- 0xFE:该命令所携带的参数无效
- 0xFF:该命令此时无效
注意事项
上述所有AT指令的内容均为字符串,其中AT+COMMAND的内容要大写且必须是英文输入法下的字母或字符,例如:"AT+RESET=1\r\n"
GPIO口功能指示(保留)
该固件选用3个GPIO口用于不同功能的指示,具体的功能分配如下:
GPIO0(输出)
这里的GPIO0指的是模块的GPIO0,功能如下:
GPIO1(输出)
这里的GPIO1指的是模块的GPIO1,功能如下:
- 低电平:已经接收到MESH的透传数据
- 高电平:没有MESH的透传数据(默认状态)
GPIO2(输入)
这里的GPIO2指的是模块的GPIO2,功能如下:
- 低电平:暂停发送MESH透传数据
- 高电平:发送MESH透传数据(默认状态)