Arduino+蓝牙模块+安卓手机通信的初步实现(2)

引言:

摸索了好久,查阅了好久终于可以动手弄了。想了想还是不要着急写具体的实现,还是科普一下基础的UNO的板子的知识。为了方便就弄大神的帖子吧,所以这篇博文是转载:http://www.cnblogs.com/rayray/p/3157601.html

show一下蓝牙的模块:

为了不麻烦就直接用大神的图片,省的再拍照片了

蓝牙参数特点

1.蓝牙核心模块使用HC-06从模块(HC-05的是主从在一起的,可以设置主从),引出接口包括VCC,GND,TXD,RXD,预留LED状态输出脚,单片机可通过该脚状态判断蓝牙是否已经连接

2.led指示蓝牙连接状态,闪烁表示没有蓝牙连接,常亮表示蓝牙已连接并打开了端口

3.输入电压3.6~6V,未配对时电流约30mA,配对后约10mA,输入电压禁止超过7V!

4.可以直接连接各种单片机(51,AVR,PIC,ARM,MSP430等),5V单片机也可直接连接

5.在未建立蓝牙连接时支持通过AT指令设置波特率、名称、配对密码,设置的参数掉电保存。蓝牙连接以后自动切换到透传模式

6.体积 3.57cm*1.52cm

7.该蓝牙为从机从机能与各种带蓝牙功能的电脑、蓝牙主机、大部分带蓝牙的手机、Android、PDA、PSP等智能终端配对,从机之间不能配对

Arduino 与蓝牙模块连接方法

VCC:接Arduino的5V。
GND:接Arduino的GND。

TXD:发送端,一般表示为自己的发送端,接Arduino的RX。
RXD:接收端,一般表示为自己的接收端,接Arduino的TX。

注释:大神的是UNO型号的板子,这么连是可以的,但是我的是LEONARDO,不能这么玩。
正常通信时候本身的TXD永远接设备的RXD!正常通信时RXD接其他设备的TXD,

自收自发:顾名思义,就是自己接收自己发送的数据,即自身的TXD直接连接到RXD,用来测试本身的发送和接收是否正常,是最快最简单的测试方法,当出现问题时首先做该测试确定是否产品故障。也称回环测试。

线接好后,把Arduino上电后,蓝牙的指示灯是闪烁的,表明没有设备连接上。

如图所示,LED常亮,已经和Android手机连接:

Arduino 调试源代码:

 1 void setup()
 2 {
 3  Serial.begin(9600);
 4 }
 5  
 6 void loop()
 7 {
 8   while(Serial.available())
 9    {
10      char c=Serial.read();
11       if(c==A)
12         {
13           Serial.println("Hello I am amarino");
14         }
15    }
16 }

这段代码的解释:

首先设置串口的传送的速率是9600波特,在loop循环中程序不断的读取串口的信息,就是蓝牙连接的pin0和pin1两个针脚。

如果蓝牙模块接收到字符A,那么这个字符就通过蓝牙的TXD发送到了Arduino的RX针脚中,程序判断时字符A就向串口的OUTPUT发送一句话。

但是如果是LEONARDO型号的板子,那么PC~Arduino和蓝牙模块~Arduino这两个串口就会争用,导致不能通信,具体谁占用谁,还得好好的学习电路基础知识,看懂LEONARDO的电路原理图,这个后续。

 

将代码复制粘贴到IDE,烧录程序到Arduino:

 

Arduino 蓝牙与Android 通信的实现

首先下载Android的蓝牙管理软件 Amarino(我在其它的博文中有介绍),安装上Amarino 后,启动Android的蓝牙,打开Amarino客户端

在右下角Add BT Device中就能找到蓝牙的名字

 

在点击connect后,会弹出输入PIN的弹框,蓝牙默认PIN为1234,这里就没有截图说明了。

如图为连接成功后的界面:

 

点击Monitoring 可以看到蓝牙的连接信息如图

 连接成功之后,就是要看数据发送时候正常。这里直接点击send就可以实现发送

参考Arduino代码,当Arduino接收都A符号时,就会在COM输出对应内容,则表明蓝牙通信正常 如图

 

 

总结:

这是大神的实验过程,不过到我这里就不行了,因为我们的Arduino板子的型号是不同的。

 后记:

今天终于有了一块UNO的板子了,同时拥有我的LEONARDO,也买了一块电源这样就不用通过USB让PC对板子供电了。

测试的结果是:

(1)UNO的板子,由于USB串口是非集成的,如果我占用了pin0和pin1那么在软件烧录的时候就会报错,这也就说明了,pin针脚的优先级高于USB,就是说你占用了pin针脚,那么USB串口就不可用了,所以烧录会报错。我拿掉pin针脚的接线然后就能烧录了。

烧录完成后,不管是USB供电还是电源供电,我在Android软件端的输入口输入A,就能在Android的输出口看到Hello I am amarino,说明这是的串口只有pin针脚在工作,USB串口没有工作。

(2)LEONARDO就是USB串口的优先级很高,占用pin0和pin1后,正常烧录程序,并且pin针脚看似不工作的状态,发送数据任何地方都收不到。断开USB用电源供电也不能接受数据,这里有点不懂,留作以后讨论。

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。