DL-LN33 ZigBee模块系列网文第二篇:指令分析/地址和组网信息的修改

在DL-LN33模块使用之前,我们需要对模块进行通信的波特率、地址、信道和网络ID进行设置,这样我们首先要对模块的通信协议进行了解,本文重点分析一下模块指令的格式,然后对模块地址和组网信息进行修改。

接线

注意: 默认购买的PL2303TA线一般红线为5V,需打开蓝盖,将红线更改为3.3V。

图中所示的USB转TTL的串口模块都可以,但是使用的时候,注意: ZigBee模块的工作电压应为2.5V~3.6V。

Uart通信协议

1. 串口参数

数据位:8位起始位:1位停止位:1位校验位:无校验波特率可以选用下面任意值:2400、 4800、 9600、 14400、 19200、 28800、 38400、 57600、 115200、 230400、 125000、 250000、 500000。

模块出厂默认波特率为:115200

2. 数据包结构定义

在通信过程中,最常见的应用场景是单片机通过 Uart 告诉模块这样的信息:“将数据 00 AE 13 33 发往地址为 0003 的模块,目标端口为 90,源端口为 91。”对于单片机,需要将这些信息整理成一个包,通过 Uart 发给模块:FE 08 91 90 03 00 00 AE 13 33 FF

此包的说明如下表所示:

注: 远程地址即节点地址,长度为2 Byte,使用小端模式进行传输,即先传输低8位,再传输高8位。

3. 转义机制

  • 包尾是一个包的结束,值为FF,如果收发过程中出现FF则会干扰包的正常接收。所以包中不能出现FF,如果需要发送FF则用FE FD代替;
  • FE是包头,也是转义标志,如果传输过程中出现FE,后面跟着一个小于64(因为该模块传输的数据包最大长度为63)的数字,则会使接收方误认为收到了一个包头。因此,在任何时候需要发送一个FE时,则发送FE FC代替;
  • 处理在包头、包尾和数据长度(数据长度不会大于63)数据传输过程中遇到的任何FE/FF都需要转义处理。

传输过程中如果遇到数据部分、地址或者端口号中出现 FF,则使用 FE FD 来代替;如果出现 FE,则用 FE FC 来代替。

以免传输过程中出现的包头和包尾,使接收方误判断。在传输中这种替换称为“转义”。

包长度不会受到转义的影响,例如发送的数据为 09 FF 时,替换为 09 FE FD,但包头中的数据长度仍然按照 2+4 来计算,这样,发送的包如下:

FE 06 91 90 03 00 09 FE FD FF

虽然一共传输了 7 个字节,但包长为 6。如果地址、端口号中出现了 FF、FE 也需要进行转义。

  • 要发送的数据是:FE 08 90 91 FF 00 20 FE  FF 20 FF
  • 实际发送的数据是:FE 08 90 91 FE FD 00 20 FE FC FE FD 20 FF

4. 解析包策略上的规律

  • 凡是FE后面跟着的内容必然特殊处理

    • 如果是小于63的数据,则是收到了包头。
    • 如果是FD和FC,则将此数据+2既是要发送的数据,FD对应FF,FC对应FE。
  • 凡是遇到FF,一定是包尾。

第四篇网文,串口编程解析数据包时,将会应用此处的结论。

端口

DL-LN3X 模块设计了端口的概念,接收方收到一个包时,会根据包的端口号,选择对应的程序处理包。

端口号的取值范围是 0x00~0xFF,其中 0x00~0x7F 端口由模块内部程序占用, 0x80~0xFF 端口开放给 Uart 连接的 MCU 或者电脑。

当 MCU 给一个模块发送数据时,如果源端口号填写了小于 0x80 的值,则包无法发出;如果目的端口号填写了小于 0x80 的值,接收方模块的内部程序将处理这个包并执行相关的动作,而不是从 Uart 发出这个包。

例如发送这个包:FE 05 91 20 03 00 0A FF

则会让地址为 03 00 的模块自带的红灯点亮 1 秒,而他的 Uart 不会输出数据。

FE 05 91 20 00 00 0A FF让自己模块上的红色LED点亮1秒。

修改通信的波特率、地址、网络ID和信道,都是跟模块自身的内部端口进行通信,即与自己的小于0x80的端口进行通信,这些端口都是厂家预先内置的端口,用于实现不同组网信息的查询和修改。

红灯闪烁控制端口

端口 0x20 用于控制模块的红色 LED 点亮,发送此包可以使模块的红色 LED 点亮一定时间。

模块与USB转TTL连接之后,利用此端口可以测试接线是否正确。

