虫虫首页| 资源下载| 资源专辑| 精品软件
登录| 注册

您现在的位置是:首页 > 技术阅读 >  DL-LN33 ZigBee模块系列网文第二篇:指令分析/地址和组网信息的修改

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

时间:2024-02-09

点击上方“嵌入式从0到1”,选择“置顶/星标公众号

干货福利,第一时间送达!

在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包头由FE和包的长度组成,长度为包的数据长度加4(源端口号1Byte+目的端口号1Byte+远程地址2Byte)。FE 08
源端口号1 Byte包的源端口号。0x91
目的端口号1 Byte包的目的端口号。0x90
远程地址2Byte远程模块的地址,当发送数据给模块时,远程地址为目标模块的地址, 目标地址为 0x0000 表示此包发给本模块,目标地址为 0xFFFF 的包会被发往本网络中的所有节点。03 00
数据可变想要传输的数据。00 AE 13 33
包尾1 Byte固定为FF表示一个包传输完成。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 进行,不能远程操作。

查询组网信息

发送数据长度意义
命令1Byte必须为以下值中的一个:0x01 读取地址;0x02 读取网络ID;0x03 读取信道编号;0x04 读取Uart的波特率。

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

通信的波特率

1. 设置波特率包

发送数据长度意义
命令1Byte必须为0x14。
新波特率1Byte想要设置的新波特率读数。

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

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

2. 查询波特率

返回数据长度意义
命令1Byte必须为0x24。
波特率1Byte当前波特率,如果节点曾经收到过设置信息包,并且没有进行更新,则此处返回最新设置的波特率读数。

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

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

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

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

波特率读数
波特率读数
24000x00
576000x07
48000x01
1152000x08
96000x02
2304000x09
144000x03
1250000x0A
192000x04
2500000x0B
288000x05
5000000x0C
384000x06


设置说明

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

地址

1. 设置地址

发送数据长度意义
命令1Byte必须为0x11。
新地址2Byte想要设置的新地址值,新地址必须合法。

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

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

2. 查询地址

返回数据长度意义
命令1Byte必须为0x21。
地址2Byte当前地址,如果节点曾经收到过设置信息包,并且没有进行更新,则此处返回最新设置的值。

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

网络ID

1. 设置新网络ID

信息名长度说明举例
包头2 Byte包头由FE和包的长度组成,长度为包的数据长度加4。FE 07
源端口号1 Byte包的源端口号。0x91
目的端口号1 Byte包的目的端口号。0x21
远程地址2 Byte目标地址为 0x0000 表示此包发给本模块。00 00
数据3 Byte第一个字节固定为0x12,后两个字节为新网络ID12 34 12
包尾1 Byte固定为FF表示一个包传输完成。FF

测试指令:修改网络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包

返回数据长度意义
命令1Byte必须为0x22。
网络ID2Byte当前网络 ID,如果节点曾经收到过设置信息包,并且没有进行更新,则此处返回最新设置的值。

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

信道

1. 设置信道

发送数据长度意义
命令1Byte必须为0x13。
新信道1Byte想要设置的新信道值,新网络信道必须合法。

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

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

2. 查询信道

返回数据长度意义
命令1Byte必须为0x23。
信道1Byte当前信道,如果节点曾经收到过设置信息包,并且没有进行更新,则此处返回最新设 置的值。

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

重启命令包

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

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

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

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

发送重启命令

发送数据长度意义
命令1Byte必须为0x10,更新信息并重启。

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

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

参考阅读

2.4G ZigBee无线自组网mesh网络模块简介


写文不易,对你有帮助的话,

请四连鼓励一下,谢谢各位!