单片机之蓝牙通信
单片机之蓝牙通信
本文详细介绍了蓝牙通信技术在单片机中的应用,重点讲解了HC05蓝牙模块的使用方法。内容包括蓝牙技术的简介、HC05蓝牙模块的参数和引脚功能、工作模式的配置方法以及具体的测试步骤和程序代码。
蓝牙介绍
蓝牙(Bluetooth)是一种低成本的、近距离的无线通信技术,一般通信距离在10米以内。它运行在2.4GHz的波段,这是一个无需申请许可证的无线电波段,主要用于工业、科技和医学等领域。
HC05蓝牙模块
为了实现无线通信,需要一个具备蓝牙功能的模块。HC05是一款高性能的主从一体蓝牙串口模块,可以与各种蓝牙功能的电脑、蓝牙主机、手机等智能终端进行配对。该模块支持非常宽的波特率(4800-1382400),并兼容5V或3.3V单片机系统,使用非常灵活方便。
HC05参数
HC05蓝牙模块出厂默认烧录的波特率为9600,且默认为从机模式。
HC05引脚
HC05蓝牙模块共有6个引脚,但实际使用中只需要连接其中4个引脚即可。最后一个STA引脚用于配对状态输出,通常不需要连接,因为可以通过手机判断配对是否成功。
各个引脚功能
- VCC:电源输入(3.3V-5V)
- GND:接地
- TXD:串口发送
- RXD:串口接收
- EN:使能
- STA:状态指示
HC05模块的作用
HC05蓝牙模块相当于一个中转站,手机发出的数据通过蓝牙模块接收到后传送到51单片机的RXD串口;51单片机TXD串口发过来的数据通过蓝牙接收后又传给了手机。手机和蓝牙模块利用的是蓝牙无线通信,蓝牙模块和51单片机利用的是串口通信。因此,蓝牙模块的发送引脚要接单片机的接收引脚,蓝牙模块的接收引脚要接单片机的发送引脚。
工作模式
配置模式
配置模式用于设置主从机、波特率、密码、连接等一系列信息,主要通过AT指令进行配置。需要设置的参数包括波特率、主从机模式以及密码。这些设置具有断电保存功能,通常只需要配置一次。
进入配置模式需要使用USB转TTL模块,具体接线方式如下:
- 蓝牙VCC:接电源(3.3V-5V)
- 蓝牙GND:接地
- 蓝牙TXD:接USB转TTL模块的RXD
- 蓝牙RXD:接USB转TTL模块的TXD
- 蓝牙EN:接3.3V电源
进入配置模式后,指示灯会每2秒闪烁一次。
常用的AT指令包括:
- AT:检查串口是否正常工作
- AT+ORGL:恢复出厂设置
- AT+ROLE=设置内容:设置蓝牙模块为主机/从机(0为从机,1为主机)
- AT+CMODE=1:设置蓝牙模块可以与任意设备连接
- AT+UART=波特率,0,0:设置正常连接模式蓝牙波特率,一般为9600
- AT+NAME=蓝牙名称:设置蓝牙模块蓝牙名称,如HC-05
- AT+PSWD=蓝牙密码:设置蓝牙的连接密码,如1234
正常模式
当配置模式的参数设置完成后,可以进入正常模式,实现蓝牙模块与另一个蓝牙设备之间的通信,从而传递数据。
测试步骤如下:
- 将程序写入单片机后,拔掉串口跳线帽,再连接蓝牙模块。因为电脑与单片机和蓝牙连接的串口是同一个,避免出现冲突。
- 引脚接线方式与配置模式相同,只是将USB转TTL模块替换为51单片机,蓝牙EN模块不接。
- 烧录好的单片机连接HC05模块后,指示灯会一直闪烁,表示等待连接。
- 打开手机蓝牙,使用SPP蓝牙串口软件搜索设备,找到后输入设置的配对密码进行配对。
- 配对成功后,蓝牙模块的红灯不再闪烁,可以通过手机向单片机发送数据,进而控制单片机。
烧录的程序
需求:利用蓝牙调试助手发送数据的方式,手机控制P2各个LED灯的亮灭,同时在调试器中展示向单片机发送的数据。
显示接收和发送两个部分,接收采用接收中断的方式接收数据,当接收到数据后将接收到的数据发回到上位机。P2接口控制LED灯,而LED灯采用共阳极连接,需要给引脚低电平才能点亮。
#include <regx52.h>
unsigned char dat=0,flag=0;
void initscon(){
SCON=0x50; //8位异步通信方式,允许接收数据
TMOD=0x20; //配置波特率发生器T1,工作方式为2
TH1=0xFD; //重置TL1
TL1=0xFD; //设置初值
ES=1; //开启串口中断
EA=1; //开启总中断
TR1=1; //打开波特率发生器T1
}
void main(){
initscon();
while(1){
if(flag){
SBUF=dat; //向串口助手发送数据
flag=0;
}
}
}
void scon_isr() interrupt 4
{
if(TI){
TI=0; //数据发送完清TI
}
if(RI){
RI=0;
dat=SBUF; //接收串口助手发送的值
switch(dat){
case 1:P2_0=~P2_0;break;
case 2:P2_1=~P2_1;break;
case 3:P2_2=~P2_2;break;
case 4:P2_3=~P2_3;break;
case 5:P2_4=~P2_4;break;
case 6:P2_5=~P2_5;break;
case 7:P2_6=~P2_6;break;
case 8:P2_7=~P2_7;break;
default:P2=0xff;
}
flag=1;
}
}