HC05蓝牙模块

简介

HC-05 蓝牙串口通信模块,是基于 Bluetooth Specification V2.0 带 EDR 蓝牙协议的
数传模块。无线工作频段为 2.4GHz ISM,调制方式是 GFSK。模块最大发射功率为 4dBm,接收灵敏度-85dBm,板载 PCB 天线,可以实现 10 米距离通信。
模块有6个IO口,别分是VCC(3.3-6V),GND,TX,RX,AT,State。
与单片机连接用uart通讯,全双工。
工作方式有2种:AT指令模式,透传模式。

![[Pasted image 20240216180044.png]]

使用方式

按着模块key键上电,等待模块指示灯慢闪进入模块AT模式,松开手指,模块指示灯慢闪,波特率38400,要用资料提供的串口工具如XCOM,我的友善串口助手发送的数据都没有反应,发送对应AT指令得到响应

重新上电模块,不按按键,模块指示灯快闪,1s闪烁2次,模块进入配对透传模式。利用HC的蓝牙助手连接上模块(尽量使用官方工具调试,本人利用其他第三方工具很多搜索不到),将PC端的串口波特率设置为9600,这是透传模式的波特率。连接上后主从端可以互相发送数据。

连接说明

![[Pasted image 20240216180119.png]]

HC-05 模块用于代替全双工通信时的物理连线。左边的设备向模块发送串口数据,模块的 RXD 端口收到串口数据后,自动将数据以无线电波的方式发送到空中。右边的模块能自动接收到,并从 TXD 还原最初左边设备所发的串口数据。从右到左也是一样的。

AT指令集

1,AT+ROLE设置主从模式: AT+ROLE?是查询主从状态;AT+ROLE=1是设成主,AT+ROLE=0是设成从,AT+ROLE=2设成回环角色(Slave-Loop(回环角色)——被动连接,接收远程蓝牙主设备数据并将数据原样返回给远程蓝牙)。

2,AT+RESET:HC-05复位

3,AT+VERSION?:获取HC-05的软件版本号,只能获取,不能修改。

4,AT+ORGL:恢复出厂默认设置,当把模块设置乱了,使用此命令进行恢复默认值。

5,AT+ADDR?:获取HC-05的蓝牙地址码,只能获取,不能修改。

6,AT+NAME?:获取HC-05的名字,AT+NAME=BSP-06,修改模块的名字为BSP-06,具体名字自行修改。

7,AT+CLASS?:设置查询设备的类型,尽量不要去修改此参数。默认是1F00。

8,AT+IAC?:查询设置查询访问码,默认是9E8B33,尽量不要去修改此参数。

9,AT+PSWD?:查询设置配对密码,AT+PSWD=”0000”,密码要有双引号,密码是四位数字.

10, AT+UART:AT+UART?是查询当前模块的波特率,AT+UART=波特率是设置.

11, AT+CMODE:AT+CMODE?是查询当前连接模式。AT+CMODE=0,1,2(0——指
定蓝牙地址连接模式(指定蓝牙地址由绑定指令设置)1——任意蓝牙地址连接模式(不受绑定指令设置地址的约束)2——回环角色(Slave-Loop)默认连接模式:0)。

12, AT+BIND:AT+BIND?查询当前绑定地址,AT+BIND=NAP,UAP,LAP(用逗号隔开)。

13, AT+RMADD:从蓝牙配对列表中删除所有认证设备.

14, AT+STATE?:获取蓝牙模块工作状态.

15, AT+LINK=NAP,UAP,LAP:与远程设备建立连接。

16, AT+DISC:断开连接.

17, AT+RNAME?NAP,UAP,LAP:获取远程蓝牙设备名称.

18, AT+ADCN?:获取蓝牙配对列表中认证设备数。

19, AT+MRAD?获取最近使用过的蓝牙认证设备地址。

20, AT+INQM:设置查询模式,AT+INQM=1,9,48(1-带RSSI信号强度指示,9-超过9个
蓝牙设备响应则终止查询,48-设定超时为48*1.28=61.44秒)

实战:透传控制LED灯

