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

前言

通过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连接/也可和单片机串口连接(总之就是蓝牙模块和计算机连接,通过串口助手设置模块)

  1. 找到有线串口线对应的端口,将波特率设置为与HC-06波特率一致(默认为9600),8位数据位,1位结束位,无奇偶校验,然后打开串口。
  2. 首先输入AT(无空格回车),然后串口助手会返回OK,修改波特率时输入AT+BAUDx(x为波特率编号),串口助手会返回OKnnnn(nnnn是你设置的波特率)。注意,在这之后若还做其他命令操作,必须先断开连接,修改串口助手的波特率为刚刚设置的波特率,然后再打开串口继续操作。
  3. 一般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 <reg52.h>
#include <intrins.h>

//自定义类型
#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极其简陋

发布了53 篇原创文章 · 获赞 14 · 访问量 7200

猜你喜欢

转载自blog.csdn.net/xiaob_8310/article/details/105770216
今日推荐