無人機行業的不少客戶反饋,第一次接觸XBee Pro SX模塊時,看著整篇的文檔感覺頭大,不知從何下手。本文做個總結,以供有需要的朋友借鑒。
Digi公司的XBee Pro SX通訊方式主要分兩種,一種是透傳方式還有種是AIP方式,透傳使用起來比較簡單,但API的功能更為強大。
一、透傳模式
1、硬件方面準備:
XBee Pro SX模式×2、XBee調試底板×2、天線×2、Micro-USB連接線×2。
2、XCTU上位機:
官網鏈接:
https://www.digi.com/products/embedded-systems/digi-xbee/digi-xbee-tools/xctu
添加模塊:
添加另一個,同理:
3、選擇固件及配置傳輸方式
選擇固件:
4、AT指令
①打開串口
②先查詢下本機MAC, 注:"0x0D"是ASCII中的回車字符。
③將本機設為**廣播模式(即:DH=0,DL=0xFFFF)**,除了用AT指令,也可以在設置界面直接設置。當然,MCU程序里,只能用串口發送AT指令來設置了。
④發送“Hello XBEE”
注意:兩個XBee接上天線后距離不宜過近,以防損壞模塊,官方推薦2m左右。
5、用程序控制SX發送數據
①初始化設置目標MAC地址
unsigned char XBEE_Model_Set(void){ uint8_t date; while(UART_CheckFlag(UART1, UART_FlagRDRF)) //接收數據寄存器 空 0 date=UART_ReadDataReg(UART1); UART1->C2 |= UART_C2_TE_MASK; //發送使能UART_SendWait(UART1,SetCommand,3);//使XBEE進入AT命令模式,里面用字符存的“+++” UART1->C2|=UART_C2_RE_MASK;//接收使能 while(!UART_CheckFlag(UART1, UART_FlagRDRF)); //接收到數據 date=UART_ReadDataReg(UART1); if(date!=0x4f) return 1; //發送完數據后,順序接收到 0x4f--->0x4B--->0x0D(接收到OK) while(!UART_CheckFlag(UART1, UART_FlagRDRF)); date=UART_ReadDataReg(UART1); if(date!=0x4B) return 1; while(!UART_CheckFlag(UART1, UART_FlagRDRF)); date=UART_ReadDataReg(UART1); if(date!=0x0D) return 1; //ATDH“charSRUDH_CMD[14]="ATDH00000000 ";”, 為ASCII里的回車UART_SendWait(UART1,SRUDH_CMD,sizeof(SRUDH_CMD)); while(!UART_CheckFlag(UART1, UART_FlagRDRF)); date=UART_ReadDataReg(UART1); if(date!=0x4f) return 1; while(!UART_CheckFlag(UART1, UART_FlagRDRF)); date=UART_ReadDataReg(UART1); if(date!=0x4B) return 1; while(!UART_CheckFlag(UART1, UART_FlagRDRF)); date=UART_ReadDataReg(UART1); if(date!=0x0D) return 1; //ATDLUART_SendWait(UART1,SRUDL_CMD,sizeof(SRUDL_CMD)); while(!UART_CheckFlag(UART1, UART_FlagRDRF)); date=UART_ReadDataReg(UART1); if(date!=0x4f) return 1; while(!UART_CheckFlag(UART1, UART_FlagRDRF)); date=UART_ReadDataReg(UART1); if(date!=0x4B) return 1; while(!UART_CheckFlag(UART1, UART_FlagRDRF)); date=UART_ReadDataReg(UART1); if(date!=0x0D) return 1; //ATHP,先導碼UART_SendWait(UART1,HP_CMD,sizeof(HP_CMD)); while(!UART_CheckFlag(UART1, UART_FlagRDRF)); date=UART_ReadDataReg(UART1); if(date!=0x4f) return 1;while(!UART_CheckFlag(UART1,UART_FlagRDRF)); date=UART_ReadDataReg(UART1); if(date!=0x4B) return 1; while(!UART_CheckFlag(UART1, UART_FlagRDRF)); date=UART_ReadDataReg(UART1); if(date!=0x0D) return 1; //ATWRUART_SendWait(UART1,WRCommandf,sizeof(WRCommandf)); while(!UART_CheckFlag(UART1, UART_FlagRDRF)); date=UART_ReadDataReg(UART1); if(date!=0x4f) return 1; while(!UART_CheckFlag(UART1, UART_FlagRDRF)); date=UART_ReadDataReg(UART1); if(date!=0x4B) return 1;while(!UART_CheckFlag(UART1,UART_FlagRDRF)); date=UART_ReadDataReg(UART1); if(date!=0x0D) return 1; //ATCN,每次正確發送都會收到OK UART_SendWait(UART1,SetTimeCommandf,sizeof(SetTimeCommandf)); while(!UART_CheckFlag(UART1,UART_FlagRDRF)); date=UART_ReadDataReg(UART1); if(date!=0x4f) return 1; while(!UART_CheckFlag(UART1, UART_FlagRDRF)); date=UART_ReadDataReg(UART1); if(date!=0x4B) return 1; while(!UART_CheckFlag(UART1, UART_FlagRDRF)); date=UART_ReadDataReg(UART1); if(date!=0x0D) return 1; return 0;}
②發送數據
透傳模式下,只要把目標地址設定好,就可以直接發送數據: UART_SendWait(UART1,Xbee_Send,10); //將數據發送給XBEE
6、透傳模式下的各種AT指令可以詳看手冊說明。
二、API傳輸方式
API模式的傳輸功能非常強大,使用也很方便,建議在學會使用透傳模式后,上手API模式。具體使用方法是:
1、兩個模塊都這樣設置:
2、API 64位地址 傳輸協議
協議介紹:
3、API方式 “Hello XBEE”
接收端的協議同理。
4、用程序發送
不用AT指令設置目標地址,直接把目標地址包含在數組中就行。
//1byte幀頭+2byte字節長度+1byteFrametype+1byteFrameID+8byte目標MAC+1byteoptions+數據字節8byte+1byte和校驗 uint8_t XBEE_Send_Data[23]={0x7E,0x00,0x13,0x00,0x00,0,0,0,0,0,0,0,0,0x00,0,0,0,0,0,0,0,0,0x00}; //bit5 //bit14 UART_SendWait(UART1,XBEE_Send_Data,23);//將數據發送給XBEE注:API模式也有AT協議,可以查詢本機MAC等。
審核編輯:湯梓紅
-
模塊
+關注
關注
7文章
2695瀏覽量
47433 -
天線
+關注
關注
68文章
3196瀏覽量
140782 -
usb
+關注
關注
60文章
7936瀏覽量
264483 -
無人機
+關注
關注
229文章
10420瀏覽量
180138
原文標題:可在無人機上使用的Digi公司XBee Pro SX模塊快速上手
文章出處:【微信號:雨飛工作室,微信公眾號:雨飛工作室】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論