测试命令:FE 05 A3 20 02 00 32 FF数据位的值0x32代表红灯点亮的时间,该时间为100ms的倍数,换算关系如下:

0x32 = 50 * 100ms = 5 S。

所以上面命令为点亮地址为0x0002的模块红灯5秒钟。

FE 05 A3 20 00 00 32 FF让本模块的LED点亮5 S。

应用: 此功能可以用于测试一个指定地址的模块是否包含在网络中,如果想从许多节点中迅速找到某个特定地址的节点,也可以使用此功能。

基本信息管理端口

设置/修改模块信息

端口 0x21 用于配置模块的基本参数,包括波特率、地址、网络 ID和信道等。

此端口只接受远程地址填写 0x0000 的包,因此,这些信息的读取和修改只能通过本模块的 Uart 进行,不能远程操作。

查询组网信息

发送这个数据后,模块会根据修改的内容返回一个地址包、网络 ID 包、信道包或者波特率包。这些包将会携带对应的配置信息。

通信的波特率

1. 设置波特率包

发送这个数据后,模块的波特率将被修改为新的的值,除非此值不合法。操作完成后,此端口会返回一个响应包。

测试指令:修改波特率发送:FE 06 90 21 00 00 14 08 FF返回:FE 05 21 90 00 00 00 FF修改后模块信息:波特率读数为0x08(115200)

2. 查询波特率

测试指令:发送:FE 05 90 21 00 00 04 FF返回:FE 06 21 90 00 00 24 08 FF

模块信息:波特率为0x08,查看下表即为 115200。

注意: 如果不发送复位指令,那么重新上电之后,修改的信息将无效。

3. 波特率--读数对照表

设置说明

如果不知道模块配置的波特率,可以将 BaudReset 引脚连接到 GND,这样便可以使用 115200 波特率对模块进行配置。

地址

1. 设置地址

发送这个数据后,模块的地址将被修改为新地址给定的值,除非此值不合法。操作完成后,此端口会返回一个响应包。

测试指令:修改地址为0x0001发送:FE 07 90 21 00 00 11 01 00 FF返回:FE 05 21 90 00 00 00 FF修改后模块信息:地址为0x0001

2. 查询地址

测试指令:查询地址发送:FE 05 90 21 00 00 01 FF返回:FE 07 21 90 00 00 21 01 00 FF模块信息:地址为0x0001。

网络ID

1. 设置新网络ID

测试指令:修改网络ID为0x1234发送:FE 07 90 21 00 00 12 34 12 FF

发送这个数据后,模块的网络 ID 将被修改为新网络 ID 给定的值:0x1234,除非此值不合法。操作完成后,此端口会返回一个响应包。

返回:FE 05 21 90 00 00 00 FF修改后模块信息:网络ID为0x1234。

2. 查询网络ID包

测试指令:发送:FE 05 90 21 00 00 02 FF返回:FE 07 21 90 00 00 22 34 12 FF模块信息:网络ID为0x1234。

信道

1. 设置信道

发送这个数据后,模块的网络 ID 将被修改为新网络 ID 给定的值,除非此值不合法。操作完成后,此端口会返回一个响应包。

测试指令:修改信道为0x0F发送:FE 06 90 21 00 00 13 0F FF返回:FE 05 21 90 00 00 00 FF修改后模块信息:信道为0x0F

2. 查询信道

测试指令:发送:FE 05 90 21 00 00 03 FF返回:FE 06 21 90 00 00 23 0F FF模块信息:信道为0x0F

重启命令包

设置信息包含设置地址,设置网络 ID,设置波特率,设置信道四种。

这些设置信息在更新以后,不会立即执行,模块会使用原有的参数继续工作,此时如果希望写入的参数生效,则需发送重启命令包给模块。

在设置地址信息且没有发送重启命令的情况下,如果模块断电后再次启动,设置的信息也将丢失。

一旦设置这些信息并发送重启命令包,这些信息不会因为断电和任何形式的复位丢失。

发送重启命令

测试指令:重启包发送:FE 05 90 21 00 00 10 FF返回:无现象:模块上的灯闪烁亮2S左右

发送这个重启命令之后,模块的最新参数将被固化。

声明:本内容为作者独立观点,不代表电子星球立场。未经允许不得转载。授权事宜与稿件投诉,请联系:editor@netbroad.com
觉得内容不错的朋友,别忘了一键三连哦!
赞 2
收藏 2
关注 56
成为作者 赚取收益
全部留言
0/200
成为第一个和作者交流的人吧