Arduino与Android蓝牙通信笔记
2014-08-03 19:09
211 查看
关于蓝牙模块的一些基础概念
蓝牙主机和从机
主机:能够主动发起扫描并匹配从机模块从机:只能被扫描和匹配
一个模块可以即是主机也是从机
AT模式
蓝牙的AT模式就理解为设置模式好了。在设置模式下,我们设置一个蓝牙的以下重要参数:蓝牙模块名称。既你的蓝牙设备被别的设备扫描到时所显示的名字;
如果是主从一体模块,可在AT模式下设置其角色;
设置密码;
通信波特率。需要注意,AT模式和工作模式下的波特率是不同的。
AT模式下,蓝牙模块无法被扫描并匹配。
工作模式
该模式下,蓝牙可以扫描、被扫描,匹配、被匹配。这是与AT模式相对的一个模式,该模式下就无法再对蓝牙模块进行设置了。元件清单
Zduino UNO R3OpenJumper Bluetooth V2.0
OpenJumper Bluetooth V2.0介绍
OpenJumper Bluetooth V2.0核心模块属于HC系列蓝牙模块中的HC-05主从模块。即主从一体,通过AT设置可改变其角色;该模块仅支持SPP(Serial Port Profile,串行端口规范)规范,因此也只能实现“无线串口”通信功能,而无法支持像蓝牙耳机或蓝牙键盘那样的功能;
为了正确连接该模块,需要了解下面的重要参数:
AT模式
串口波特率:38400bps,停止位:1位,校验位:无
工作模式
串口波特率:9600bps,停止位:1位,校验位:无
指示灯含义
该模块有两个LED:State,状态指示灯,Link,连接指示灯。他们的闪烁定义如下:
State
快闪(0.5s间隔):搜索状态或等待外部链接
慢闪(1s间隔):蓝牙设置模式
双闪(间隔0.5s亮2次,灭3s):配对成功,可以通信,需要补充
Link
常亮:配对成功,可以通信
AT设置
1. 编写AT指令设置程序如下;/* * OpenJumper Bluetooth v2.0 AT模式设置代码 * updated by madmatrix */ #define LED 13 void setup() { pinMode(LED,OUTPUT); Serial.begin(38400); // AT模式下的波特率必须为该值,否则会设置失败 delay(100); Serial.println("AT"); delay(100); Serial.println("AT+NAME=My Bluetooth Test");//命名模块名 delay(100); Serial.println("AT+ROLE=0");//设置主从模式:0从机,1主机 delay(100); Serial.println("AT+PSWD=1234");//设置配对密码 delay(100); Serial.println("AT+UART=9600,1,0");// 设置工作模式下的波特率为9600,停止位1,校验位无 delay(100); Serial.println("AT+RMAAD");//清空配对列表 } void loop() { digitalWrite(LED, HIGH); // 可以在每次上传该程序的时候调整一下这里的延时 // 通过观察LED闪烁间隔来确认程序是否已经完成上传至arduino delay(1000); digitalWrite(LED, LOW); delay(1000); }
2. 在未连接蓝牙模块的情况下上传程序至arduino;
如果此时蓝牙通电,并且串口线与arduino的串口相连,将占用arduino uno唯一的串口(0和1号引脚),程序将无法上传到arduino;
虽然电脑与arduino是通过usb连接,但实际上usb通过arduino上的一块转换芯片连接至串口,所以本质上仍然是电脑通过串口与arduino相连。
3. 连接蓝牙与arduino,注意要将蓝牙模块的AT引脚连接至vcc(高电平),此时蓝牙模块的State灯慢闪(间隔1s),表示进入AT模式。连接好后,按下Arduino复位键。等待arduino上的RX和TX指示灯不再闪烁,此时蓝牙模块已经设置好。注意State指示灯闪烁频率不变;
也可以不按复位键,将usb拔了再插上。这个过程等于按下复位键。他们都会使arduino重新启动,将已经上传至控制板中的程序再运行一遍;
此时由于蓝牙模块与arduino通过串口相连,那么程序中的Serial.println的输出都通过串口发送至蓝牙模块,从而达到了设置蓝牙的目的;
在第一步中,我们设置的波特率为38400bps,此时的作用就是为了与处于AT设置模式下的蓝牙模块通信,如果设置为9600,设置将失败。
4. 拔下蓝牙模块的AT引脚和VCC引脚线,此时上传工作代码至arduino。
拔下AT引脚线,让AT引脚置空,下次蓝牙模块上电时将进入工作模式;
此时工作代码中的串口波特率应该设置为9600bps,这是蓝牙模块工作状态下的波特率,注意工作代码中的串口通信波特率也应该是9600bps。
5. 蓝牙模块上电(VCC引脚接通),但AT引脚保持悬空状态,此时蓝牙模块的State灯快闪(0.5s间隔),表示进入搜索状态,可使用手机进行配对。
测试
1. 随便写一段简单的工作代码#define LED 13 void setup() { Serial.begin(9600); pinMode(LED, OUTPUT); } void loop() { char val; val = Serial.read(); if (val != -1) { Serial.print("Arduino answer: Cogito Ergo Sum!"); } digitalWrite(LED, HIGH); delay(2000); digitalWrite(LED, LOW); delay(2000); }
2. 在Android手机上下载一个叫做“蓝牙串口”的小软件,装好后,打开软件,然后看到下面的界面:
修改模式为“会话模式”
点击连接,在弹出的窗口中,点击“扫描设备”,不出意外,会看到你设置的蓝牙模块的名字,然后选中:
等待软件弹出“连接到xxx”的提示后,再看蓝牙模块的指示灯,此时Link等常亮,State灯进入双闪状态。
这样就可以开始“会话”了,随便输入一段文字,就可以得到我们代码中预先设置好的答复:
参考
OpenJumper Bluetooth V2.0使用说明OpenJumper Bluetooth官方文档
HC系列蓝牙产品
更多HC系列蓝牙官方文档
相关文章推荐
- Arduino与Android蓝牙通信笔记
- Android通过蓝牙HC06与Arduino通信实例
- Android应用开发笔记(11):Android上的蓝牙通信功能的开发:BluetoothChat例程分析
- STC89C52单片机通过HC-06蓝牙模块与Android手机通信
- Android手机蓝牙与单片机蓝牙串通信开发经验总结
- Android上蓝牙通信功能开发:BluetoothChat例程分析
- 快速学习Android蓝牙编程---- 学习笔记
- Android蓝牙CS通信机制的深入挖掘与使用
- Android 通信--蓝牙
- android手机通过串口蓝牙透传模块与AVR单片机通信实例。。。蓝牙服务程序案例
- Android Bluetooth蓝牙开发\蓝牙协议\蓝牙通信例子_Android支持蓝牙4.0版本_BLE开发
- Android网络通信之蓝牙教程实例汇总
- Android 2.0上使用蓝牙通信代码片断(服务端、客户端、数据传输)
- android 串口通信,蓝牙通信等需要输出十六进制数据的方法
- Android网络通信(6):蓝牙
- 实现Android和PC之间的蓝牙通信
- Android蓝牙通信功能开发
- 实现Android和PC之间的蓝牙通信
- Android上的蓝牙通信功能的开发:BluetoothChat例程分析
- Android实现蓝牙客户端与服务器端通信示例