cooska

前人种树,后人乘凉

导航

arduino蓝牙通讯

Posted on 2011-01-13 13:02  cooska  阅读(3506)  评论(0编辑  收藏  举报

玩硬件和软件最大的不同,就是需要零件设备。这次的目标是要实现arduino通过蓝牙和PC通讯,arduino mega 1280必须要连接一个蓝牙无线串口设备才能实现。所以要添加下面的东西:

 

1. 蓝牙无线串口模块。

 

2. 面板的连接线,这个便宜,8块就长的短的,花花绿绿一大把。

 

 

 

蓝牙串口模块有4个接线口,分别是 5v, GND, TX, RX,非常简单,对应电源,以及收发端。原理上,这个模块相当于一个串口的中转站,一端和PC间通过蓝牙协议无线连接PC的蓝牙串口,另一端和arduino的串口设备UART通过连线直接相连,这样,就相当于在PCarduino之间搭建了一个通讯桥梁,使两者能够通过串口设备进行通讯。那么,USB线呢?我们写好程序通过USB线把代码上载后,USB线就可以去掉了,以后的通讯,直接通过无线蓝牙就能完成。当然,这个通讯是指PC的程序和arduino的程序之间,要想重新上载新的程序,还得通过USB连线来完成。

接下来开始连线。前面有说过,arduino mega 12804UART,也就是4个串口,接口01141516171819两两对应于这4个串口的收,发端。另外,板上还有3.3v, 5v, GND,和Vin接口,提供各种电压的输出,其中,Vin代表的是arduino的输入电压。不过要注意,输出的负载电流都不能超过50mA,否则就有烧掉的危险。连线如下图:

 

 

红线连接arduino5v和蓝牙串口模块的5v;黑线连接arduino和蓝牙串口模块的GND;黄线连接arduinoRx和蓝牙模块的Tx;绿线连接arduinoTx和蓝牙模块的RxOk,大功告成。

 

接下来就是写程序了。为了测试通讯,PC通过无线连接向arduino发送一个字符't'arduino收到后闪一下灯,并向PC反馈一个字符串"echo"。程序如下:

 

const int ledpin = 13;

const int pinRx = 0;

const int pinTx = 1;

 

void setup()

{

Serial.begin(9600);

pinMode(ledpin, OUTPUT);

}

void loop()

{

int val = Serial.read();

if (val == 't')

{

digitalWrite(ledPin, HIGH);   // set the LED on

delay(500);

digitalWrite(ledpin, LOW);

delay(500);

Serial.println("echo");

}

}

 

相对上一个程序,这里面有些新的东西,就是串口对象Serial,这个对象对应于01接口的串口设备;当然,其他3个串口也有对应的串口对象,名字分别为Serial1, Serial2, Serial3。编程参考可以看这个链接:http://arduino.cc/en/Reference/Serial。这里使用的对象接口函数很简单,Serial.begin(波特率),用于初始化串口并指定通讯的波特率;Serial.read()是从串口的接收缓冲区中读出一个字符,如果没有,返回-1Serial.println(字符串)用于输出一个带回车符的字符串。需要提一下的是,arduino的第一个串口和FTDI USB-to-TTL串口芯片相接,也就是说这个串口设备可以通过USB线连接PC

程序写完,就可以上传运行了。蓝牙模块背面有2个灯,分别是powerstate,通电后power就亮了,state灯却一直闪烁,这是因为蓝牙还没有连接。PC端这时需打开蓝牙管理,然后搜寻新的设备,会找到一个叫linvor的蓝牙设备。打开,这个设备只有一个蓝牙串口。点右键连接,跳出配对密码输入框,输入密码"1234"即可。连接完成后,可以看到蓝牙模块上的state灯长亮了,这表明连接正常,就可以进行通讯了。

既然是通讯,PC端也要有个基于串口的通讯程序。除了使用arduino开发环境自带的Serial Monitor,自己也可以找一个流行的。咱是懒人,就用开发环境自带的好了,反正应用很简单,这个程序也够用了。点击开发环境最右面Serial Monitor那个图标,就跳出下面这个界面。不过要注意,在TOOL菜单下的COM选择,应该是对应蓝牙串口所用的那个串口编号,而不是USB的,否则,呵呵,就不是蓝牙无线通讯而是USB串口通讯了。

 

 

最后补充一下,蓝牙模块的信息是可以通过AT命令来进行改动的,缺省情况下,蓝牙设备名是"linvor", 通讯波特率为9600,配对密码为"1234"。具体说明如下:

 

通过串口与电脑连接,再通过串口调试助手给模块发送命令可以配置模块的一些参数,

具体的配置方式如下:

1)、测试通讯:发送AT 命令,返回ok

2) 更改波特率

模块默认的波特率是9600

发送AT BAUD1 返回OK1200

发送AT BAUD2 返回OK2400

……

BAUD1------------1200

BAUD2------------2400

BAUD3------------4800

BAUD4------------9600

BAUD5------------19200

BAUD6------------38400

BAUD7------------57600

BAUD8------------115200

BAUD9------------230400

A--------------------460800

B--------------------921600

C--------------------1382400

不建议使用超过115200 的波特率,因为大多系统都没有提供高

115200 的波特率,PC 机也是如此,波特率设置超过115200 以后,

电脑无法使用,要使用波特率高于115200 的系统才能重新发AT 命令

设置低的波特率,否则无法恢复低波特率了。

AT 命令设置好波特率后,下次上电不需要再设置,掉电可以

保存波特率。

3)更改蓝牙名字

发送:AT NAMEname

返回:OKname

参数name:你所要设置的名字,也就是蓝牙被搜索到的名字,

20 个字符以内。

例:发送AT NAMEJYOO

返回返回JYOO

参数可以掉电保存,只需设置一次

4)更改蓝牙配对密码

发送:AT PINXXXX

返回:OKsetpin

参数XXXX:所需设置的密码4 位,只需更改一次,掉电保存。