查看: 123462|回复: 60

蓝牙HC05模块探究-设置AT指令

  [复制链接]

该用户从未签到

发表于 2013-4-19 22:33 | 显示全部楼层 |阅读模式
   蓝牙HC05是主从一体的蓝牙串口模块,简单的说,当蓝牙设备与蓝牙设备配对连接成功后,我们可以忽视蓝牙内部的通信协议,直接将将蓝牙当做串口用。当建立连接,两设备共同使用一通道也就是同一个串口,一个设备发送数据到通道中,另外一个设备便可以接收通道中的数据。当然,对于建立这种通道连接是有一定条件,那就是对蓝牙设置好能进行配对连接的AT模式。 一般的蓝牙串口模块引脚:
  RXD:接收端
  TXD:发送端
  AT:设置工作模式(1、工作模式 2、AT指令设置模式)
  VCC:模块供电正极(5V)
  GND:模块供电负极
例如:
136.jpg
一般的蓝牙模块使用有三种。
  第一:蓝牙从设备与电脑配对连接(1、电脑自带蓝牙 2、电脑不带蓝牙,这事需要蓝牙适配器)
  第二:蓝牙从设备与手机配对连接
  第三:蓝牙从设备与蓝牙主设备配对连接
HC05蓝牙模块的AT模式设置的方法大致有三种:一、默认设置二、用USB转UART模块设置三、用带有蓝牙设置的主控器串口程序进行设置
  第一:主要默认设置:
    模块工作角色:从模式
    串口参数:38400bits/s 停止位1位无校验位
    配对码:1234
    设备名称:HC-05
    连接模式:任意蓝牙设备连接模式(恢复默认设置 AT指令:AT+ORGL
  第二:用USB to UART模块设置蓝牙
113.jpg
    蓝牙与USB转串口模块连接方式,RXD-TX TXD-RX VCC-VCC GND-GND
    要设置蓝牙AT指令,必须让AT引脚置高,然后接上蓝牙模块,当蓝牙模块state灯变为慢闪,则表明已经进入AT模式。(j将蓝牙模块与转串口模块对插,用跳线将AT对应的引脚接VCC)这时候将转串口模块接入电脑,打开超级终端或者串口调试助手便可以开始设置AT模式。
    打开串口调试助手,测试AT指令,找到相应串口号后,注意两点,1、设置AT模式的波特率为38400 2、输入指令后加上回车后换行,发送后返回OK。(串口调试助手下载地址:http://www.arduino.cn/forum.php?mod=viewthread&tid=1183
Q2222.jpg
下面来设置模块为从机模式,依次输入指令
AT+NAME=Bluetooth-Slave  蓝牙名称为Bluetooth-Slave
AT+ROLE=0                蓝牙模式为从模式
AT+CMODE=0               蓝牙连接模式为任意地址连接模式
AT+PSWD=1234             蓝牙配对密码为1234
AT+UART=9600,0,0       蓝牙通信串口波特率为9600,停止位1位,无校验位
AT+RMAAD                 清空配对列表
相应返回OK表示设置成功。这个时候的蓝牙就可以与电脑主机或者手机配对通信。需要注意的是设置指令里的符号不要在中文状态下输入,否则不会返回相应指令。

第三:用Arduino配置蓝牙AT指令
步骤一 给Arduino下载程序

#define AT 2
#define LED 13
void setup()
{
       pinMode(LED,OUTPUT);
       pinMode(AT,OUTPUT);
       digitalWrite(AT,HIGH);
       Serial.begin(38400);//这里应该和你的模块通信波特率一致
       delay(100);
       Serial.println("AT");
       delay(100);
       Serial.println("AT+NAME=OPENJUMPER-Bluetooth");//命名模块名
       delay(100);
       Serial.println("AT+ROLE=0");//设置主从模式:0从机,1主机
       delay(100);
       Serial.println("AT+PSWD=1234");//设置配对密码,如1234
       delay(100);
       Serial.println("AT+UART=9600,0,0");//设置波特率9600,停止位1,校验位无
       delay(100);
       Serial.println("AT+RMAAD");//清空配对列表
}
void loop()
{
       digitalWrite(LED, HIGH);
       delay(500);
       digitalWrite(LED, LOW);
       delay(500);
}
步骤二 蓝牙与Ardino连线 RXD-TX TXD-RX VCC-VCC GND-GND AT-2 (当很多传感器扩展板带有蓝牙模块接口,则可以直接将蓝牙插在扩展板上接口,不用麻烦接线)。
步骤三 按下Arduino的复位按键,让程序开始运行一次,当发现板载L灯500ms闪烁时则表明已设置成功。

两个蓝牙模块配对连接教程:(具体AT指令参考HC05AT指令集)
简单说 一个蓝牙设置为主机,一个蓝牙设置为从机,设置对应密码波特率AT指令后,自动连接配对。


第一步:准备好做主机的蓝牙模块,用cp2102转串口模块连接蓝牙并进入AT设置模式(指示灯慢闪)
分别输入下面AT指令 (注意输入指令后加上回车后换行,发送后返回OK表示设置成功,如下指令是一条一条输入,切勿所有一起输入再点发送。设置完成后可以通过AT指令类似AT+NAME?这样的指令查询刚刚设置是否成功,具体参考HC05AT指令集


  AT+NAME=Bluetooth-Master  蓝牙主机名称为Bluetooth-Master
  AT+ROLE=1                蓝牙模式为主模式
  AT+CMODE=1              蓝牙连接模式为任意地址连接模式
  AT+PSWD=1234             蓝牙配对密码为1234
  AT+UART=9600,0,0       蓝牙通信串口波特率为9600,停止位1位,无校验位
  AT+RMAAD                 清空配对列表


第二步:准备好做从机的蓝牙模块用cp2102转串口模块连接蓝牙并进入AT设置模式(指示灯慢闪)
分别输入下面AT指令 (注意输入指令后加上回车后换行,发送后返回OK表示设置成功
(如果设置没有效果可以先恢复出厂设置AT+ORGL)


  AT+NAME=Bluetooth-Slave  蓝牙名称为Bluetooth-Slave
  AT+ROLE=0                蓝牙模式为从模式
  AT+CMODE=1              蓝牙连接模式为任意地址连接模式
  AT+PSWD=1234             蓝牙配对密码为1234
  AT+UART=9600,0,0       蓝牙通信串口波特率为9600,停止位1位,无校验位
  AT+RMAAD                 清空配对列表

第三步:分别给主模块和从模块选择进入工作模式,并重新上电。两个模块会自动连接然后配对,这样后,状态灯会出现慢闪烁指示。






该用户从未签到

发表于 2014-9-19 14:01 | 显示全部楼层
本帖最后由 Peter58 于 2014-9-19 14:06 编辑
海神 发表于 2014-9-19 09:48
检查你回车换行  加了没有   ,确定你版本是HC05


谢谢你回复,用串口一直都没响应,回车换行都加了,最后用“阿杜”程序(用的串口1)成功设置好了
程序也是本坛一个朋友的,我稍微修改了下。
其实这里define AT 23没必要,直接把KEY加3-5V高电平,直接进入AT模式就可以了,如果要把KEY脚插在这个管脚上,比较麻烦点,“阿杜”上电有一段检测时间,而23脚没有高电平出来,所以蓝牙模块是没进入AT模式的,我自已试验所得,不代表所有的都是这样。
------------------主机------------------
/*用于蓝牙模块的主机的设置,配置方法很多,这里只使用从arduino对模块设置AT指令的方法(= =嗯我知道我非主流)。

即把程序导入arduino后将USB和电脑!断开!。
连接模块,再连接USB(确保电脑中未开启arduino IDE或相关串口软件!!),就可以完成AT设置。之后断开模块的电源(不断会导致程序写入arduino发生错误。),连接USB导入相关程序(测试程序在2楼)即可。

Ps:一定要断开保证有关串口的软件保持关闭才能完成设置,否则系统会把写入信息写到电脑上而不是蓝牙模块里。*/


#define AT 23
#define LED 48
void setup()
{
  pinMode(LED,OUTPUT);  
  pinMode(AT,OUTPUT);  
  digitalWrite(AT,HIGH); //AT的电平给高,用于输入AT指令
  Serial1.begin(9600);//这里应该和你的模块通信波特率一致
  delay(100);
  Serial1.println("AT");
  delay(100);
Serial1.println("AT+NAME=GP-BT01");//命名模块名
  delay(100);
  Serial1.println("AT+ROLE=1");//设置主从模式:0从机,1主机
  delay(100);
  Serial1.println("AT+PSWD=0000");//设置配对密码,如1234
  delay(100);
  Serial1.println("AT+UART=9600,0,0");//设置波特率9600,停止位1,校验位无
  //Serial.println("AT+UART=38400,0,0");//设置波特率38400,停止位1,校验位无
  delay(100);
  Serial1.println("AT+RMAAD");//清空配对列表
  delay(100);
  Serial1.println("AT+BIND=98D3,31,6004D2");//设定从机的地址,保持格式一致。。

  delay(100);//ADDR:1234:56:abcdef
  Serial1.println("At+inq");//查询周边蓝牙设备
  delay(100);
  Serial1.println("AT+CMODE=1");//开启自动连接1是自动连接,0是被动,2回环角色
  delay(100);
}
void loop()
{
  digitalWrite(LED, HIGH);    /*只用于证明程序导入arduino成功,和设置蓝牙模块无关*/
  delay(500);
  digitalWrite(LED, LOW);
  delay(500);
}


该用户从未签到

发表于 2013-4-21 15:34 | 显示全部楼层
海神兄你好,感谢分享蓝牙教程,请问如果想要将蓝牙模块设置成既是主模块又是从模块该怎样操作呢?感谢~

该用户从未签到

发表于 2013-4-21 15:38 | 显示全部楼层
还有一个疑问想请教一下,如何能够设置蓝牙开启或者关闭呢?一直都比较困惑,请海神兄帮忙,再次感谢~

该用户从未签到

 楼主| 发表于 2013-5-10 18:10 | 显示全部楼层
面包树 发表于 2013-4-21 15:34
海神兄你好,感谢分享蓝牙教程,请问如果想要将蓝牙模块设置成既是主模块又是从模块该怎样操作呢?感谢~ ...

蓝牙是主从一体,但不能既是主机有是从机,一时只能设置一种状态··

该用户从未签到

发表于 2013-5-29 15:45 | 显示全部楼层
请问设置蓝牙参数的软件是什么软件?

该用户从未签到

 楼主| 发表于 2013-5-29 17:45 | 显示全部楼层
惜晨 发表于 2013-5-29 15:45
请问设置蓝牙参数的软件是什么软件?

http://www.arduino.cn/forum.php?mod=viewthread&tid=1183  用串口调试助手,可以去这里下载。

该用户从未签到

发表于 2013-6-8 14:16 | 显示全部楼层
如果要设置另一个Arduino上的蓝牙模块为主机,与示例程序中的从机通信,应该怎么办?

该用户从未签到

 楼主| 发表于 2013-6-8 14:29 | 显示全部楼层
Dugucloud 发表于 2013-6-8 14:16
如果要设置另一个Arduino上的蓝牙模块为主机,与示例程序中的从机通信,应该怎么办? ...

你要想办法先把两蓝牙设置AT指令,让他们配对连接上就行··

该用户从未签到

发表于 2013-8-12 14:51 | 显示全部楼层
为什么我的指令只有AT和AT+NAME可以成功设置,其他的指令没法正常

该用户从未签到

 楼主| 发表于 2013-8-12 16:58 | 显示全部楼层
yyx9081 发表于 2013-8-12 14:51
为什么我的指令只有AT和AT+NAME可以成功设置,其他的指令没法正常

检查你指令发送对没有,在指令后加回车 空格,然后点发送····
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

热门推荐

Arduino16进制字符串转ASCII(下)
Arduino16进制字符串转ASC
在Arduino16进制字符串转ASCII(上)(简称:上文)基础上,举一反三,超越自我,提高
OLED 128*64自制可达10000000个选项的菜单(已更新)
OLED 128*64自制可达10000
OLED 128*64自制可达10000000个选项的菜单 温馨提示: 建议占个楼再食用本帖子
ps2遥控小车——uno实现
ps2遥控小车——uno实现
前几天在阁楼发现了好久以前3d打印,激光切割的底盘,于是决定做这个东西 正好手上又
.h .cpp源代码转.ino草图
.h .cpp源代码转.ino草图
在Github上下载了源码,是.h 和.cpp文件,请问一下,如何才可以转成可以在arduinoIDE
Atmega8/16等AVR单片机改装成Arduino板子
Atmega8/16等AVR单片机改
Atmega8/16改装Arduino板子想把AVR单片机改装成arduino板的,可以通过一下开源库来支
Copyright   ©2015-2016  Arduino中文社区  Powered by©Discuz!   
快速回复 返回顶部 返回列表