SKR丨基于蓝牙模块HC06的单片机通信控制(自制蓝牙串口通信APP)

Ginger ·
更新时间:2024-09-21
· 887 次阅读

前言

通过HC06蓝牙模块串口通信达到对单片机的控制目的。
需要掌握:串口通信;蓝牙模块初始化;蓝牙协议命令等。
为了方便理解步骤,博主自制了蓝牙串口通信app。

材料:

单片机
hc06模块
tll转usb模块
led灯(测试控制命令即可)

蓝牙模块初始

本文用的hc06模块。蓝牙模块还有hc05等,用法不尽相同但触类旁通。

模块连接

先看图

hc06
这里注意虽然额定电压是3.3v,但博主买的模块是配有稳压电路的所以可以接3.6~6v的电压,即可以直接接单片机5v电源
usb转ttl
在这里插入图片描述

老规矩:交叉连接

vcc→vcc
gnd→gnd
txd→rxd
rxd→txd

在这里插入图片描述

工作模式
先说蓝牙模块的三种工作模式

待连接模式:快速闪灯
该模式下,若蓝牙模块被设置为从机,则等待其他设备连接,若为主机,就会搜寻可连接的设备
AT模式:快速闪灯(对,快速闪灯)
该模式下,可以通过从串口发送AT指令,对蓝牙模块的名称,密码,波特率,主从机等属性进行设置,具体的AT指令此处不加以赘述,网上一查就有,需要注意的是HC05发送AT指令时必须以\r\n结尾,而HC06则不能以\r\n结尾,否则都会导致没有响应的错误出现
连接模式:长亮灯

开始设置AT模式
hc06和tll转usb连接/也可和单片机串口连接(总之就是蓝牙模块和计算机连接,通过串口助手设置模块)

找到有线串口线对应的端口,将波特率设置为与HC-06波特率一致(默认为9600),8位数据位,1位结束位,无奇偶校验,然后打开串口。 首先输入AT(无空格回车),然后串口助手会返回OK,修改波特率时输入AT+BAUDx(x为波特率编号),串口助手会返回OKnnnn(nnnn是你设置的波特率)。注意,在这之后若还做其他命令操作,必须先断开连接,修改串口助手的波特率为刚刚设置的波特率,然后再打开串口继续操作。 一般HC-06模块的默认名称就是hc-06,默认配对密码是1234

其他AT命令

1、测试通信
发送:AT
返回:OK
2、修改波特率
发送:AT+BAUD8
返回:OK115200
波特率标号对应表:
1---------1200
2---------2400
3---------4800
4---------9600(默认)
5---------19200
6---------38400
7---------57600
8---------115200
9---------230400
A---------460800
B---------921600
C---------1382400
3、改蓝牙名称
发送:AT+NAMEname
返回:OKname
4、改配对密码
发送:AT+PINxxx
返回:OKsetpin

看看就好
如此处我在更改蓝牙名字

检测蓝牙模块是否正常的方法

1、给蓝牙模块供电
2、蓝牙配对
3、打开串口助手,设置波特率9600,数据位8位,结束位1位,校验位无
4、将蓝牙的TXD和RXD短接
5、随意发送一个数据,串口助手将回显同样的数据

单片机部分

老规矩:交叉连接

与单片机连接
vcc→vcc
gnd→gnd
txd→rxd
rxd→txd

代码部分

#include #include //自定义类型 #define uchar unsigned char #define uint unsigned int uchar tmp; //定义端口 sbit led0=P1^0; //指示灯0 sbit led1=P1^1; //指示灯1 //声明函数 void InitUART(); //串口初始化 void SendOneByte(uchar c); //单字节发送函数 void UARTInterrupt(); //串口中断函数 //主函数 void main(void) { InitUART(); } //串口初始化函数 void InitUART() { TMOD = 0x20; // 定时器1工作于方式2 SCON = 0x50; //串口工作模式1 TH1 = 0xFD; // 波特率9600 TL1 = TH1; PCON = 0x00; EA = 1; ES = 1; TR1 = 1; } //单字节数据发送函数 void SendOneByte(uchar c) { SBUF = c; while(!TI); TI = 0; } //串口中断函数 void UARTInterrupt() interrupt 4 { if(RI) //确认接收数据 { RI = 0; tmp=SBUF; //选择函数 switch(tmp) { case '1': led0=0; //收到字符1,指示灯0亮 led1=1; SendOneByte(tmp); break; case '2': led0=1; //收到字符1,指示灯1亮 led1=0; SendOneByte(tmp); break; default: //其他,灯全灭 led0=1; led1=1; SendOneByte(tmp); } } else TI = 0; }

以上

蓝牙APP部分

在这里插入图片描述
在这里插入图片描述
APP已放在资源里
在这里插入图片描述

UI极其简陋


作者:xiaob8310



蓝牙串口 hc 串口 app 通信 蓝牙 单片机

需要 登录 后方可回复, 如果你还没有账号请 注册新账号