文档章节

Arduino与Android蓝牙通信笔记

Madmatrix
 Madmatrix
发布于 2014/08/03 19:09
字数 1504
阅读 1205
收藏 2


关于蓝牙模块的一些基础概念

蓝牙主机和从机

主机:能够主动发起扫描并匹配从机模块

从机:只能被扫描和匹配

一个模块可以即是主机也是从机


AT模式

蓝牙的AT模式就理解为设置模式好了。在设置模式下,我们设置一个蓝牙的以下重要参数:

  • 蓝牙模块名称。既你的蓝牙设备被别的设备扫描到时所显示的名字;

  • 如果是主从一体模块,可在AT模式下设置其角色;

  • 设置密码;

  • 通信波特率。需要注意,AT模式和工作模式下的波特率是不同的。

AT模式下,蓝牙模块无法被扫描并匹配。


工作模式

该模式下,蓝牙可以扫描、被扫描,匹配、被匹配。这是与AT模式相对的一个模式,该模式下就无法再对蓝牙模块进行设置了。


元件清单

Zduino UNO R3

OpenJumper 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系列蓝牙官方文档




© 著作权归作者所有

Madmatrix
粉丝 23
博文 14
码字总数 20643
作品 0
朝阳
私信 提问
咨询一个android设备间接力指令并通过蓝牙转发的问题

想用arduino做个遥控车,用手机进行控制,但有些应用场景可能距离很远,于是想在遥控车上再放一部android手机,手上控制的android手机A可以通过蜂窝、WiFi和车载android手机B进行通信,A给B...

lostsky0
2014/08/24
243
1
android开发笔记之2012版辅助开发工具包(ADT)新功能特性介绍及安装使用

原文链接:http://android.eoe.cn/topic/androidsdk 2012年的Android辅助设备开发工具包(ADK)是Android开放设备协议(AOA)设备的最新参考实现,它被用于帮助Android硬件辅助设备开发者 和...

sisuad
2013/07/09
227
0
手机与pcDuino蓝牙通讯

蓝牙,是一种支持设备短距离通信(一般10m内)的无线电技术。能在包括移动电话、PDA、无线耳机、笔记本电脑、相关外设等众多设备之间进行无线信息交换。利用“蓝牙”技术,能够有效地简化移动...

酸酸苹果汁
2014/01/13
877
0
怎么让安卓模拟器能GPS实时定位?

1: 安卓模拟器开启蓝牙(大部分模拟器都没有蓝牙, 听说Genymotion付费有, 微软的有?) + 安卓手机装bluetooth GPS Provider这个软件共享GPS. 这个能实现吗? 2: x宝上买GPS模块, arduino + 单片...

scaride
2017/03/12
1K
0
android与单片机通过USB通信

请教高手个问题:Android与单片机通过USB通信,单片机做主,Android做从。我看官方论坛可以用ADK,但是官方的单片机是Arduino ,是不是只可以用Arduino 那并且官方的IDE也是支持Arduino 的。...

lhbright
2013/06/26
2.7K
3

没有更多内容

加载失败,请刷新页面

加载更多

JAVA 编写redisUtils工具类,防止高并发获取缓存出现并发问题

import lombok.extern.slf4j.Slf4j;import org.springframework.data.redis.core.BoundHashOperations;import org.springframework.data.redis.core.BoundValueOperations;import org.......

huangkejie
21分钟前
3
0
JMM内存模型(一)&volatile关键字的可见性

在说这个之前,我想先说一下计算机的内存模型: CPU在执行的时候,肯定要有数据,而数据在内存中放着呢,这里的内存就是计算机的物理内存,刚开始还好,但是随着技术的发展,CPU处理的速度越...

走向人生巅峰的大路
38分钟前
86
0
你对AJAX认知有多少(2)?

接着昨日内容,我们几天继续探讨ajax的相关知识点 提到ajax下面几个问题又是必须要了解的啦~~~ 8、在浏览器端如何得到服务器端响应的XML数据。 通过XMLHttpRequest对象的responseXMl属性 9、 ...

理性思考
47分钟前
4
0
正则表达式基础(一)

1.转义 转义的作用: 当某个字符在表达式中具有特殊含义,例如字符串引号中出现了引号,为了可以使用这些字符本身,而不是使用其在表达式中的特殊含义,则需要通过转义符“\”来构建该字符转...

清自以敬
50分钟前
4
0
idea中@Data标签getset不起作用

背景:换电脑以后在idea中有@data注解都不生效 解决办法:idea装个插件 https://blog.csdn.net/seapeak007/article/details/72911529...

栾小糖
56分钟前
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部