HC-05嵌入式蓝牙串口通讯
1.简介
HC05 模块,是 ALIENTEK 生成的一款高性能主从一体蓝牙串口模块,可以同各种带
蓝牙功能的电脑、蓝牙主机、手机、PDA、PSP 等智能终端配对,该模块支持非常宽的波特
率范围:4800~1382400,并且模块兼容 5V 或 3.3V 单片机系统,可以很方便与您的产品进行
连接。使用非常灵活、方便。
原理图:
2.AT指令与工作模式
HC-05 嵌入式蓝牙串口通讯模块(以下简称模块)具有两种工作模式:命令响应工作
模式和自动连接工作模式,在自动连接工作模式下模块又可分为主(Master)、从(Slave)
和回环(Loopback)三种工作角色。当模块处于自动连接工作模式时,将自动根据事先设定
的方式连接的数据传输;当模块处于命令响应工作模式时能执行下述所有 AT 命令,用户可
向模块发送各种 AT 指令,为模块设定控制参数或发布控制命令。通过控制模块外部引脚
(PIO11)输入电平,可以实现模块工作状态的动态转换。
串口模块用到的引脚定义:
1、PIO8 连接 LED,指示模块工作状态,模块上电后闪烁,不同的状态闪烁间隔不同。
2、PIO9 连接 LED,指示模块连接成功,蓝牙串口匹配连接成功后,LED 长亮。
3、PIO11 模块状态切换脚,高电平-->AT 命令响应工作状态,低电平或悬空-->蓝牙常规工
作状态。
4、模块上已带有复位电路,重新上电即完成复位。
设置为主模块的步骤:
1、PIO11 置高。
2、上电,模块进入 AT 命令响应状态。
3、超级终端或其他串口工具,设置波特率 38400,数据位 8 位,停止位 1 位,无校验位,
无流控制。
4、串口发送字符“AT+ROLE=1\r\n”,成功返回“OK\r\n”,其中\r\n 为回车换行。
5、PIO 置低,重新上电,模块为主模块,自动搜索从模块,建立连接。
对于AT指令非常多,具体请查看HC05蓝牙指令集,这里只是列出几个常用的指令
3.HC05的使用
接下来我们用STM32来对HC05进行配置与通信的实现
初始化:
//初始化HC05模块
//返回值:0,成功;1,失败.
u8 HC05_Init(void)
{
u8 retry=10,t;
u8 temp=1;
RCC->APB2ENR|=1<<4; //使能PORTC时钟
GPIOC->CRL&=0XFF00FFFF; //PC4,推挽输出;PC5,输入
GPIOC->CRL|=0X00830000;
GPIOC->ODR|=1<<5; //PC5上拉
USART2_Init(36,9600); //初始化串口2为:9600,波特率.
while(retry--)
{
HC05_KEY=1; //KEY置高,进入AT模式
delay_ms(10);
u2_printf("AT\r\n"); //发送AT测试指令
HC05_KEY=0; //KEY拉低,退出AT模式
for(t=0;t<10;t++) //最长等待50ms,来接收HC05模块的回应
{
if(USART2_RX_STA&0X8000)break;
delay_ms(5);
}
if(USART2_RX_STA&0X8000) //接收到一次数据了
{
temp=USART2_RX_STA&0X7FFF; //得到数据长度
USART2_RX_STA=0;
if(temp==4&&USART2_RX_BUF[0]=='O'&&USART2_RX_BUF[1]=='K')
{
temp=0;//接收到OK响应
break;
}
}
}
if(retry==0)temp=1; //检测失败
return temp;
}
通过AT模式来判断是否有蓝牙存在
//获取HC05模块的角色
//返回值:0,从机;1,主机;0XFF,获取失败.
u8 HC05_Get_Role(void)
{
u8 retry=0X0F;
u8 temp,t;
while(retry--)
{
HC05_KEY=1; //KEY置高,进入AT模式
delay_ms(10);
u2_printf("AT+ROLE?\r\n"); //查询角色
for(t=0;t<20;t++) //最长等待200ms,来接收HC05模块的回应
{
delay_ms(10);
if(USART2_RX_STA&0X8000)break;
}
HC05_KEY=0; //KEY拉低,退出AT模式
if(USART2_RX_STA&0X8000) //接收到一次数据了
{
temp=USART2_RX_STA&0X7FFF; //得到数据长度
USART2_RX_STA=0;
if(temp==13&&USART2_RX_BUF[0]=='+')//接收到正确的应答了
{
temp=USART2_RX_BUF[6]-'0';//得到主从模式值
break;
}
}
}
if(retry==0)temp=0XFF;//查询失败.
return temp;
}
通过AT指令来判断是什么模式
//ATK-HC05设置命令
//此函数用于设置ATK-HC05,适用于仅返回OK应答的AT指令
//atstr:AT指令串.比如:"AT+RESET"/"AT+UART=9600,0,0"/"AT+ROLE=0"等字符串
//返回值:0,设置成功;其他,设置失败.
u8 HC05_Set_Cmd(u8* atstr)
{
u8 retry=0X0F;
u8 temp,t;
while(retry--)
{
HC05_KEY=1; //KEY置高,进入AT模式
delay_ms(10);
u2_printf("%s\r\n",atstr); //发送AT字符串
HC05_KEY=0; //KEY拉低,退出AT模式
for(t=0;t<20;t++) //最长等待100ms,来接收HC05模块的回应
{
if(USART2_RX_STA&0X8000)break;
delay_ms(5);
}
if(USART2_RX_STA&0X8000) //接收到一次数据了
{
temp=USART2_RX_STA&0X7FFF; //得到数据长度
USART2_RX_STA=0;
if(temp==4&&USART2_RX_BUF[0]=='O')//接收到正确的应答了
{
temp=0;
break;
}
}
}
if(retry==0)temp=0XFF;//设置失败.
return temp;
}
通过AT模式来设置主从模式
void HC05_Sta_Show(void)
{
if(HC05_LED)LCD_ShowString(120,140,120,16,16,"STA:Connected "); //连接成功
else LCD_ShowString(120,140,120,16,16,"STA:Disconnect"); //未连接
}
#define HC05_LED PCin(5) //蓝牙连接状态信号
通过PIO9 来判断是否连接
接收和发送都是用STM32的串口
蓝牙的通讯协议则与串口类似,其实就是将数据通过串口传给MCU处理。
HC-05嵌入式蓝牙串口通讯相关推荐
- android蓝牙串口通讯
2019独角兽企业重金招聘Python工程师标准>>> 最近做的项目用到了蓝牙串口通讯功能.毕竟是接触到底层的一些东西,让吾等局限于java编程思想的小菜遇到了一些意想不到的问题. ...
- Android蓝牙串口通讯【转】
本文转载自:http://blog.sina.com.cn/s/blog_631e3f2601012ixi.html Android蓝牙串口通讯 闲着无聊玩起了Android蓝牙模块与单片机蓝牙模块的 ...
- Ubuntu上实现蓝牙串口通讯(SPP)
蓝牙SPP介绍: 略(以后补充) 在ubuntu上实现方法: 方法1 :主要工具 bluemn minicom 安卓手机(上面安装蓝牙串口工具) 1.1 安卓手机打开手机蓝牙,允许周围设备可见: 1. ...
- 基于html5+的nativejs实现android蓝牙串口通讯
##开发工具 基于hbuilder打包的webapp. ##所需知识 了解基本的html,css,js,vue.js 了解原生android的开发 了解android蓝牙的开发 了解hbuilder的 ...
- 关于嵌入式linux下的串口通讯问题---回车、换行、缓冲
嵌入式Linux串口通讯测试问题: 经过实验,从Linux(PC)通过串口向嵌入式Linux开发板发送数据时,串口初始化完毕后遇到回车(0x0d)或换行(0x0a)才开始从串口接收数据,回车或换行 ...
- (3)arduino完成两个HC-05蓝牙模块间的配对,实现简单的无线串口通讯
(3)arduino完成两个HC-05蓝牙模块间的配对,实现简单的无线串口通讯 一.准备工作 二.蓝牙配置 1.从模块配置 (1)接线 (2)进入AT模式 (3)打开串口进行配置 2.主模块配置 (1 ...
- 双笔记本自带蓝牙的串口通讯
双笔记本自带蓝牙的串口通讯 现在的笔记本电脑都自带蓝牙模块,而普通的台式PC, 也可以通过USB蓝牙模块扩展蓝牙功能.因此,对于都有蓝牙模块的电脑,可以通过将蓝牙虚拟成串口,进行双机通讯.对于Elec ...
- java 安卓蓝牙程序_求Java大神帮忙,简单修改下安卓蓝牙串口输出程序代码!!急...
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 附上蓝牙串口通讯代码, package com.test.BTClient; import java.io.File; import java.io.Fi ...
- 关于Android蓝牙串口通信那点破事
Android蓝牙串口通讯 闲着无聊玩起了Android蓝牙模块与单片机蓝牙模块的通信,简单思路就是要手机通过蓝牙发送控制指令给单片机,并作简单的控制应用.单片机的蓝牙模块连接与程序暂且略过,此文主要 ...
- 一种嵌入式设备串口加密协议
嵌入式设备串口通讯一般都会明文通讯,但在某些应用场合我们也有加密需求, 以下为一种加密方式的建议. 上位机(主机)定义为Master,下位机(从机)定义为Slaver 通讯协议建议: 完整数据格式: ...
最新文章
- 2022-2028年中国钢丸行业市场行情监测及未来前景规划报告
- 决策树算法(二)——构建数据集
- tensorflow练习
- Java学习---流与文件
- 【全网最全】一文搞定 Linux 压缩、解压哪些事儿
- SPT20 协议_过户协议书模板五篇
- windows无法访问_注册CourseMaker之后无法登录,显示“网络无法访问……”,怎么办?...
- scala(13)-----集合(Collection)-------列表
- android打飞机游戏素材,微信打飞机游戏素材
- 编译 firefox linux,Linux下面Firefox 8.0.1的编译安装
- 双引号在python中什么意思_Python中单引号和双引号的作用
- 【网络技术联盟站】瑞哥教你如何使用 Console 接口管理设备
- Android 常见的抓log方法总结
- 程序猿郭小喵过去的大学故事,致迷茫的你我
- C++入门第二天前向声明
- 记录微信分享图标不显示的问题
- 微软数据分析服务 - Microsoft Clarity
- wireshark数据包过滤
- 笔记:TRULY_SPINACH(优酷播单:和我一起用Unity3D玩游戏)
- mac下安装 mat内存分析工具