Digi公司XBee Pro SX模块的通讯方式

无人机行业的不少客户反馈,第一次接触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   “char srudh_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;   //atdl  uart_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; //atwr  uart_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字节长度 +1byte frame type+1byte frame id+8byte目标mac+1byte options+数据字节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等。    


安全出行 途乐360盲眼试驾活动九江启幕
12W开关电源芯片最优解——U65153
常见的小样本学习方法
光端机的发展趋势是什么??
比特币DoS漏洞为何如此严重?
Digi公司XBee Pro SX模块的通讯方式
m12连接器接口优势及应用
部分化工巨头2020上半年销售额
室外消火栓监测方案
LUNALUXX悬浮台灯:会发光的小飞碟
利用ZDS5000示波器完成通信时序完整性测试
盐雾耐久循环试验机的优缺点
【蓝桥杯嵌入式】第四章 按键控制LED
西部数据暂停与华为的合作关系 并停止发货
14个可助你安全度夏的科技小玩意儿
六轮机器人完成全球首单机器人送餐上门服务
用单片机按键启停led灯程序编程教程
大气监测微站如何选择
变频器过载的原因及处理 变频器过载怎么处理设置参数
高电流、高精度、低噪音低压降稳压器究竟如何选择?