《2022年蓝牙模块学习笔记》由会员分享,可在线阅读,更多相关《2022年蓝牙模块学习笔记(13页珍藏版)》请在金锄头文库上搜索。
1、学习好资料欢迎下载蓝牙模块学习刚拿到蓝牙模块,心中有点小激动啊;民用级: 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、即可通信,模块与模块的通信需要至少2 个条件:1、 必须是主机与从机之间2、 必须密码一致(密码: 1234)主机:记忆最后一次配对过的从机,并只与该从机配对,直到KEY(26 脚)高电平触发时放弃记忆, 26 脚默认应该接低电平。配对方式:主机自动搜索从设备进行配对。典型方式:在一定条件下,主从之间自动配对AT 模式:配对前就是AT 模式, 配对完毕后透明通信精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 1 页,共 13 页学习好资料欢迎下载图 1 是 HC-06 图片及主要引脚现在你手中拿到的HC-06 引出了四个引脚,分别为VCC 、GND
3、、TXD 、RXD 。四个引脚分别对应单片机的电源5V 或 3.3V;GND 接地; TXD 、RXD 交叉连接(对应单片机的P30,P31) 。连接好,单片机上电,此时蓝牙模块上led 闪烁,表示尚未连接其他蓝牙设备。此时用手机蓝牙搜索,可以搜索到HC-06. 点击连接,输入pin 密码则可以连接。连接好后, 利用蓝牙串口助手就可以对蓝牙模块通信了,编程也就可以把蓝牙当作普通串口来对待。注意编写好程序后,向单片机烧录时,必须将TXD 、RXD 拔出才能烧写! ! !问题:串口发送字符串时,最后没有标志可寻。可以将字符串接收到数组中,发送数据到12864,检测是否到 0 ,如果检测得到,将标识
4、符flag 置为 1;串口中断服务程序中,检测到 flag 为 1 时,这证明数据显示成功。此时应当清屏!清屏方法: while(Temi!=0) Temi= ; i+; 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 2 页,共 13 页学习好资料欢迎下载/* STC89C52RC 与 HC-06 蓝牙连线:RXD TXD TXD RXD 其他连线:P2.0、P2.1、P2.3 分别接一个指示灯*/ #include #include unsigned char tmp; unsigned int c=0; sbit led1=P10; /指示灯
5、 0 sbit led2=P11; /指示灯 1 sbit led3=P12; /指示灯 2 sbit beep=P32; /蜂鸣器void init(); /串口初始化void send(unsigned char a); /单字节发送函数void ctrl(); / 接收处理函数void delay(unsigned int x) unsigned int i,j; for(i=x;i0;i-) for(j=110;j0;j-); void main() init(); while(1) if(RI=1) / 是否有数据到来 RI = 0; tmp = SBUF; / 暂存接收到的数据ct
6、rl(); 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 3 页,共 13 页学习好资料欢迎下载void init() /串口初始化 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; / 波特率不倍
7、增TR1 = 1; /定时器 1 开始工作,产生波特率/发送标志位置0 TI=0; /接收标志位置0 RI=0; /EA=0; ES=1; led1=0; /初始化设置3 个指示灯全亮led2=0; led3=0; void send(unsigned char a) /单字节数据发送 /注意:若单片机 TXD(P3.1) 无上拉能力, 必须在 P3.1端接上拉电阻。本次测试需要接上拉电阻TI=0; SBUF=a; while(TI=0); TI=0; if(c%2) /发送指示灯标志,每接收一次,此灯亮灭交替led3=1; else led3=0; c+; void ctrl() /接收处理
8、函数精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 4 页,共 13 页学习好资料欢迎下载 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:
9、 /收到字符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); 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 5 页,共 13 页学习好资料欢迎下载以下是蓝牙接收字符串并向12864 显示程序/*8 *任广俊*日期 :12.17 *蓝牙接收并显示在12864 上,1,2,3 控
10、制发光二极管*4,5 控制继电器*/ #include #include #define uint unsigned int #define uchar unsigned char #define LCD_data P0 sbit LCD_EN=P34; /液晶使能1 使能, 0 使不能sbit LCD_RS=P35; /寄存器选择1 数据, 0 命令sbit LCD_RW=P36; /液晶读写控制1 读出, 0 写入sbit LCD_PSB=P37; /串行口控制1 并行, 0 串行sbit led1=P10; sbit led2=P11; sbit led3=P12; sbit beep=
11、P32; /蜂鸣器sbit jdq=P16; /继电器uchar code dis1=I Love MCU !; uchar code dis2= 单片机学习 ; uchar Tem20; uchar dis38; unsigned char a=0; /定义临时变量uchar flag,flag2=0; uchar temp,i,c; void delay(uint x) uint m,n; for (m=x;m0;m-) 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 6 页,共 13 页学习好资料欢迎下载for(n=110;n0;n-); /
12、* 12864 液晶显示*/ /写指令 :RS=L;RW=L;E= 高脉冲 ;D0-D7= 指令码void write_cmd(uchar cmd ) 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 数据void write_dat(uchar dat) LCD_RS=1; LCD_RW=0; LCD_EN=0; P0=dat; delay(5); LCD_EN=1; delay(5); LCD_EN=0; /设定显示位置voi
13、d lcd_pos(uchar x,uchar y) uchar pos; if(x=0) x=0x80; else if(x=1) x=0x90; else if(x=2) x=0x88; else if(x=3) x=0x98; 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 7 页,共 13 页学习好资料欢迎下载pos=x+y; write_cmd(pos); /显示地址 void lcd_init() /lcd 初始化 LCD_PSB=1; /并口方式write_cmd(0x30); /基本指令喜僮? delay(5); write_cmd
14、(0x0C); /显示开关光标delay(5); write_cmd(0x01); /清除 lcd 显示内容delay(5); /*/ void BT_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
15、=1; EA= 1; /开总中断led1=0; /初始化为全亮led2=0; led3=0; void send(unsigned char a) /单字节数据发送精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 8 页,共 13 页学习好资料欢迎下载 TI=0; SBUF=a; while(TI=0); TI=0; write_dat(a); if(c%2) /发送指示灯 led3=1; delay(500); led3=0; c+; void main() BT_init(); /Bluetooth 初始化lcd_init(); /液晶显示初始化
16、while(1) /* 液晶显示区*/ / write_cmd(0x01); /清除 lcd 显示内容lcd_pos(0,0); /向第一行首位置写数据i=0; while(dis1i!=0) write_dat(dis1i); i+; lcd_pos(1,0); /向第二行首位子写数据i=0; 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 9 页,共 13 页学习好资料欢迎下载while(dis2i!=0) write_dat(dis2i); i+; delay(10); lcd_pos(2,0); /向第二行首位子写数据i=0; while(
17、Temi!=0) write_dat(Temi); i+; flag=1; / void UART_SER (void) interrupt 4 /串口中断服务程序 while(RI) /接收到数据 if(flag=1) /字符串发送完毕 flag=0; a=0; /数据标志清零i=0; /数据清零while(Temi!=0) /向 lcd 写空格 Temi= ; i+; 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 10 页,共 13 页学习好资料欢迎下载 RI=0; /清除标志位Tema+=SBUF; /读取缓冲区的值 AT 指令集进入AT
18、指令的方法:给模块上电,不配对的情况下,就是AT 模式了。指令间隔1S 左右。以上的 RXD 和TXD 接错了, P30连接 TXD ,P3。1连接 RXD精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 11 页,共 13 页学习好资料欢迎下载出厂参数:波特率 9600N81,名字 linvor,密码 1234 1、测试通讯发送: AT(返回 OK,一秒左右发一次)返回: OK 2、改蓝牙串口通讯波特率发送: AT+BAUD1 返回: OK1200 发送: AT+BAUD2 返回: OK2400 1-1200 2-2400 3-4800 4-960
19、0 (默认就是这个设置)5-19200 6-38400 7-57600 8-115200 9-230400 A-460800 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 12 页,共 13 页学习好资料欢迎下载B-921600 C-1382400 ? 设置超过 115200 后用电脑无法使用,要用单片机编程于高于115200 才能使用此波特率和重新发 AT 命令设低波特率? 用 AT 命令设好波特率后,下次上电使用不需再设,可以掉电保存波特率3、改蓝牙名称发送: AT+NAMEname 返回: OKname 参数name:所要设置的当前名称,即
20、蓝牙被搜索到的名称。20 个字符以内。例:发送 AT+NAMEbill_gates 返回OKname 这时蓝牙名称改为 bill_gates 参数可以掉电保存,只需修改一次。PDA 端刷新服务可以看到更改后的蓝牙名称,名字不可超过 20 个字符。4、改蓝牙配对密码发送: AT+PINxxxx 返回: OKsetpin 参数xxxx:所要设置的配对密码,4 个数字,此命令可用于从机或主机。从机是适配器或手机弹出要求输入配对密码窗口时,手工输入此参数就可以连接从机。主蓝牙模块搜索从机后,如果密码正确,则会自动配对,主模块除了可以连接配对从模块外,其他产品包含从模块的时候也可以连接配对,比如含蓝牙的
21、数码相机,蓝牙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 则为正品精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 13 页,共 13 页