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供电就有点小牛拉大车的感觉,所以建议使用外部供电,保证模块能正常工作。