xbee模块和单片机_美国DIGI公司的XBee模块无线通讯实验

本文介绍了如何使用X-CTU软件配置DFRobot的XBee模块与单片机进行无线通讯。首先,确保正确安装了Arduino控制器驱动,然后通过X-CTU设置模块参数,如波特率、频道和PAN ID。完成配置后,编写串口通信程序,实现Arduino主机通过XBee模块控制从机LED灯的亮灭。实验中,1mW的XBee模块对电源要求较低,但若使用高功率模块,建议采用外部供电。
摘要由CSDN通过智能技术生成

DFRobot公司出品的XBee适配器驱动就是Arduino Duemilanove控制器的驱动,因为它们都是采用了FIDI USB驱动,如果您已经安装了Arduino Duemilanove控制器的驱动,就不用安装了,如果您使用的是Arduino UNO控制器,可以在Arduino官网下载一个Arduino 0018版编程软件,它里面的drivers目录里就可以找到这个驱动。如图:(所有图片双击,都可以放大看!)

PC机通过USB线直接与XBee适配器连接,方便对XBee模块进行配置,把XBee模块按照正确方向,插到XBee适配器上,然后,用USB电缆把XBee适配器与PC机连接好之后, 运行X-CTU软件。

首先我们在“PC Settings”中里选择XBee适配器映射出来的串口通信端口(我实验中映射出的串口号为COM4),并设置好波特率9600b/s等参数。XBee模块出厂里默认的设置为9600,8N1。

点击“Test/Query”按钮,测试XBee模块是否能连接上。如果一切正常,我们将看到如下图中的Com test对话框,会显示模块型号及版本号。

测试通过后,转到“Modem Configuration”选项。点击“Download new versions...”按钮,升级软件(把所有杀毒软件暂时退出)。

先点击“Modem Parameters and Firmware”中的“Read”按钮读出XBee模块中的当前参数,接着在读出的“Networking & Security”中将“Channel”设为“C”,将“PAN ID”设置为“1234”。

在“Serial interfacing”的“Interface Data Rate”中,可以修改XBee的波特率,XBEE模块默认波特率9600,可以不用修改,但我这次实验还是把波特率从9600b/s改成了115200b/s。

上述主要参数设置好后,点击“Write”按钮将参数写到XBEE模块中,这里只做一个最简单的点对点网络,所以只需利用XBee适配器,把2个XBee模块的参数设置一致即可。

这时如果您突然打算,把“Write”到XBee模块中的参数再“Read”出来,会出现问题,因为您已经把XBee模块的波特率设置为115200b/s,所以必须在X-CTU界面的“PC Settings”选项中把波特率从9600改为115200,才能“Read” 读取XBee模块参数。

现在可以把两个XBee模块从适配器上拔下来,再插到Arduino控制板上的XBee V5传感器扩展板的专门插槽里。

OK,编写一个串口通信程序,测试下XBee无线通信是否正常。测试结果,当然没问题。

这个无线通信实验较简单,就是:按下与Arduino主机连接的亮灯按钮或者关灯按钮,通过无线通讯,控制Arduino从机上的LED灯亮灭。

注意:下载程序到Arduino控制器时,不要把XBee模块插在Arduino控制器的传感器扩展板V5上,程序下载完再把它插上去。

主机程序:

int button_open =4;//开灯按钮连在数字端口4

int button_close =5; //关灯按钮连在数字端口5

char flag;//定义“向从机发送LED灯亮灭标志”的变量

void setup()

{

pinMode(button_open, INPUT); //设置按钮为输入模式

pinMode(button_close, INPUT);

Serial.begin(115200);//启动串口通信,波特率为115200b/s

}

void loop()

{

//如果亮灯按钮按下同时关灯按钮松开

if( digitalRead(button_open)==LOW&&digitalRead(button_close)==HIGH)

{

flag='a';

Serial.print(flag);//向从机发送灯亮标志

}

//如果关灯按钮按下同时亮灯按钮松开

if(digitalRead(button_close)==LOW&&digitalRead(button_open)==HIGH)

{

flag='b';

Serial.print(flag);//向从机发送灯灭标志

}

delay(20);//延时,等待数据发送成功

}

从机程序:

int ledpin=9;//LED灯连在数字端口9

int val;   //定义“接受主机发来的LED灯亮灭标志”的变量

void setup()

{

pinMode(ledpin,OUTPUT);//设置LED灯为输出模式

digitalWrite(ledpin,HIGH);//初始化使LED灯熄灭

Serial.begin(115200);//启动串口通信,波特率为115200b/s

}

void loop()

{

if(Serial.available()>0) //查询串口有无数据

{

val=Serial.read();//读取主机发送的数据

if(val=='a')//如果主机发送字符'a',则点亮LED

{

digitalWrite(ledpin,LOW);//LED灯点亮

}

if(val=='b')//如果主机发送字符'b',则熄灭LED

{

digitalWrite(ledpin,HIGH);//LED灯熄灭

}

}

}

这次无线通讯实验采用的是1mW的XBee模块,所以对电源要求不高,如果采用发射功率60mW,传输距离1600米的XBee PRO模块,耗电也相对大些,直接用USB供电就有点小牛拉大车的感觉,所以建议使用外部供电,保证模块能正常工作。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值