DL-LN33 ZigBee模塊:指令分析/地址和組網(wǎng)信息的修改
掃描二維碼
隨時(shí)隨地手機(jī)看文章
點(diǎn)擊上方“嵌入式從0到1”,選擇“置頂/星標(biāo)公眾號(hào)”
干貨福利,第一時(shí)間送達(dá)!
在DL-LN33模塊使用之前,我們需要對(duì)模塊進(jìn)行通信的波特率、地址、信道和網(wǎng)絡(luò)ID進(jìn)行設(shè)置,這樣我們首先要對(duì)模塊的通信協(xié)議進(jìn)行了解,本文重點(diǎn)分析一下模塊指令的格式,然后對(duì)模塊地址和組網(wǎng)信息進(jìn)行修改。
接線(xiàn)
注意: 默認(rèn)購(gòu)買(mǎi)的PL2303TA線(xiàn)一般紅線(xiàn)為5V,需打開(kāi)藍(lán)蓋,將紅線(xiàn)更改為3.3V。
圖中所示的USB轉(zhuǎn)TTL的串口模塊都可以,但是使用的時(shí)候,注意: ZigBee模塊的工作電壓應(yīng)為2.5V~3.6V。
Uart通信協(xié)議
1. 串口參數(shù)
數(shù)據(jù)位:8位
起始位:1位
停止位:1位
校驗(yàn)位:無(wú)校驗(yàn)
波特率可以選用下面任意值:
2400、 4800、 9600、 14400、 19200、 28800、 38400、 57600、 115200、 230400、 125000、 250000、 500000。
模塊出廠默認(rèn)波特率為:115200。
2. 數(shù)據(jù)包結(jié)構(gòu)定義
在通信過(guò)程中,最常見(jiàn)的應(yīng)用場(chǎng)景是單片機(jī)通過(guò) Uart 告訴模塊這樣的信息:
“將數(shù)據(jù) 00 AE 13 33 發(fā)往地址為 0003 的模塊,目標(biāo)端口為 90,源端口為 91。”
對(duì)于單片機(jī),需要將這些信息整理成一個(gè)包,通過(guò) Uart 發(fā)給模塊:
FE 08 91 90 03 00 00 AE 13 33 FF
此包的說(shuō)明如下表所示:
信息名 | 長(zhǎng)度 | 說(shuō)明 | 舉例 |
---|---|---|---|
包頭 | 2 Byte | 包頭由FE和包的長(zhǎng)度組成,長(zhǎng)度為包的數(shù)據(jù)長(zhǎng)度加4(源端口號(hào)1Byte+目的端口號(hào)1Byte+遠(yuǎn)程地址2Byte)。 | FE 08 |
源端口號(hào) | 1 Byte | 包的源端口號(hào)。 | 0x91 |
目的端口號(hào) | 1 Byte | 包的目的端口號(hào)。 | 0x90 |
遠(yuǎn)程地址 | 2Byte | 遠(yuǎn)程模塊的地址,當(dāng)發(fā)送數(shù)據(jù)給模塊時(shí),遠(yuǎn)程地址為目標(biāo)模塊的地址, 目標(biāo)地址為 0x0000 表示此包發(fā)給本模塊,目標(biāo)地址為 0xFFFF 的包會(huì)被發(fā)往本網(wǎng)絡(luò)中的所有節(jié)點(diǎn)。 | 03 00 |
數(shù)據(jù) | 可變 | 想要傳輸?shù)臄?shù)據(jù)。 | 00 AE 13 33 |
包尾 | 1 Byte | 固定為FF表示一個(gè)包傳輸完成。 | FF |
注: 遠(yuǎn)程地址即節(jié)點(diǎn)地址,長(zhǎng)度為2 Byte,使用小端模式進(jìn)行傳輸,即先傳輸?shù)?位,再傳輸高8位。
3. 轉(zhuǎn)義機(jī)制
-
包尾是一個(gè)包的結(jié)束,值為 FF,如果收發(fā)過(guò)程中出現(xiàn)FF則會(huì)干擾包的正常接收。所以包中不能出現(xiàn)FF,如果需要發(fā)送FF則用 FE FD代替; -
FE是包頭,也是轉(zhuǎn)義標(biāo)志,如果傳輸過(guò)程中出現(xiàn) FE,后面跟著一個(gè)小于64(因?yàn)樵撃K傳輸?shù)臄?shù)據(jù)包最大長(zhǎng)度為63)的數(shù)字,則會(huì)使接收方誤認(rèn)為收到了一個(gè)包頭。因此,在任何時(shí)候需要發(fā)送一個(gè)FE時(shí),則發(fā)送 FE FC代替; -
處理在包頭、包尾和數(shù)據(jù)長(zhǎng)度(數(shù)據(jù)長(zhǎng)度不會(huì)大于63)數(shù)據(jù)傳輸過(guò)程中遇到的任何FE/FF都需要轉(zhuǎn)義處理。
傳輸過(guò)程中如果遇到數(shù)據(jù)部分、地址或者端口號(hào)中出現(xiàn) FF,則使用 FE FD 來(lái)代替;如果出現(xiàn) FE,則用 FE FC 來(lái)代替。
以免傳輸過(guò)程中出現(xiàn)的包頭和包尾,使接收方誤判斷。在傳輸中這種替換稱(chēng)為“轉(zhuǎn)義”。
包長(zhǎng)度不會(huì)受到轉(zhuǎn)義的影響,例如發(fā)送的數(shù)據(jù)為 09 FF 時(shí),替換為 09 FE FD,但包頭中的數(shù)據(jù)長(zhǎng)度仍然按照 2+4 來(lái)計(jì)算,這樣,發(fā)送的包如下:
FE 06 91 90 03 00 09 FE FD FF
雖然一共傳輸了 7 個(gè)字節(jié),但包長(zhǎng)為 6。如果地址、端口號(hào)中出現(xiàn)了 FF、FE 也需要進(jìn)行轉(zhuǎn)義。
-
要發(fā)送的數(shù)據(jù)是:FE 08 90 91 FF?00 20 FE?? FF?20 FF -
實(shí)際發(fā)送的數(shù)據(jù)是:FE 08 90 91 FE FD 00 20 FE FC FE FD 20 FF
4. 解析包策略上的規(guī)律
-
凡是FE后面跟著的內(nèi)容必然特殊處理
-
如果是小于63的數(shù)據(jù),則是收到了包頭。 -
如果是FD和FC,則將此數(shù)據(jù)+2既是要發(fā)送的數(shù)據(jù),F(xiàn)D對(duì)應(yīng)FF,F(xiàn)C對(duì)應(yīng)FE。 -
凡是遇到FF,一定是包尾。
第四篇網(wǎng)文,串口編程解析數(shù)據(jù)包時(shí),將會(huì)應(yīng)用此處的結(jié)論。
端口
DL-LN3X 模塊設(shè)計(jì)了端口的概念,接收方收到一個(gè)包時(shí),會(huì)根據(jù)包的端口號(hào),選擇對(duì)應(yīng)的程序處理包。
端口號(hào)的取值范圍是 0x00~0xFF,其中 0x00~0x7F 端口由模塊內(nèi)部程序占用, 0x80~0xFF 端口開(kāi)放給 Uart 連接的 MCU 或者電腦。
當(dāng) MCU 給一個(gè)模塊發(fā)送數(shù)據(jù)時(shí),如果源端口號(hào)填寫(xiě)了小于 0x80 的值,則包無(wú)法發(fā)出;如果目的端口號(hào)填寫(xiě)了小于 0x80 的值,接收方模塊的內(nèi)部程序?qū)⑻幚磉@個(gè)包并執(zhí)行相關(guān)的動(dòng)作,而不是從 Uart 發(fā)出這個(gè)包。
例如發(fā)送這個(gè)包:
FE 05 91 20 03 00 0A FF
則會(huì)讓地址為 03 00 的模塊自帶的紅燈點(diǎn)亮 1 秒,而他的 Uart 不會(huì)輸出數(shù)據(jù)。
FE 05 91 20 00 00 0A FF
讓自己模塊上的紅色LED點(diǎn)亮1秒。
修改通信的波特率、地址、網(wǎng)絡(luò)ID和信道,都是跟模塊自身的內(nèi)部端口進(jìn)行通信,即與自己的小于0x80的端口進(jìn)行通信,這些端口都是廠家預(yù)先內(nèi)置的端口,用于實(shí)現(xiàn)不同組網(wǎng)信息的查詢(xún)和修改。
紅燈閃爍控制端口
端口 0x20 用于控制模塊的紅色 LED 點(diǎn)亮,發(fā)送此包可以使模塊的紅色 LED 點(diǎn)亮一定時(shí)間。
模塊與USB轉(zhuǎn)TTL連接之后,利用此端口可以測(cè)試接線(xiàn)是否正確。
測(cè)試命令:FE 05 A3 20 02 00 32 FF
數(shù)據(jù)位的值0x32代表紅燈點(diǎn)亮的時(shí)間,該時(shí)間為100ms的倍數(shù),換算關(guān)系如下:
0x32 = 50 * 100ms = 5 S。
所以上面命令為點(diǎn)亮地址為0x0002的模塊紅燈5秒鐘。
FE 05 A3 20 00 00 32 FF
讓本模塊的LED點(diǎn)亮5 S。
應(yīng)用: 此功能可以用于測(cè)試一個(gè)指定地址的模塊是否包含在網(wǎng)絡(luò)中,如果想從許多節(jié)點(diǎn)中迅速找到某個(gè)特定地址的節(jié)點(diǎn),也可以使用此功能。
基本信息管理端口
設(shè)置/修改模塊信息
端口 0x21 用于配置模塊的基本參數(shù),包括波特率、地址、網(wǎng)絡(luò) ID和信道等。
此端口只接受遠(yuǎn)程地址填寫(xiě) 0x0000 的包,因此,這些信息的讀取和修改只能通過(guò)本模塊的 Uart 進(jìn)行,不能遠(yuǎn)程操作。
查詢(xún)組網(wǎng)信息
發(fā)送數(shù)據(jù) | 長(zhǎng)度 | 意義 |
---|---|---|
命令 | 1Byte | 必須為以下值中的一個(gè):0x01 讀取地址;0x02 讀取網(wǎng)絡(luò)ID;0x03 讀取信道編號(hào);0x04 讀取Uart的波特率。 |
發(fā)送這個(gè)數(shù)據(jù)后,模塊會(huì)根據(jù)修改的內(nèi)容返回一個(gè)地址包、網(wǎng)絡(luò) ID 包、信道包或者波特率包。這些包將會(huì)攜帶對(duì)應(yīng)的配置信息。
通信的波特率
1. 設(shè)置波特率包
發(fā)送數(shù)據(jù) | 長(zhǎng)度 | 意義 |
---|---|---|
命令 | 1Byte | 必須為0x14。 |
新波特率 | 1Byte | 想要設(shè)置的新波特率讀數(shù)。 |
發(fā)送這個(gè)數(shù)據(jù)后,模塊的波特率將被修改為新的的值,除非此值不合法。操作完成后,此端口會(huì)返回一個(gè)響應(yīng)包。
測(cè)試指令:修改波特率
發(fā)送:FE 06 90 21 00 00 14 08 FF
返回:FE 05 21 90 00 00 00 FF
修改后模塊信息:波特率讀數(shù)為0x08(115200)
2. 查詢(xún)波特率
返回?cái)?shù)據(jù) | 長(zhǎng)度 | 意義 |
---|---|---|
命令 | 1Byte | 必須為0x24。 |
波特率 | 1Byte | 當(dāng)前波特率,如果節(jié)點(diǎn)曾經(jīng)收到過(guò)設(shè)置信息包,并且沒(méi)有進(jìn)行更新,則此處返回最新設(shè)置的波特率讀數(shù)。 |
測(cè)試指令:
發(fā)送:FE 05 90 21 00 00 04 FF
返回:FE 06 21 90 00 00 24 08 FF
模塊信息:波特率為0x08,查看下表即為 115200。
注意: 如果不發(fā)送復(fù)位指令,那么重新上電之后,修改的信息將無(wú)效。
3. 波特率--讀數(shù)對(duì)照表
波特率 | 讀數(shù) | 波特率 | 讀數(shù) | |
---|---|---|---|---|
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 |
設(shè)置說(shuō)明
如果不知道模塊配置的波特率,可以將 BaudReset 引腳連接到 GND,這樣便可以使用 115200 波特率對(duì)模塊進(jìn)行配置。
地址
1. 設(shè)置地址
發(fā)送數(shù)據(jù) | 長(zhǎng)度 | 意義 |
---|---|---|
命令 | 1Byte | 必須為0x11。 |
新地址 | 2Byte | 想要設(shè)置的新地址值,新地址必須合法。 |
發(fā)送這個(gè)數(shù)據(jù)后,模塊的地址將被修改為新地址給定的值,除非此值不合法。操作完成后,此端口會(huì)返回一個(gè)響應(yīng)包。
測(cè)試指令:修改地址為0x0001
發(fā)送:FE 07 90 21 00 00 11 01 00 FF
返回:FE 05 21 90 00 00 00 FF
修改后模塊信息:地址為0x0001
2. 查詢(xún)地址
返回?cái)?shù)據(jù) | 長(zhǎng)度 | 意義 |
---|---|---|
命令 | 1Byte | 必須為0x21。 |
地址 | 2Byte | 當(dāng)前地址,如果節(jié)點(diǎn)曾經(jīng)收到過(guò)設(shè)置信息包,并且沒(méi)有進(jìn)行更新,則此處返回最新設(shè)置的值。 |
測(cè)試指令:查詢(xún)地址
發(fā)送:FE 05 90 21 00 00 01 FF
返回:FE 07 21 90 00 00 21 01 00 FF
模塊信息:地址為0x0001。
網(wǎng)絡(luò)ID
1. 設(shè)置新網(wǎng)絡(luò)ID
信息名 | 長(zhǎng)度 | 說(shuō)明 | 舉例 |
---|---|---|---|
包頭 | 2 Byte | 包頭由FE和包的長(zhǎng)度組成,長(zhǎng)度為包的數(shù)據(jù)長(zhǎng)度加4。 | FE 07 |
源端口號(hào) | 1 Byte | 包的源端口號(hào)。 | 0x91 |
目的端口號(hào) | 1 Byte | 包的目的端口號(hào)。 | 0x21 |
遠(yuǎn)程地址 | 2 Byte | 目標(biāo)地址為 0x0000 表示此包發(fā)給本模塊。 | 00 00 |
數(shù)據(jù) | 3 Byte | 第一個(gè)字節(jié)固定為0x12,后兩個(gè)字節(jié)為新網(wǎng)絡(luò)ID | 12 34 12 |
包尾 | 1 Byte | 固定為FF表示一個(gè)包傳輸完成。 | FF |
測(cè)試指令:修改網(wǎng)絡(luò)ID為0x1234
發(fā)送:FE 07 90 21 00 00 12 34 12 FF
發(fā)送這個(gè)數(shù)據(jù)后,模塊的網(wǎng)絡(luò) ID 將被修改為新網(wǎng)絡(luò) ID 給定的值:0x1234,除非此值不合法。操作完成后,此端口會(huì)返回一個(gè)響應(yīng)包。
返回:FE 05 21 90 00 00 00 FF
修改后模塊信息:網(wǎng)絡(luò)ID為0x1234。
2. 查詢(xún)網(wǎng)絡(luò)ID包
返回?cái)?shù)據(jù) | 長(zhǎng)度 | 意義 |
---|---|---|
命令 | 1Byte | 必須為0x22。 |
網(wǎng)絡(luò)ID | 2Byte | 當(dāng)前網(wǎng)絡(luò) ID,如果節(jié)點(diǎn)曾經(jīng)收到過(guò)設(shè)置信息包,并且沒(méi)有進(jìn)行更新,則此處返回最新設(shè)置的值。 |
測(cè)試指令:
發(fā)送:FE 05 90 21 00 00 02 FF
返回:FE 07 21 90 00 00 22 34 12 FF
模塊信息:網(wǎng)絡(luò)ID為0x1234。
信道
1. 設(shè)置信道
發(fā)送數(shù)據(jù) | 長(zhǎng)度 | 意義 |
---|---|---|
命令 | 1Byte | 必須為0x13。 |
新信道 | 1Byte | 想要設(shè)置的新信道值,新網(wǎng)絡(luò)信道必須合法。 |
發(fā)送這個(gè)數(shù)據(jù)后,模塊的網(wǎng)絡(luò) ID 將被修改為新網(wǎng)絡(luò) ID 給定的值,除非此值不合法。操作完成后,此端口會(huì)返回一個(gè)響應(yīng)包。
測(cè)試指令:修改信道為0x0F
發(fā)送:FE 06 90 21 00 00 13 0F FF
返回:FE 05 21 90 00 00 00 FF
修改后模塊信息:信道為0x0F
2. 查詢(xún)信道
返回?cái)?shù)據(jù) | 長(zhǎng)度 | 意義 |
---|---|---|
命令 | 1Byte | 必須為0x23。 |
信道 | 1Byte | 當(dāng)前信道,如果節(jié)點(diǎn)曾經(jīng)收到過(guò)設(shè)置信息包,并且沒(méi)有進(jìn)行更新,則此處返回最新設(shè) 置的值。 |
測(cè)試指令:
發(fā)送:FE 05 90 21 00 00 03 FF
返回:FE 06 21 90 00 00 23 0F FF
模塊信息:信道為0x0F
重啟命令包
設(shè)置信息包含設(shè)置地址,設(shè)置網(wǎng)絡(luò) ID,設(shè)置波特率,設(shè)置信道四種。
這些設(shè)置信息在更新以后,不會(huì)立即執(zhí)行,模塊會(huì)使用原有的參數(shù)繼續(xù)工作,此時(shí)如果希望寫(xiě)入的參數(shù)生效,則需發(fā)送重啟命令包給模塊。
在設(shè)置地址信息且沒(méi)有發(fā)送重啟命令的情況下,如果模塊斷電后再次啟動(dòng),設(shè)置的信息也將丟失。
一旦設(shè)置這些信息并發(fā)送重啟命令包,這些信息不會(huì)因?yàn)閿嚯姾腿魏涡问降膹?fù)位丟失。
發(fā)送重啟命令
發(fā)送數(shù)據(jù) | 長(zhǎng)度 | 意義 |
---|---|---|
命令 | 1Byte | 必須為0x10,更新信息并重啟。 |
測(cè)試指令:重啟包
發(fā)送:FE 05 90 21 00 00 10 FF
返回:無(wú)
現(xiàn)象:模塊上的燈閃爍亮2S左右
發(fā)送這個(gè)重啟命令之后,模塊的最新參數(shù)將被固化。
參考閱讀
2.4G ZigBee無(wú)線(xiàn)自組網(wǎng)mesh網(wǎng)絡(luò)模塊簡(jiǎn)介
寫(xiě)文不易,對(duì)你有幫助的話(huà),
請(qǐng)四連鼓勵(lì)一下,謝謝各位!
免責(zé)聲明:本文內(nèi)容由21ic獲得授權(quán)后發(fā)布,版權(quán)歸原作者所有,本平臺(tái)僅提供信息存儲(chǔ)服務(wù)。文章僅代表作者個(gè)人觀點(diǎn),不代表本平臺(tái)立場(chǎng),如有問(wèn)題,請(qǐng)聯(lián)系我們,謝謝!