串口編程解析DL-LN33 ZigBee模塊數(shù)據(jù)包
點(diǎn)擊上方“嵌入式從0到1”,選擇“置頂/星標(biāo)公眾號(hào)”
干貨福利,第一時(shí)間送達(dá)!
實(shí)現(xiàn)功能
-
模塊0x0002通過(guò)PC端的串口助手發(fā)送數(shù)據(jù)包“FE 06 A0 A1 01 00 01 00 FF”,點(diǎn)亮最小系統(tǒng)板上的LED指示燈; -
模塊0x0002通過(guò)PC端的串口助手發(fā)送數(shù)據(jù)包“FE 06 A0 A1 01 00 01 01 FF”,熄滅最小系統(tǒng)板上的LED指示燈; -
按最小系統(tǒng)板上的白色按鍵,實(shí)現(xiàn)通過(guò)0x0001模塊點(diǎn)亮0x0002模塊上的紅燈亮5S。
原理圖
最小系統(tǒng)板底板與ZigBee模塊連接原理圖
ZigBee模塊底板連接原理圖
此底板與ZigBee模塊連接之后,只需要一根Micro USB線即可實(shí)現(xiàn)對(duì)ZigBee模塊的各種功能調(diào)試,此底板相當(dāng)于一個(gè)USB轉(zhuǎn)TTL線的作用,底板上的主芯片為CH340C。
測(cè)試網(wǎng)絡(luò)是否正常
通過(guò)與地址0x0002模塊相連的COM14發(fā)送測(cè)試數(shù)據(jù),
例如發(fā)送:
FE 05 91 20 00 00 32 FF
或者:
FE 05 91 20 02 00 32 FF
讓自己模塊上的紅色LED點(diǎn)亮5秒。
==>證明硬件連接沒有問(wèn)題。
然后測(cè)試網(wǎng)絡(luò)是否正常,發(fā)送測(cè)試數(shù)據(jù):
FE 05 91 20 01 00 32 FF
此指令將使地址0x0001的模塊亮5S。
==>證明網(wǎng)絡(luò)是正常的。
PC 串口助手發(fā)送數(shù)據(jù)
如下圖所示,發(fā)送如下數(shù)據(jù)包:
FE 06 A0 A1 01 00 01 00 FF
地址0x0002的模塊收到數(shù)據(jù)包之后,會(huì)將數(shù)據(jù)發(fā)送至目標(biāo)地址0x0001模塊,STM32最小系統(tǒng)板接收地址0x0001模塊收到的數(shù)據(jù),進(jìn)而對(duì)收到的數(shù)據(jù)進(jìn)行解析,然后點(diǎn)亮最小系統(tǒng)板上的綠色LED。
要想實(shí)現(xiàn)對(duì)數(shù)據(jù)包的解析,要完成如下幾部分工作:
-
正確接收完整數(shù)據(jù)包
-
可以采用空閑中斷接收 -
采用定時(shí)器的方式,保證接收數(shù)據(jù)的完整
-
對(duì)數(shù)據(jù)包進(jìn)行解析
根據(jù)DL-LN33模塊協(xié)議及自定義協(xié)議,綜合解析數(shù)據(jù)包內(nèi)容。
此Demo可用于模擬根據(jù)需要自動(dòng)觸發(fā)某個(gè)動(dòng)作或者自動(dòng)上傳傳感器數(shù)據(jù)至其他模塊。
自定義通訊協(xié)議說(shuō)明
-
數(shù)據(jù)位中第一位01代表綠色指示燈: -
數(shù)據(jù)位中第二位代表輸出電平:
-
0x00代表輸出低電平 -
0x01代表輸出高電平
通訊協(xié)議自己可以根據(jù)需要隨意定義,只要能保證數(shù)據(jù)傳輸?shù)臏?zhǔn)確性、解析數(shù)據(jù)包后的結(jié)果唯一性即可,因?yàn)楸纠皇菍?shí)現(xiàn)點(diǎn)燈功能,所以通訊協(xié)議設(shè)定的比較簡(jiǎn)單。
按鍵觸發(fā)數(shù)據(jù)傳輸
按鍵按下將發(fā)送如下數(shù)據(jù)包:
FE 05 91 20 02 00 32 FF
點(diǎn)擊核心板上的按鍵,上面數(shù)據(jù)將通過(guò)地址0x0001的模塊傳輸出去,地址0x0002的模塊收到數(shù)據(jù)之后,模塊上的紅燈亮5S。
按鍵觸發(fā)代碼
key?=?KEY_Scan(0);
??
if(key)???
{?
?switch(key)????
?{?
??case?KEY0_PRES:
???{
????memset(USART3_TX_BUF,?0,?sizeof(USART3_TX_BUF));?
????????
????//?讓地址0x0002的模塊亮5S:FE 05 91 20?02 00 32 FF
????USART3_TX_BUF[0]?=?0xFE;
????USART3_TX_BUF[1]?=?0x05;
????USART3_TX_BUF[2]?=?0x91;
????USART3_TX_BUF[3]?=?0x20;
????USART3_TX_BUF[4]?=?0x02;
????USART3_TX_BUF[5]?=?0x00;
????USART3_TX_BUF[6]?=?0x32;
????USART3_TX_BUF[7]?=?0xFF;
????zigbee_send_cmd_by_lens(USART3_TX_BUF,8,"",10);
????
????printf("KEY0_PRES...\r\n");
???}
???break;?????????
??default:
???break;
?}???
}
這里注意封裝的函數(shù):
u8?zigbee_send_cmd_by_lens(u8?*cmd,u8?lens,u8?*ack,u16?waittime);
由于發(fā)送的指令中,會(huì)存在0x00,所以串口發(fā)送函數(shù)要有一個(gè)發(fā)送字節(jié)長(zhǎng)度的參數(shù)才行,否則發(fā)送的數(shù)據(jù)可能不全。
參數(shù)ack可以傳進(jìn)去一個(gè)返回值的數(shù)組,用于校驗(yàn)指令返回值是否正確,進(jìn)而判斷指令是否發(fā)送成功。
因?yàn)辄c(diǎn)亮模塊上的紅色LED的指令,屬于內(nèi)部端口指令,沒有返回值,所以咱們的ack參數(shù)傳進(jìn)去一個(gè)空字符串即可。
結(jié)果展示
小結(jié)
這是DL-LN33 ZigBee模塊介紹的最后一片網(wǎng)文了,有什么問(wèn)題大家可以留言區(qū)交流,或者加我微信進(jìn)行直接溝通,本文的測(cè)試代碼可以在留言區(qū)置頂消息中獲取。
參考閱讀
2.4G ZigBee無(wú)線自組網(wǎng)mesh網(wǎng)絡(luò)模塊簡(jiǎn)介
DL-LN33 ZigBee模塊系列網(wǎng)文第二篇:指令分析/地址和組網(wǎng)信息的修改
DL-LN3X ZigBee模塊上位機(jī)網(wǎng)絡(luò)拓?fù)滠浖菔炯靶盘?hào)強(qiáng)度測(cè)試
免責(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)系我們,謝謝!