资讯动态

从‘主’到‘从’:手把手教你用HC-05蓝牙模块实现两个单片机间的无线通信(STM32 Arduino实例)

发布时间:2026/9/10 17:49:13 来源:尧图企业网站定制
从‘主’到‘从’手把手教你用HC-05蓝牙模块实现两个单片机间的无线通信STM32 Arduino实例蓝牙技术早已渗透到我们生活的方方面面但对于创客和嵌入式开发者来说如何利用蓝牙模块实现设备间的可靠通信仍然是一个值得深入探讨的话题。HC-05作为一款经典蓝牙模块其独特的主从模式切换功能为开发者提供了更多可能性。本文将带你从零开始实现两个微控制器STM32和Arduino通过HC-05模块进行双向无线通信的全过程。1. HC-05模块基础认知与准备工作HC-05蓝牙模块之所以在创客圈广受欢迎关键在于它支持主从模式切换这一核心特性。与市面上大多数只能作为从机的廉价蓝牙模块不同HC-05允许开发者根据需求灵活配置模块角色这为设备间直接通信提供了可能。模块外观识别要点正面印有HC-05标识背面带有6针接口VCC、GND、TXD、RXD、KEY、STATE特有的模式切换按钮位于KEY引脚旁硬件连接准备// Arduino基础连接示例 void setup() { pinMode(13, OUTPUT); // 连接HC-05的KEY引脚 Serial.begin(38400); // 默认AT指令波特率 }工作模式对比表特性主机模式从机模式连接方式主动扫描连接被动等待连接典型应用控制端设备被控端设备功耗较高较低多设备支持可连接多个从机只能被一个主机连接在开始项目前你需要准备以下材料HC-05模块×2建议选择正版模块STM32开发板如STM32F103C8T6Arduino开发板如Uno或NanoUSB转TTL模块用于初始配置杜邦线若干2. HC-05主从模式配置实战2.1 AT指令模式进入技巧要让HC-05进入AT指令配置模式需要特别注意操作时序断开模块电源按住模块上的KEY按钮保持按住状态接通电源等待LED指示灯变为慢闪约2秒一次常见问题排查如果LED保持快闪检查按钮是否完全按下如果无任何反应检查电源电压需3.3V-5V2.2 主从模式关键AT指令配置主机模式的核心指令ATROLE1\r\n // 设置为主机模式 ATCMODE0\r\n // 指定地址连接模式 ATBINDxxxx,xx,xxxxxx\r\n // 绑定从机地址配置从机模式的必要指令ATROLE0\r\n // 设置为从机模式 ATPSWD1234\r\n // 设置配对密码 ATUART9600,0,0\r\n // 设置通信参数提示地址绑定后主机模块上电会自动尝试连接指定从机大大简化了连接流程。2.3 地址格式处理技巧HC-05的蓝牙地址通常表示为98:D3:31:FB:08:26形式但在AT指令中需要转换为98,D3,31,FB,08,26。这个细节往往导致初学者配置失败。地址转换Python脚本def format_mac(mac): return mac.replace(:, ,) print(format_mac(98:D3:31:FB:08:26)) # 输出98,D3,31,FB,08,263. STM32与Arduino通信实现3.1 STM32端实现HAL库STM32需要通过串口与HC-05交互以下是关键初始化代码// STM32CubeIDE配置示例 UART_HandleTypeDef huart1; void SystemClock_Config(void); static void MX_GPIO_Init(void); static void MX_USART1_UART_Init(void); int main(void) { HAL_Init(); SystemClock_Config(); MX_GPIO_Init(); MX_USART1_UART_Init(); char at_command[] ATROLE1\r\n; HAL_UART_Transmit(huart1, (uint8_t *)at_command, strlen(at_command), HAL_MAX_DELAY); while (1) { // 数据接收处理 if(HAL_UART_Receive(huart1, rx_data, 1, 100) HAL_OK) { process_received_data(rx_data); } } }3.2 Arduino端实现Arduino代码相对简单但需要注意串口缓冲区的处理#include SoftwareSerial.h SoftwareSerial BTserial(10, 11); // RX, TX void setup() { Serial.begin(9600); BTserial.begin(38400); // AT模式波特率 // 配置为从机 BTserial.write(ATROLE0\r\n); delay(1000); BTserial.write(ATPSWD\1234\\r\n); } void loop() { // 转发串口数据到蓝牙 if (Serial.available()) { BTserial.write(Serial.read()); } // 转发蓝牙数据到串口 if (BTserial.available()) { Serial.write(BTserial.read()); } }3.3 数据透传优化技巧为提高通信可靠性建议实现以下机制数据分包发送每包添加校验和超时重传机制心跳包检测连接状态数据帧示例结构[起始符][长度][数据][校验和][结束符] 0xAA 0x05 ... 0xXX 0x554. 方案对比与故障排查4.1 无线技术选型对比特性HC-05蓝牙NRF24L01ESP8266 WiFi通信距离10-20m50-100m50-100m功耗中等低高配对复杂度需要配置无需配对需要网络配置数据传输率1Mbps2Mbps11Mbps多设备支持主从一对多6通道1:多支持IP网络成本中等低低4.2 常见连接问题排查指南问题1模块无法进入AT模式检查KEY引脚是否被正确拉高确认上电时序是否正确尝试降低波特率如38400→9600问题2主从机无法配对确认双方角色设置正确1主1从检查地址格式是否正确转换验证配对密码是否一致问题3数据传输不稳定检查电源是否稳定建议增加100μF电容降低通信波特率测试缩短模块间距离排除干扰注意当通信距离超过10米时建议使用外置天线版本的HC-05模块并确保无大型金属障碍物阻挡。5. 进阶应用与性能优化5.1 多从机组网方案通过配置一个主机连接多个从机可以实现简单的星型网络。关键配置点主机设置为ATCMODE1任意地址连接各从机设置不同名称便于识别实现轮询机制管理多连接轮询示例伪代码for each 从机 in 从机列表: 发送连接请求 if 连接成功: 交换数据 断开连接 end if end for5.2 低功耗优化策略虽然HC-05本身不支持BLE低功耗模式但可以通过以下方式优化动态调整发射功率ATPOW指令实现硬件休眠控制通过EN引脚减少广播间隔ATADCN指令功耗对比数据工作状态电流消耗连续传输30-40mA待机模式8-10mA休眠模式1mA5.3 固件升级建议原装HC-05支持通过串口进行固件升级可获取以下改进更稳定的连接性能支持更多AT指令改善兼容性问题升级步骤概要获取官方升级工具和固件包进入特殊bootloader模式通过串口发送固件数据验证校验和并重启在实际项目中我发现模块的放置位置对通信质量影响很大。最佳做法是将天线部分伸出设备外壳避免被金属部件包围。另外为每个数据包添加序列号可以有效解决数据包丢失或重复的问题这在长时间运行的系统中尤为重要。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价