DL-LN33 ZigBee模块:指令分析/地址和组网信息的修改

点击上方“嵌入式从0到1”,选择“置顶/星标公众号” 干货福利,第一时间送达! 在DL-LN33模块使用之前,我们需要对模块进行通信的波特率、地址、信道和网络ID进行设置,这样我们…

DL-LN33 ZigBee模块:指令分析/地址和组网信息的修改插图

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

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

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

接线

DL-LN33 ZigBee模块:指令分析/地址和组网信息的修改插图(1)

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

DL-LN33 ZigBee模块:指令分析/地址和组网信息的修改插图(2)

图中所示的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)

DL-LN33 ZigBee模块:指令分析/地址和组网信息的修改插图(3)

2. 查询波特率

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

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

DL-LN33 ZigBee模块:指令分析/地址和组网信息的修改插图(4)

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

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

3. 波特率–读数对照表

波特率 读数 波特率 读数
2400 0x00 57600 0x07
4800 0x01 115200 0x08
9600 0x02 230400 0x09
14400 0x03 125000 0x0A
19200 0x04 250000 0x0B
28800 0x05 500000 0x0C
38400 0x06
设置说明

如果不知道模块配置的波特率,可以将 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

DL-LN33 ZigBee模块:指令分析/地址和组网信息的修改插图(5)

2. 查询地址

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

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

DL-LN33 ZigBee模块:指令分析/地址和组网信息的修改插图(6)

网络ID

1. 设置新网络ID

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

DL-LN33 ZigBee模块:指令分析/地址和组网信息的修改插图(7)

2. 查询网络ID包

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

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

DL-LN33 ZigBee模块:指令分析/地址和组网信息的修改插图(8)

信道

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

DL-LN33 ZigBee模块:指令分析/地址和组网信息的修改插图(9)

2. 查询信道

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

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

DL-LN33 ZigBee模块:指令分析/地址和组网信息的修改插图(10)

重启命令包

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

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

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

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

发送重启命令

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

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

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

DL-LN33 ZigBee模块:指令分析/地址和组网信息的修改插图(11)

参考阅读

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

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

请四连鼓励一下,谢谢各位!DL-LN33 ZigBee模块:指令分析/地址和组网信息的修改插图(12)

免责声明:本文内容由21ic获得授权后发布,版权归原作者所有,本平台仅提供信息存储服务。文章仅代表作者个人观点,不代表本平台立场,如有问题,请联系我们,谢谢!

作者: soufei

为您推荐


Fatal error: Can't use function return value in write context in /www/wwwroot/www.qianrushi.com.cn/wp-content/themes/news/footer.php on line 115