一,认识蓝牙模块HC-05
模块是淘宝购买的,有6个PIN脚,如图,依次为STSTE--RXD--TXD--GND--VCC--EN.
state——蓝牙连接状态,未连接输出低,连接后输出高
TX——信号发
RX——信号收
GND——地
+5V------板上有电压转换LDO,所以供电可以是5V
EN——使能端,需要进入AT模式时接3.3V,接单片机i/o引脚即可,高电平
AT模式操作方式
HC-05 蓝牙串口主从一体 AT 命令详解
要使用 AT 命令,首先要知道 HC-05 的波特率,然后要进入 AT 命令模式。
使用串口一定要知道三要素,一是波特率,二是串口号,三是数据格式,
HC-05只支持一种数据格式: 数据位8 位,停止位1 位,无校验位,无流控制.后面对数据格
式不对描述。
进入 AT 命令有二种方法:(建议直接把EN脚直接接到3.3v,不要去按按键,容易抖动。)
1,按住按键或EN脚拉高,此时灯是慢闪, SPP-05进入AT命令模式,默认波特率是38400;
此模式我们叫原始模式。原始模式下一直处于AT命令模式状态。
2, HC-05上电开机,红灯快闪,按住按键或EN拉高, HC-05进入AT命令模式,默认波特率
是9600;此模式我们叫正常模式。正常模式下只有按住按键或拉高EN才处于AT命令模式状
态。
注意:如果波特率没有设备正确, AT命令是执行无效的。
可以使用我们专用配置的测试软件,直观简单。如果下图。
一,如何让AT命令可以执行
A:看上图,正确的串口号要打开, ,点搜索端口,软件会依次打开电脑
上的端口.B:在波特率要选择正确, 原始模式是38400和正常模式是9600。
C: AT命令后面需要换行,然后点发送命令才有效,如果没有换行,发送命令,软件只
会把它们当作是字符。参考上图, AT命令下一行有光标符号。
二,基本操作方法
1, AT+ROLE设置主从模式: AT+ROLE?是查询主从状态;AT+ROLE=1是设成主, AT+ROLE=0
是设成从, AT+ROLE=2设成回环角色(Slave-Loop(回环角色)——被动连接,接收远
程蓝牙主设备数据并将数据原样返回给远程蓝牙)。
2, AT+RESET:HC-05复位
3, AT+VERSION?:获取HC-05的软件版本号,只能获取,不能修改。
4, AT+ORGL:恢复出厂默认设置,当把模块设置乱了,使用此命令进行恢复默认值。
5, AT+ADDR?:获取HC-05的蓝牙地址码,只能获取,不能修改。
6, AT+NAME? :获取HC-05的名字,AT+NAME=BSP-06,修改模块的名字为BSP-06,具体
名字自行修改。
7, AT+CLASS?:设置查询设备的类型,尽量不要去修改此参数。默认是1F00。
8, AT+IAC?:查询设置查询访问码,默认是9E8B33,尽量不要去修改此参数。
9, AT+PSWD? :查询设置配对密码,AT+PSWD=”0000”,密码要有双引号,密码是四位数字.
10, AT+UART: AT+UART?是查询当前模块的波特率, AT+UART=波特率是设置.
11, AT+CMODE: AT+CMODE?是查询当前连接模式。 AT+CMODE=0, 1, 2(0——指
定蓝牙地址连接模式(指定蓝牙地址由绑定指令设置) 1——任意蓝牙地址连接模
式(不受绑定指令设置地址的约束) 2——回环角色(Slave-Loop) 默认连接模式:
0)。
12, AT+BIND:AT+BIND?查询当前绑定地址,AT+BIND=NAP, UAP, LAP(用逗号隔开)。
13, AT+RMADD:从蓝牙配对列表中删除所有认证设备.
14, AT+STATE? :获取蓝牙模块工作状态.
15, AT+LINK=NAP,UAP,LAP:与远程设备建立连接。
16, AT+DISC:断开连接.
17, AT+RNAME? NAP, UAP, LAP:获取远程蓝牙设备名称.
18, AT+ADCN?:获取蓝牙配对列表中认证设备数。
19, AT+MRAD?获取最近使用过的蓝牙认证设备地址。
20, AT+INQM:设置查询模式,AT+INQM=1, 9, 48(1-带RSSI信号强度指示,9-超过9个
蓝牙设备响应则终止查询,48-设定超时为48*1.28=61.44秒)
APP与pc端相互连接方法
连接串口,在电脑端查看数据,实现手机和PC端数据互传,但是这里要注意,接线RX–RX,TX—TX,这个跟单片机通讯的脚位反着来,我开始就是RX–TX,tx–rx,怎么都连接不上,搞不懂。
连接好之后,PC和手机端APP都可以正常通讯,接发收据。注意波特率正常模式是9600,AT模式是38400.
单片机与hc-05建立连接通讯
#include <reg52.h>
typedef unsigned char u8;
typedef unsigned int u16;
u8 R_buf; //?????????????
sbit led1 = P1^0;
sbit led2 = P1^1;
sbit led3 = P1^2;
sbit led4 = P1^3;
sbit state = P3^6;
void delay(u16 z) //
{
u16 x,y;
for(x=z;x>0;x--)
for(y=125;y>0;y--);
}
void InitUART() //9600
{
//9600
TMOD = 0x20;
PCON = 0x00;
SCON = 0x50;
TH1 = 0xFD;
TL1 = 0xFD;
TR1 = 1;
ES = 1;
EA = 1;
}
void SendOneByte(unsigned char dat)
{
SBUF = dat;
while(!TI);
TI = 0;
}
void main(void)
{
InitUART();
led1 = 1;
led2 = 1;
led3 = 1;
led4 = 1;
while(1)
{
if(state == 1)//
{
led4 = 0; //
}
else
{
led4 = 1; //
}
}
}
void UARTInterrupt(void) interrupt 4 //??????
{
if(RI)
{
RI = 0;
//add your code here!
R_buf = SBUF;
if(R_buf == '0')//
{
led1 = 0;
delay(1000);
led1 = 1;
}
if(R_buf == '1')//
{
led2 = 0;
delay(1000);
led2 = 1;
}
SendOneByte(R_buf);//
}
}
实验效果:把蓝牙的state脚接P3.6,然后rx–tx,,tx–rx,一定要注意通讯脚调换回来。
state——接任意单片机i/o
rx——接单片机的tx端,P3^1,与命令相应模式相反
tx——接单片机的rx端,P3^0
gnd——接地
5v——接5V电
en——可不接
1、不需要接通en
2、通信线路:手机蓝牙控制端–>hc05蓝牙模块–>单片机
3、单片机开发板上电,蓝牙模块指示灯进入快闪状态,说明进入自动连接工作模式
4、手机开蓝牙,即可搜到蓝牙模块,连接
5、打开手机端蓝牙串口工具,连接成功,蓝牙模块指示灯进入双闪状态
6、至此连接成功,准备发送数据
手机端未连接,LED4不亮,连接成功,LED4亮。
手机端发送0,LED1亮,1秒后灭;手机端发送1,LED2亮,1秒后灭。