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

  • Post author:
  • Post category:其他





前言

通过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极其简陋



版权声明:本文为xiaob_8310原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。