1. 初识HC-05:你的无线串口利器
HC-05蓝牙模块可以说是嵌入式开发中最经典的无线通信模块之一了。我用了这么多年,最大的感受就是:它本质上就是一个无线串口。你不需要懂复杂的蓝牙协议栈,只要会串口通信,就能轻松实现无线数据传输。
这个模块特别适合STM32、Arduino等单片机与手机、电脑之间的通信。比如我做过的智能小车项目,就是用STM32通过HC-05把传感器数据实时发送到手机APP上,同时接收手机的控制指令。实际测试下来,10米内的传输相当稳定,再远一些就会偶尔丢包了。
HC-05支持主从两种模式,这是它比HC-06更灵活的地方。从机模式就是乖乖等待别人来连接,主机模式则可以主动搜索并连接其他设备。两个HC-05之间可以配对通信,实现单片机之间的无线数据传输。
模块的工作电压是3.3V到6V,但RXD引脚建议接3.3V电平。我一般直接接STM32的3.3V和GND,通信完全没问题。模块上有两个重要的引脚:KEY用于进入AT模式,STATE用于指示连接状态(连接后输出高电平)。
2. 硬件连接与AT模式进入
要让HC-05正常工作,首先得正确接线。我用的是USB-TTL模块来调试,接线方式如下:
HC-05的VCC接USB-TTL的5V,GND接GND,TXD接USB-TTL的RXD,RXD接USB-TTL的TXD。这里一定要注意交叉连接,这是很多新手容易出错的地方。
KEY引脚用于进入AT模式。有两种方法进入AT模式:
方法一:按住KEY键上电 这是最常用的方法。先给HC-05断电,按住模块上的KEY按钮(或者把KEY引脚接高电平),然后再上电。这时候模块的LED会变成慢闪(约2秒一次),表示已经进入AT模式。
方法二:KEY接高电平后上电 先把KEY引脚接3.3V或5V高电平,然后再给模块供电。这样也会进入AT模式,而且此时串口波特率固定为38400,适合当你忘记模块当前波特率时使用。
我个人推荐第一种方法,因为更方便。实测中我发现,有些版本的HC-05对KEY引脚的电平要求比较严格,如果发现进入不了AT模式,可以尝试调整KEY引脚的电平值。
进入AT模式后,就可以用串口调试工具(如SSCOM、XCOM等)与模块通信了。串口参数设置为:波特率38400、数据位8、停止位1、无校验位。记得勾选"发送新行"或"加回车换行",因为AT指令需要以\r\n结尾。
3. 常用AT指令详解
HC-05的AT指令集相当丰富,但最常用的就那几个。下面我结合实际使用经验,详细说明每个指令的用法和注意事项。
基本测试指令
AT
这个指令用于测试模块是否正常工作。如果返回OK,说明通信正常。如果没反应,首先检查接线是否正确,特别是TXD和RXD是否交叉连接。然后检查波特率是否正确,AT模式下一般是38400。
查询和设置设备名称
AT+NAME? // 查询当前名称
AT+NAME=MyBT // 设置名称为MyBT
设置名称后,其他设备搜索蓝牙时就会看到这个名字。我建议取个有意义的名称,比如"SmartCar_BT",这样容易识别。
查询和设置配对密码
AT+PSWD? // 查询当前密码
AT+PSWD=5678 // 设置密码为5678
默认密码是1234,为了安全起见,最好改成自己的密码。两个要配对的模块密码必须相同。
查询和设置串口参数
AT+UART? // 查询当前串口参数
AT+UART=115200,0,0 // 设置波特率115200,无校验,1停止位
这里可以设置数据模式下的串口参数。我一般用115200,传输速度更快。注意第一个参数是波特率,第二个是停止位(0表示1位),第三个是校验位(0表示无校验)。
查询和设置工作角色
AT+ROLE? // 查询当前角色
AT+ROLE=1 // 设置为主机模式
角色设置很重要:0是从机,1是主机。两个HC-05通信时,一个设为主机,一个设为从机。
查询蓝牙地址
AT+ADDR?
这个指令会返回模块的蓝牙地址,格式如1234:56:7890。在配置主从配对时,需要用到从机的地址。
我在实际使用中发现,发送AT指令时一定要用大写字母,而且要以\r\n结尾。有些串口调试工具默认不加换行符,会导致指令无效。
4. 双机互联实战配置
让两个HC-05模块互相通信,是很多项目的需求。下面我详细说说配置步骤,这些都是我实际项目中总结的经验。
步骤一:硬件准备 准备两个HC-05模块和两个USB-TTL下载器。如果只有一个下载器,也可以分两次配置。接线方式前面已经说过,记得一定要交叉连接TXD和RXD。
步骤二:配置从机模块 先配置B模块为从机:
- 让B模块进入AT模式(LED慢闪)
- 发送
AT+ROLE=0设置為从机模式 - 发送
AT+ADDR?查询地址并记录下来 - 发送
AT+UART?确认波特率,如果需要可以设置 - 发送
AT+PSWD?确认密码,如果需要可以设置
步骤三:配置主机模块 然后配置A模块为主机:
- 让A模块进入AT模式
- 发送
AT+ROLE=1设置为主机模式 - 发送
AT+BIND=1234,56,7890绑定从机地址(用刚才记录的地址,冒号换成逗号) - 发送
AT+CMODE=0设置只连接绑定设备 - 发送
AT+PSWD=5678设置密码(与从机相同) - 发送
AT+UART=9600,0,0设置波特率(与从机相同)
步骤四:测试通信 两个模块都断电,KEY引脚悬空(退出AT模式),然后重新上电。主机模块会自动搜索并连接从机。连接成功后,两个模块的LED都会变为常亮或者双闪。
这时候,你可以用两个USB-TTL分别连接两个模块,通过串口调试工具发送数据。从A模块发送的数据,B模块应该能收到,反之亦然。
我在实际项目中遇到过一个问题:有时候主机无法自动连接从机。这时候可以尝试先让主机清除绑定记录,重新绑定。方法是:主机进入AT模式,发送AT+RMAAD清除配对记录,然后重新绑定地址。
5. 手机与HC-05通信实战
HC-05与手机通信是很常见的应用场景。下面我以Android手机为例,说明具体操作步骤。
手机端准备 首先在手机应用市场搜索"蓝牙串口"或"Serial Bluetooth",安装一个串口调试APP。我常用的是"蓝牙串口助手"或者"Serial Bluetooth Terminal"。
蓝牙模块配置 HC-05默认就是从机模式,所以通常不需要特别配置。但如果之前修改过参数,最好恢复一下出厂设置:
- 进入AT模式
- 发送
AT+ORGL恢复出厂设置 - 发送
AT+NAME=HC-05设置名称(可选) - 发送
AT+PSWD=1234设置密码(可选)
手机连接步骤
- 打开手机蓝牙设置,搜索设备
- 找到"HC-05"(或者你设置的名称),点击配对
- 输入密码1234(或者你设置的密码)
- 打开蓝牙串口APP,选择HC-05连接
数据传输测试 连接成功后,就可以测试通信了。在APP中发送数据,HC-05会通过串口输出;通过串口给HC-05发送数据,手机APP也能收到。
我在做一个智能家居项目时,就用手机通过HC-05控制STM32开发板上的LED灯。手机发送"ON"开灯,发送"OFF"关灯。STM32也会把温度传感器数据通过HC-05发送到手机显示。
需要注意的是,iOS系统对经典蓝牙的支持有限,HC-05可能无法直接连接iPhone。如果需要连接苹果设备,建议使用BLE蓝牙模块如HM-10。
6. 常见问题与解决方案
在使用HC-05的过程中,肯定会遇到各种问题。我整理了几个最常见的问题和解决方法。
问题一:发送AT指令没有反应 这是最常见的问题。可能的原因和解决方法:
- 检查接线:TXD和RXD是否交叉连接?KEY引脚是否接高电平?
- 检查波特率:AT模式下一般是38400,数据模式下是9600或其他值
- 检查指令格式:是否以
\r\n结尾?是否使用大写字母? - 模块是否真正进入了AT模式?LED应该是慢闪状态
问题二:两个HC-05无法配对 可能的原因:
- 角色设置错误:必须一个主机一个从机
- 密码不一致:两个模块的密码必须相同
- 地址绑定错误:主机绑定的从机地址是否正确?
- 波特率不一致:两个模块的通信波特率必须相同
解决方法:先让两个模块都恢复出厂设置(AT+ORGL),然后重新配置。
问题三:通信距离短或者不稳定 HC-05的理论距离是10米,但实际使用中会受到很多因素影响:
- 障碍物:墙壁、金属物会显著减弱信号
- 干扰源:WiFi路由器、微波炉等2.4G设备会造成干扰
- 电源问题:供电不足会导致发射功率降低
改善方法:尽量避开障碍物和干扰源,确保电源充足,必要时可以外接天线。
问题四:手机搜不到HC-05 可能的原因:
- 模块没有正常供电:检查VCC和GND连接
- 模块处于连接状态:已连接的模块可能不会被搜到
- 名称被修改:可能改成了不容易识别的名称
解决方法:重启模块,确认LED在快闪状态(表示可被搜索)。如果还是搜不到,可以进入AT模式检查名称设置。
我在实际项目中还遇到过一些奇怪的问题,比如模块偶尔死机。这时候最简单的解决方法就是断电重启。如果问题持续,可能是模块硬件有问题,需要更换。
记得做好电源滤波,避免因为电源噪声导致模块工作不稳定。我在每个HC-05的VCC和GND之间都加了一个100μF的电解电容和一个0.1μF的瓷片电容,效果很好。
3917



被折叠的 条评论
为什么被折叠?



