蓝牙模块学习笔记.docx
- 文档编号:28857905
- 上传时间:2023-07-20
- 格式:DOCX
- 页数:19
- 大小:930.08KB
蓝牙模块学习笔记.docx
《蓝牙模块学习笔记.docx》由会员分享,可在线阅读,更多相关《蓝牙模块学习笔记.docx(19页珍藏版)》请在冰豆网上搜索。
蓝牙模块学习笔记
蓝牙模块学习
刚拿到蓝牙模块,心中有点小激动啊;
民用级:
HC-05,HC-06(HC-06-M,HC-06-S)
HC-05-D,HC-06-D(是带底板的模块,主要是用户用于测试和评估)
本文介绍的为HC-06蓝牙串口模块。
蓝牙串口模块用于把串口转换为蓝牙,这种模块工作的时候分为主机和从机,其中偶数命名的型号出厂时就确定了是从机或者是主机,并无法更改。
奇数命名的型号可以用户自己通过AT指令修改模块为主机或者从机。
主机:
HC-06-M,M=master
从机:
HC-06-S,S=slaver
串口模块的使用,是不需要驱动的,只要是串口就可以接入,配对完毕即可通信,模块与模
块的通信需要至少2个条件:
1、必须是主机与从机之间
2、必须密码一致(密码:
1234)
主机:
记忆最后一次配对过的从机,并只与该从机配对,直到KEY(26脚)高电平触发时放弃记忆,26脚默认应该接低电平。
配对方式:
主机自动搜索从设备进行配对。
典型方式:
在一定条件下,主从之间自动配对
AT模式:
配对前就是AT模式,配对完毕后透明通信
图1是HC-06图片及主要引脚
现在你手中拿到的HC-06引出了四个引脚,分别为VCC、GND、TXD、RXD。
四个引脚分别对应单片机的电源5V或3.3V;GND接地;TXD、RXD交叉连接(对应单片机的P3^0,P3^1)。
连接好,单片机上电,此时蓝牙模块上led闪烁,表示尚未连接其他蓝牙设备。
此时用手机蓝牙搜索,可以搜索到HC-06.点击连接,输入pin密码则可以连接。
连接好后,利用蓝牙串口助手就可以对蓝牙模块通信了,编程也就可以把蓝牙当作普通串口来对待。
注意编写好程序后,向单片机烧录时,必须将TXD、RXD拔出才能烧写!
!
!
问题:
串口发送字符串时,最后没有标志可寻。
可以将字符串接收到数组中,发送数据到12864,检测是否到’\0’,如果检测得到,将标识符flag置为1;串口中断服务程序中,检测到flag为1时,这证明数据显示成功。
此时应当清屏!
清屏方法:
while(Tem[i]!
='\0')
{
Tem[i]='';
i++;
}
/***********************************************************
STC89C52RC与HC-06蓝牙连线:
RXDTXD
TXDRXD
其他连线:
P2.0、P2.1、P2.3分别接一个指示灯
***********************************************************/
#include
#include
unsignedchartmp;
unsignedintc=0;
sbitled1=P1^0;//指示灯0
sbitled2=P1^1;//指示灯1
sbitled3=P1^2;//指示灯2
sbitbeep=P3^2;//蜂鸣器
voidinit();//串口初始化
voidsend(unsignedchara);//单字节发送函数
voidctrl();//接收处理函数
voiddelay(unsignedintx)
{
unsignedinti,j;
for(i=x;i>0;i--)
for(j=110;j>0;j--);
}
voidmain()
{
init();
while
(1)
{
if(RI==1)//是否有数据到来
{
RI=0;
tmp=SBUF;//暂存接收到的数据
ctrl();
}
}
}
voidinit()//串口初始化
{
ES=0;//关中断
SCON=0x50;//REN=1允许串行接受状态,串口工作模式1,
//10位UART(1位起始位,8位数据位,1位停止位,无奇偶校验),波特率可变
TMOD=0x20;//定时器1工作于方式2,8位自动重载模式,用于产生波特率
TH1=TL1=0xFD;//波特率9600(本次测试采用晶振为11.0592)
PCON&=0x7f;//波特率不倍增
TR1=1;//定时器1开始工作,产生波特率
//发送标志位置0
TI=0;//接收标志位置0
RI=0;
//EA=0;
ES=1;
led1=0;//初始化设置3个指示灯全亮
led2=0;
led3=0;
}
voidsend(unsignedchara)//单字节数据发送
{//注意:
若单片机TXD(P3.1)无上拉能力,必须在P3.1端接上拉电阻。
本次测试需要接上拉电阻
TI=0;
SBUF=a;
while(TI==0);
TI=0;
if(c%2)//发送指示灯标志,每接收一次,此灯亮灭交替
led3=1;
else
led3=0;
c++;
}
voidctrl()//接收处理函数
{
switch(tmp)
{
case'1':
led1=1;//收到字符1,指示灯0灭
send(tmp);
beep=0;
delay(500);
break;
case'2':
//收到字符2,指示灯1灭
led2=1;
send(tmp);
beep=1;
delay(500);
break;
case'3':
//收到字符3,指示灯0、1亮
led1=0;
led2=0;
send(tmp);
beep=1;
delay(500);
break;
case'4':
//收到字符4,指示灯0、1灭
led1=1;
led2=1;
send(tmp);
break;
case'5':
//收到字符5,指示灯3亮
led3=0;
send(tmp);
break;
default:
//其他,灯全灭
led1=1;
led2=1;
led3=1;
send(tmp);
beep=1;
delay(500);
}
}
以下是蓝牙接收字符串并向12864显示程序
/*****************************************************************************8
*任广俊
*日期:
12.17
*蓝牙接收并显示在12864上,1,2,3控制发光二极管
*4,5控制继电器
******************************************************************************/
#include
#include
#defineuintunsignedint
#defineucharunsignedchar
#defineLCD_dataP0
sbitLCD_EN=P3^4;//液晶使能1使能,0使不能
sbitLCD_RS=P3^5;//寄存器选择1数据,0命令
sbitLCD_RW=P3^6;//液晶读写控制1读出,0写入
sbitLCD_PSB=P3^7;//串行口控制1并行,0串行
sbitled1=P1^0;
sbitled2=P1^1;
sbitled3=P1^2;
sbitbeep=P3^2;//蜂鸣器
sbitjdq=P1^6;//继电器
ucharcodedis1[]={"ILoveMCU!
"};
ucharcodedis2[]={"单片机学习"};
ucharTem[20];
uchardis3[8];
unsignedchara=0;//定义临时变量
ucharflag,flag2=0;
uchartemp,i,c;
voiddelay(uintx)
{
uintm,n;
for(m=x;m>0;m--)
for(n=110;n>0;n--);
}
/*******************************************************************************************************
12864液晶显示
*******************************************************************************************************/
//写指令:
RS=L;RW=L;E=高脉冲;D0-D7=指令码
voidwrite_cmd(ucharcmd)
{
LCD_RS=0;
LCD_RW=0;
LCD_EN=0;
P0=cmd;
delay(5);
LCD_EN=1;
delay(5);
LCD_EN=0;
}
//写数据到LCD:
RS=H;RW=L;E=高脉冲D0-D7数据
voidwrite_dat(uchardat)
{
LCD_RS=1;
LCD_RW=0;
LCD_EN=0;
P0=dat;
delay(5);
LCD_EN=1;
delay(5);
LCD_EN=0;
}
//设定显示位置
voidlcd_pos(ucharx,uchary)
{
ucharpos;
if(x==0)
{x=0x80;}
elseif(x==1)
{x=0x90;}
elseif(x==2)
{x=0x88;}
elseif(x==3)
{x=0x98;}
pos=x+y;
write_cmd(pos);//显示地址
}
voidlcd_init()//lcd初始化
{
LCD_PSB=1;//并口方式
write_cmd(0x30);//基本指令喜僮?
delay(5);
write_cmd(0x0C);//显示开关光标
delay(5);
write_cmd(0x01);//清除lcd显示内容
delay(5);
}
/*******************************************************************************************************************/
voidBT_init()//蓝牙串口初始化
{
ES=0;//关中串口中断
SCON=0x50;//REN=1允许串口接收状态,串口工作方式1
//10位UART(1起始位,8数据位,1停止位?
无奇偶校检
TMOD=0x20;//定时器1,工作方式2
TH1=TL1=0xFD;//设置波特率9600
PCON&=0x7f;//波特率不倍增
TR1=1;//允许串口中断
TI=0;//发送标志0
RI=0;//接收标志0
ES=1;
EA=1;//开总中断
led1=0;//初始化为全亮
led2=0;
led3=0;
}
voidsend(unsignedchara)//单字节数据发送
{
TI=0;
SBUF=a;
while(TI==0);
TI=0;
write_dat(a);
if(c%2)//发送指示灯
{
led3=1;
delay(500);
led3=0;
}
c++;
}
}
voidmain()
{
BT_init();//Bluetooth初始化
lcd_init();//液晶显示初始化
while
(1)
{
/***********************************************************************************
液晶显示区
*****************************************************************************************/
//write_cmd(0x01);//清除lcd显示内容
lcd_pos(0,0);//向第一行首位置写数据
i=0;
while(dis1[i]!
='\0')
{
write_dat(dis1[i]);
i++;
}
lcd_pos(1,0);//向第二行首位子写数据
i=0;
while(dis2[i]!
='\0')
{
write_dat(dis2[i]);
i++;
}
delay(10);
lcd_pos(2,0);//向第二行首位子写数据
i=0;
while(Tem[i]!
='\0')
{
write_dat(Tem[i]);
i++;
}
flag=1;
//}
}
}
voidUART_SER(void)interrupt4//串口中断服务程序
{
while(RI)//接收到数据
{
if(flag==1)//字符串发送完毕
{
flag=0;
a=0;
//数据标志清零
i=0;//数据清零
while(Tem[i]!
='\0')//向lcd写空格
{
Tem[i]='';
i++;
}
}
RI=0;//清除标志位
Tem[a++]=SBUF;//读取缓冲区的值
}
}
AT指令集
进入AT指令的方法:
给模块上电,不配对的情况下,就是AT模式了。
指令间隔1S左右。
以上的RXD和TXD接错了,P3^0连接TXD,P3。
1连接RXD
出厂参数:
波特率9600N81,名字linvor,密码1234
1、测试通讯
发送:
AT(返回OK,一秒左右发一次)
返回:
OK
2、改蓝牙串口通讯波特率
发送:
AT+BAUD1
返回:
OK1200
发送:
AT+BAUD2
返回:
OK2400
……
1---------1200
2---------2400
3---------4800
4---------9600(默认就是这个设置)
5---------19200
6---------38400
7---------57600
8---------115200
9---------230400
A---------460800
B---------921600
C---------1382400
Ø设置超过115200后用电脑无法使用,要用单片机编程于高于115200才能使用此波特
率和重新发AT命令设低波特率
Ø用AT命令设好波特率后,下次上电使用不需再设,可以掉电保存波特率
3、改蓝牙名称
发送:
AT+NAMEname
返回:
OKname
参数name:
所要设置的当前名称,即蓝牙被搜索到的名称。
20个字符以内。
例:
发送AT+NAMEbill_gates
返回OKname
这时蓝牙名称改为bill_gates
参数可以掉电保存,只需修改一次。
PDA端刷新服务可以看到更改后的蓝牙名称,名字
不可超过20个字符。
4、改蓝牙配对密码
发送:
AT+PINxxxx
返回:
OKsetpin
参数xxxx:
所要设置的配对密码,4个数字,此命令可用于从机或主机。
从机是适配器或手
机弹出要求输入配对密码窗口时,手工输入此参数就可以连接从机。
主蓝牙模块搜索从机后,
如果密码正确,则会自动配对,主模块除了可以连接配对从模块外,其他产品包含从模块的
时候也可以连接配对,比如含蓝牙的数码相机,蓝牙GPS,蓝牙串口打印机,等等,特别地,
蓝牙GPS为典型例子
例:
发送:
AT+PIN8888
返回:
OKsetpin
这时蓝牙配对密码改为8888,模块在出厂时的默认配对密码是1234。
参数可以掉电保存,只需修改一次。
5、无校验设置指令:
(V1.5版后支持)
AT+PN(默认就是这个设置)
6、偶校验设置指令:
(V1.5版后支持)
AT+PE
7、奇校验设置指令:
(V1.5版后支持)
AT+PO
8、获取AT指令版本命令:
AT+VERSION
返回LinvorV1.n则为正品
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 蓝牙 模块 学习 笔记