/*** @brief  初始化控制LED的IO* @param  无* @retval 无*/
void HC05_GPIO_Config(void)
{		GPIO_InitTypeDef GPIO_InitStructure;/*开启GPIO时钟*/RCC_AHB1PeriphClockCmd( BLT_INT_GPIO_CLK|BLT_KEY_GPIO_CLK, ENABLE); GPIO_InitStructure.GPIO_Pin = BLT_INT_GPIO_PIN;	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;GPIO_Init(BLT_INT_GPIO_PORT, &GPIO_InitStructure);	GPIO_InitStructure.GPIO_Pin = BLT_KEY_GPIO_PIN;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;    GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;GPIO_Init(BLT_KEY_GPIO_PORT, &GPIO_InitStructure);	
}/** 函数名:USARTx_Config* 描述  :USART GPIO 配置,工作模式配置* 输入  :无* 输出  : 无* 调用  :外部调用*/
void BLT_USART_Config(u16 BaudRate)
{GPIO_InitTypeDef GPIO_InitStructure;USART_InitTypeDef USART_InitStructure;RCC_AHB1PeriphClockCmd(BLT_USART_GPIO_CLK, ENABLE);/* config USART clock */RCC_APB1PeriphClockCmd(BLT_USART_CLK, ENABLE); /* 连接 PXx 到 USARTx_Tx*/GPIO_PinAFConfig(BLT_USART_TX_PORT,BLT_USART_TX_SOURCE, BLT_USART_TX_AF);/*  连接 PXx 到 USARTx__Rx*/GPIO_PinAFConfig(BLT_USART_RX_PORT,BLT_USART_RX_SOURCE,BLT_USART_RX_AF); /* USARTconfig *//* Configure USART as alternate function push-pull */GPIO_InitStructure.GPIO_Pin = BLT_USART_TX_PIN;GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;GPIO_Init(BLT_USART_TX_PORT, &GPIO_InitStructure);/* Configure USART as input floating */GPIO_InitStructure.GPIO_Pin = BLT_USART_RX_PIN;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;GPIO_Init(BLT_USART_RX_PORT, &GPIO_InitStructure);/* USART mode config */USART_InitStructure.USART_BaudRate = BaudRate;USART_InitStructure.USART_WordLength = USART_WordLength_8b;USART_InitStructure.USART_StopBits = USART_StopBits_1;USART_InitStructure.USART_Parity = USART_Parity_No ;USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;USART_Init(BLT_USARTx, &USART_InitStructure); /*	配置中断优先级 */NVIC_Configuration();/* 使能串口接收中断 */USART_ITConfig(BLT_USARTx, USART_IT_RXNE, ENABLE);//使能串口总线空闲中断 	USART_ITConfig (BLT_USARTx, USART_IT_IDLE, ENABLE );USART_Cmd(BLT_USARTx, ENABLE);USART_ClearFlag(BLT_USARTx, USART_FLAG_TC);
}/***************** 发送一个字符  **********************/
static void Usart_SendByte( USART_TypeDef * pUSARTx, uint8_t ch )
{/* 发送一个字节数据到USART1 */USART_SendData(pUSARTx,ch);/* 等待发送完毕 */while (USART_GetFlagStatus(pUSARTx, USART_FLAG_TXE) == RESET);	
}
/*****************  发送指定长度的字符串 **********************/
void Usart_SendStr_length( USART_TypeDef * pUSARTx, uint8_t *str,uint32_t strlen )
{unsigned int k=0;do {Usart_SendByte( pUSARTx, *(str + k) );k++;} while(k < strlen);
}/*****************  发送字符串 **********************/
void Usart_SendString( USART_TypeDef * pUSARTx, uint8_t *str)
{unsigned int k=0;do {Usart_SendByte( pUSARTx, *(str + k) );k++;} while(*(str + k)!='\0');
}//获取接收到的数据和长度
char *get_rebuff(uint16_t *len) 
{*len = BLT_USART_ReceiveData.datanum;return (char *)&BLT_USART_ReceiveData.uart_buff;
}//清空缓冲区
void clean_rebuff(void)
{uint16_t i=UART_BUFF_SIZE+1;BLT_USART_ReceiveData.datanum = 0;BLT_USART_ReceiveData.receive_data_flag = 0;while(i)BLT_USART_ReceiveData.uart_buff[--i]=0;}/*** @brief  初始化GPIO及检测HC05模块* @param  无* @retval HC05状态,0 正常,非0异常*/
uint8_t HC05_Init(u16 BaudRate)
{uint8_t i;HC05_GPIO_Config();BLT_USART_Config(BaudRate);BLT_KEY_HIGHT;for(i=0;i<BLTDEV_MAX_NUM;i++){sprintf(bltDevList.unpraseAddr[i]," ");sprintf(bltDevList.name[i]," ");}	bltDevList.num = 0;return HC05_Send_CMD("AT\r\n",1);
}void control_led_func(void)
{/* 处理蓝牙串口接收到的蓝牙数据 */if(BLT_USART_ReceiveData.receive_data_flag == 1){BLT_USART_ReceiveData.uart_buff[BLT_USART_ReceiveData.datanum] = 0;//串口助手显示接收到的数据Usart_SendString( DEBUG_USART, "\r\nrecv HC-05 data:\r\n" );Usart_SendString( DEBUG_USART, BLT_USART_ReceiveData.uart_buff );Usart_SendString( DEBUG_USART, "\r\n" );if( strstr((char *)BLT_USART_ReceiveData.uart_buff,"1") == (char *)BLT_USART_ReceiveData.uart_buff ){LED1_TOGGLE;}//清零蓝牙串口数据缓存BLT_USART_ReceiveData.receive_data_flag = 0;		//接收数据标志清零BLT_USART_ReceiveData.datanum = 0;  }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/472084.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Kotlin基础——类、对象和接口

文章目录 1 定义类继承结构1.1 接口1.1.1 接口概述1.1.2 接口中的默认方法1.1.3 接口方法重复1.1.4 Kotlin接口中静态方法实现原理 1.2 修饰符1.2.1 类继承修饰1.2.2 方法重写修饰1.2.3 抽象类1.2.4 接口的修饰符 1.3 可见性修饰符1.3.1 Kotlin中的可见性修饰符1.3.2 Kotlin中的…

蓝桥杯真题:扑克牌移动

import java.util.*; public class Main {public static List moveCard(List src){if(srcnull) return null;List dst new Vector();for(;;){if(src.size()0) break; // 填空src.add(src.remove(0));//remove(0) 是一个 List 接口中的方法调用&#xff0c;它表示移除列表中指…

【VSCode】使用笔记

目录 快捷键系列 相关插件 相关文档链接 快捷键系列 调出终端 ctrl 或者是ctrlJ 结束进程 ctrlc 注释 ctrlkc 取消注释 ctrlku 上下移动代码 alt方向键 多行光标ctrlalt方向键 快速跳过某个单词 ctrl方向键 相关插件 1.每次修改后&#xff0c;自动保存启动项目 相…

selenium定位元素报错:‘WebDriver‘ object has no attribute ‘find_element_by_id‘

Selenium更新到 4.x版本后&#xff0c;以前的一些常用的代码的语法发生了改变 from selenium import webdriver browser webdriver.Chrome() browser.get(https://www.baidu.com) input browser.find_element_by_id(By.ID,kw) input.send_keys(Python)目标&#xff1a;希望通…

解决vitepress首次加载慢(从40秒到1秒的倔强)

前言&#xff1a;在艰难的博客系统升级之路 这篇博客中我有提到vitepress首次加载非常耗时的问题&#xff0c;之前也在网上搜索时发现也有很多人说这个“问题”&#xff0c;但是在折腾了这么一段时间后&#xff0c;发现这也许本身不是vitepress的问题&#xff0c;而是我的启动方…

娅奴服饰:行至云深处,问计新零售

编辑&#xff1a;阿冒 设计&#xff1a;沐由 大浪壮美&#xff0c;时尚前行。 作为广东省首批特色小镇创建示范点&#xff0c;以及粤港澳大湾区唯一的特色时尚小镇&#xff0c;大浪时尚小镇云集了700余家服装及配套企业&#xff0c;涌动着蓬勃的生机与无尽的活力。 国内知名的“…

基于Java (spring-boot)的房屋租赁管理系统

一、项目介绍 基于Java (spring-boot)的房屋租赁管理系统功能&#xff1a;登录、管理员、租客、公告信息管理、房屋信息管理、用户信息管理、租金信息管理、故障信息管理、房屋出租信息详情、个人信息、修改密码、等等等。 适用人群&#xff1a;适合小白、大学生、毕业设计、课…

P1090 [NOIP2004 提高组] 合并果子 / [USACO06NOV] Fence Repair G题解

题目 在一个果园里&#xff0c;多多已经将所有的果子打了下来&#xff0c;而且按果子的不同种类分成了不同的堆。多多决定把所有的果子合成一堆。 每一次合并&#xff0c;多多可以把两堆果子合并到一起&#xff0c;消耗的体力等于两堆果子的重量之和。可以看出&#xff0c;所…

Springboot的it职业生涯规划系统(有报告)。Javaee项目,springboot项目。

演示视频&#xff1a; Springboot的it职业生涯规划系统&#xff08;有报告&#xff09;。Javaee项目&#xff0c;springboot项目。 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三层体系结构&a…

【Linux】初步使用makefile

makefile 1 快速使用1.1 认识makefile1.2 使用makefile 2 深入理解理解 **依赖关系 与 依赖方法**如何实现源代码修改了才会重新编译 3 内置符号理解Thanks♪(&#xff65;ω&#xff65;)&#xff89;谢谢阅读&#xff01;&#xff01;&#xff01;下一篇文章见&#xff01;&a…

家人们,比赛打完了

啊&#xff0c;终于打完一场比赛了&#xff0c;但还有三场…… 先看看我的战绩&#xff1a; 共八题&#xff0c;AC6题&#xff0c;总共3902分&#xff0c;3.7k人参加&#xff0c;第980名 来看看第一&#xff1a; A8题&#xff0c;我只有2题没做出&#xff0c;相差4000多分&am…

交通管理|交通管理在线服务系统|基于Springboot的交通管理系统设计与实现(源码+数据库+文档)

交通管理在线服务系统目录 目录 基于Springboot的交通管理系统设计与实现 一、前言 二、系统功能设计 三、系统实现 1、用户信息管理 2、驾驶证业务管理 3、机动车业务管理 4、机动车业务类型管理 四、数据库设计 1、实体ER图 五、核心代码 六、论文参考 七、最新计…