Arduino软串口动态配置HC-05蓝牙模块AT指令实战

浅谈Arduino进入蓝牙模块的AT指令模式 不要再用上位机和USB转TTL模块进蓝牙模块的AT指令了,换Arduino吧! 阅读详情

1. 项目背景与需求

最近在带学生做智能小车项目时遇到了一个很实际的问题——我们统一采购的HC-05蓝牙模块默认名称都是"HC-05",当多个模块同时工作时,根本分不清哪个对应哪辆车。更麻烦的是,有些模块还需要修改配对密码和通信参数。如果每个模块都要用USB-TTL转换器来配置,不仅效率低下,还需要额外的硬件设备。

我尝试用Arduino板子直接配置蓝牙模块,这样既节省设备成本,又能在项目现场快速调试。经过多次实测,终于摸索出一套稳定可靠的软串口动态配置方案。这个方法特别适合教育培训场景,比如BOE芯火项目的学生都能快速上手。

2. 硬件准备与接线方法

2.1 所需材料清单

你需要准备以下硬件:

  • Arduino开发板(UNO、Nano或ESP8266都行,我用的NodeMCU)
  • HC-05蓝牙模块(注意区分HC-05和HC-06)
  • 4根杜邦线(建议用双母头)
  • USB数据线(用于供电和程序烧录)
  • 智能手机(安装蓝牙调试APP)

2.2 详细接线步骤

接线其实很简单,但有几个关键点需要注意:

  • 蓝牙模块的TX接Arduino的软串口RX(我用的D6)
  • 蓝牙模块的RX接Arduino的软串口TX(我用的D5)
  • VCC接3.3V(千万不要接5V,会烧模块!)
  • GND接GND

这里有个实用技巧:我在每根线上贴了彩色胶带,红色接电源,黑色接地,黄色和绿色交叉连接TX/RX。这样不仅美观,还能避免接错线损坏设备。

3. 理解AT指令与通信协议

3.1 AT指令基础

AT指令是调制解调器时代的遗产,现在广泛用于各种通信模块。每条指令都以"AT"开头,所以得名。HC-05支持的常用指令包括:

  • AT+NAME? 查询模块名称
  • AT+NAME=XXX 设置模块名称
  • AT+PSWD? 查询配对密码
  • AT+PSWD=1234 设置配对密码
  • AT+UART? 查询串口参数
  • AT+UART=9600,0,0 设置波特率(9600,无校验,1停止位)

3.2 指令格式细节

每条指令必须以\r\n结尾,这就是回车换行符。很多新手会忽略这个细节,导致指令发送失败。在代码中直接写Serial.print("AT\r\n")比用Serial.println("AT")更可靠,因为println的换行符可能因系统而异。

4. 进入AT模式的技巧

4.1 按键进入法

这是最常用的方法:给模块上电时按住按键不放,直到指示灯变为慢闪(约2秒一次)。但实际操作中我发现有个坑——有些模块需要一直按住,有些按一下就行。建议这样操作:

  1. 先按住模块上的小按键
  2. 再给模块上电
  3. 观察指示灯:快闪(2秒4次)是配对模式,慢闪才是AT模式
  4. 如果指示灯快闪,重新执行上述步骤

4.2 自动进入法

其实还有更简单的方法:将模块的KEY引脚接高电平(3.3V),然后上电就会自动进入AT模式。这样就不用每次都按按键了,特别适合批量配置的场景。

5. 软串口库的使用与配置

5.1 初始化设置

SoftwareSerial库让我们可以用任意数字引脚模拟串口通信。初始化很简单:

#include <SoftwareSerial.h>
SoftwareSerial BT(14, 12); // RX=D5, TX=D6

void setup() {
  Serial.begin(38400);    // 硬件串口用于调试
  BT.begin(38400);        // 软串口连接蓝牙模块
  Serial.println("System ready!");
}

5.2 波特率匹配

这里有个关键点:HC-05在AT模式下默认波特率是38400,而正常工作模式通常是9600。很多人在这一步出错,因为波特率不匹配会导致乱码。我建议先用38400配置AT参数,完成后再修改为项目需要的波特率。

6. 完整代码实现

6.1 基础通信框架

先搭建一个双向通信的框架,这样既能发送指令又能接收响应:

#include <SoftwareSerial.h>
SoftwareSerial BT(14, 12); // RX=D5, TX=D6

char val;

void setup() {
  Serial.begin(38400);
  BT.begin(38400);
  Serial.println("Bluetooth AT config ready");
}

void loop() {
  // 从电脑串口读取数据并发送给蓝牙
  if (Serial.available()) {
    val = Serial.read();
    BT.print(val);
  }
  
  // 从蓝牙读取数据并发送到电脑串口
  if (BT.available()) {
    val = BT.read();
    Serial.print(val);
  }
}

6.2 封装常用功能

为了使用方便,我把常用功能封装成函数:

void queryName() {
  BT.print("AT+NAME?\r\n");
  delay(200);
  readResponse();
}

void setName(String name) {
  BT.print("AT+NAME=" + name + "\r\n");
  delay(200);
  readResponse();
}

void readResponse() {
  delay(100); // 等待数据接收完成
  while (BT.available()) {
    String data = BT.readString();
    Serial.println("Response: " + data);
  }
}

7. 调试技巧与常见问题

7.1 指示灯状态解读

蓝牙模块的指示灯能告诉我们很多信息:

  • 快闪(每秒2次):可配对状态
  • 慢闪(每2秒1次):AT命令模式
  • 双闪(连闪2次停顿):已连接状态
  • 常亮:通信中
  • 常灭:电源或硬件故障

7.2 常见错误排查

在我教学过程中,学生最常遇到这些问题:

  1. 无响应:检查接线是否正确,特别是TX/RX是否交叉连接
  2. 乱码:确认波特率设置一致,AT模式用38400
  3. 指令失败:确保处于AT模式(指示灯慢闪)
  4. 模块发烫:立即断电,检查是否误接5V电压

有个实用的调试技巧:先用串口监视器发送单个字符,看是否能收到回显。如果能看到你输入的字符,说明软串口工作正常。

8. 实际应用案例

8.1 批量配置方案

在BOE芯火项目中,我们需要一次性配置20多个蓝牙模块。手动操作太麻烦,于是我写了段批量配置代码:

void setup() {
  // 初始化代码...
  configModule("Car01", "1234");
  configModule("Car02", "1234");
  // 更多配置...
}

void configModule(String name, String pwd) {
  setName(name);
  setPassword(pwd);
  setBaudRate(9600);
  saveSettings();
}

8.2 动态参数配置

更高级的用法是动态配置参数。比如根据环境噪声水平自动调整通信波特率:

void adaptiveBaudrate() {
  int noiseLevel = readNoiseSensor();
  if (noiseLevel > threshold) {
    setBaudRate(57600); // 高噪声环境用高速率
  } else {
    setBaudRate(9600);  // 低噪声环境用低速率
  }
}

9. 进阶技巧与优化

9.1 响应超时处理

原始代码使用delay等待响应,不够智能。我改进为带超时检测的版本:

String readWithTimeout(int timeout) {
  String response = "";
  unsigned long start = millis();
  while (millis() - start < timeout) {
    if (BT.available()) {
      char c = BT.read();
      response += c;
      if (c == '\n') break; // 遇到换行符认为接收完成
    }
  }
  return response;
}

9.2 错误重试机制

增加自动重试功能,提高可靠性:

bool sendCommand(String cmd, int retries) {
  for (int i = 0; i < retries; i++) {
    BT.print(cmd + "\r\n");
    String response = readWithTimeout(500);
    if (response.indexOf("OK") >= 0) {
      return true;
    }
    delay(100);
  }
  return false;
}

10. 项目集成建议

在实际的智能小车项目中,我建议这样集成蓝牙配置功能:

  1. 上电时检测配置按钮是否按下
  2. 如果按下按钮,进入配置模式,指示灯慢闪
  3. 通过手机APP发送配置指令
  4. 配置完成后自动重启进入正常工作模式

这样就不需要电脑参与现场配置了,特别适合教育培训场景。学生们用手机就能完成所有配置操作,体验很好。

记得每次配置后都要测试通信质量,用不同距离和障碍物情况测试连接稳定性。我在实验室测试时发现,虽然HC-05标称距离10米,但有墙体阻隔时可能会降到3-5米,这些实际参数都需要实测确认。

做好这些准备工作后,你的蓝牙智能小车项目就能顺利开展了。这种软串口配置方法不仅适用于HC-05,同样适用于其他支持AT指令的通信模块,比如WiFi模块和LoRa模块。

Arduino 连接JDY-08蓝牙模块 Arduino 连接JDY-08蓝牙模块 文章目录Arduino 连接JDY-08蓝牙模块简介一、基本连接二、软件连接三、手机连接 简介 从蓝牙4.0开始包含两个蓝牙芯片模块:传统/经典蓝牙模块(Classic Bluetooth,简称BT)和低功耗蓝牙(Bluetooth Low Energy,简称BLE) 。经典蓝牙是在之前的蓝牙1.0,1.2,2.0+EDR,2.1+EDR,3.0+EDR等基础上发展和完善起来的,而低功耗蓝牙是Nokia的Wibree标准上发展起来的,是完全不同两个标准。 经典蓝牙模 阅读详情

相关推荐

Arduino使用多个串口的方法

问题 如果想要给Arduino UNO R3同时接上WiFi模块和蓝牙模块时,但是Arduino的串口只有一个,怎样才能让Arduino同时使用多个串口呢? 解决方案 其实Arduino官方提供了一个软串口的库SoftwareSerial,不需要额外的去库管理面板中导入,只需一句include语句就可以使用它 #include <SoftwareSerial.h> 这个库可以将Ar...

Matrix-do something 2万+

Linux时间设置入门:date -s命令详解

经验总结date -s命令虽然简单,但在系统维护中非常实用。掌握它可以帮助你快速解决时间相关的问题。拓展方向:如果你对时间管理有更高要求,可以学习ntpdate命令,用于同步网络时间。

BlackironPanther23的博客 1069

【手把手系列】ARDUINO蓝牙通信(HC-05/HC-06)

前言 HC-05和HC-06作为比较主流的蓝牙模块,在使用时候不仅省事,还很稳定。这次就来说说如何配置两个模块进行串口通信,自己踩过的几个坑,作为TIPS吧: 1、HC-06的确可以作为主机,但是每次断电后,就会回到从机模式。 2、HC-05是主从一体,如果价格差不多的话,就直接入HC-05。 3、无论是HC-05还是HC-06,进入AT模式的时候串口速率是38400,正常透传的时候,串口速率是9...

浅行机器人工作室 3900

linux时间同步命令_dos命令net time图文教程,与网络另外一台计算机同步时间时钟...

大家好,我是老盖,首先感谢观看本文,本篇文章做的有视频,视频讲述的比较详细,也可以看我发布的视频。今天我们学习net命令中time这个命令,此命令的语法是:NET TIME[computername | /DOMAIN[:domainname] | /RTSDOMAIN[:domainname]] [/SET]NET TIME 将计算机的时钟与其他计算机或域的时钟同步,或显示计算机或域的时间。当在...

weixin_39960116的博客 707

Arduino蓝牙模块与手机通信---实现蓝牙控制LED

Arduino蓝牙模块与手机通信---实现蓝牙控制LED

m0_63715549的博客 9093

HC05蓝牙模块AT指令全攻略:从改名到改波特率的Arduino实操指南

本文详细介绍了HC05蓝牙模块的AT指令配置方法,包括设备重命名、波特率调整和主从模式切换等实用技巧。通过Arduino软串口实现与HC05的通信,提供完整的代码示例和硬件连接指南,帮助开发者快速掌握蓝牙模块的定制化配置。

brandy的博客 747

Linux: 硬件时钟, 系统时钟, 网络时钟, 时区修改和同步

目录 基础认识 常用命令 查看和修改Linux的时区 timedatectl 时钟同步 用硬件时钟同步系统时钟: 用系统时钟同步硬件时钟: 同步网络时间 查看和修改Linux的时间 时钟--详解 硬件时钟 系统时钟 时间同步 时间标准 网络时间 ntp时钟同步服务 chrony时钟同步服务 备注 ntp常用服务器 基础认识 操作系统的时间(时钟)由以下4个部分决定: 时间数值 时间标准(本地时间/UTC/其他) 时区 夏令时(DST,Dayl..

琦彦 2万+

HC-05蓝牙模块AT指令模式详解与Arduino软件切换实战

串口通信是嵌入式系统和物联网设备中实现数据交换的基础技术,其核心原理是通过发送和接收数据帧实现设备间对话。在无线通信领域,蓝牙模块作为串口的无线延伸,极大拓展了应用场景。HC-05作为经典蓝牙串口模块,其价值不仅在于数据透传,更在于可通过AT指令进行深度配置,从而适应不同的波特率、设备名称、配对密码等参数需求,这对于批量部署和复杂应用开发至关重要。本文聚焦于HC-05的AT指令模式,详细解析其工作原理,并通过Arduino实现软件控制模式切换,解决了传统硬件短接配置的麻烦,为蓝牙遥控、智能家居、数据采集等场

weixin_34174422的博客 424

使用HC-05蓝牙模块控制Arduino开发板

在本篇文章中,我们将学习如何使用HC-05模块通过蓝牙通信控制Arduino开发板。在文章中,我列举了两个示例,使用智能手机控制Arduino开发板,以及使用笔记本电脑或PC控制Arduino开发板。在我的上一篇文章中,我们已经学习了如何配置HC-05蓝牙模块,并且作为主设备和从设备,在两个独立的Arduino开发板板之间进行蓝牙通信。 在我们开始使用智能手机控制Arduino开发板的第一个示例...

佐佐沐 5190

Arduino软串口实现HC05蓝牙模块AT指令配置全攻略

本文提供了一份详尽的Arduino软串口配置HC-05蓝牙模块的零成本攻略。通过SoftwareSerial库,无需USB转TTL工具,即可利用Arduino板直接发送AT指令,完成蓝牙名称、密码、波特率等关键设置。文章涵盖硬件连接、代码解析、实战指令及常见问题排查,是创客和开发者的实用指南。

weixin_29184371的博客 406

Win11网络卡顿?用Wireshark抓包5分钟定位问题(保姆级实战)

本文详细介绍了如何使用Wireshark在Win11系统中快速定位网络卡顿问题。通过5分钟抓包分析,作者成功发现TCP重传率高达37%的罪魁祸首,并提供了从准备工作到实战分析的保姆级教程,帮助用户解决游戏卡顿、视频会议延迟等常见网络问题。

weixin_28839629的博客 307

Arduino和HC-05蓝牙模块

在本Arduino蓝牙教程中,我们将学习如何使用HC-05模块通过蓝牙通信控制Arduino。您可以观看以下视频或阅读下面的书面教程以了解更多详细信息。 Arduino和HC-05蓝牙模块教程 概述 在本教程中,我举了两个示例,分别是使用智能手机控制Arduino和使用笔记本电脑或PC控制Arduino。 为了不使本教程过载,在我的下一个教程中,我们将学习如何配置HC-05蓝牙模块以及如何在两个作...

跨学科知识视角展现 4632

STM32控制舵机SG-5010转动,HAL库

首先设置时钟为72Mhz,预分频系数为72-1,自动重装载计数器的值为5000-1,这样的话就可以得到一个5ms的脉冲宽度,5000的计数值可以让舵机的旋转角度变得更加易控且相对精准,计算旋转角度的时候也可以更加精确。所以我们5ms脉宽,period是5000脉宽-------------角度----------pulse0.5ms-------------0度----------500;1.0ms------------45度---------1000;

qq_73783264的博客 1294

Arduino与HC05蓝牙模块的AT指令交互实战

本文详细介绍了仅使用Arduino开发板与HC05蓝牙模块进行AT指令交互的实战方法。通过SoftwareSerial软串口搭建通信桥梁,重点讲解了硬件连接时序、软件编程逻辑及常用AT指令(如修改名称、密码、波特率)的发送与解析,帮助开发者无需额外工具即可灵活配置蓝牙模块,实现从基础使用到深度定制的跨越。

ik678901的博客 708

多层感知机 Multilayer Perceptron | MLP

本文主要简单介绍了多层感知机的基本概念,优缺点,应用场景,建模时的注意事项,评价指标,实现方法,python示例和模型的参数等。

JasonH2021的博客 3万+

ArcGIS遥感影像分类技术在植被覆盖度计算中的应用

本文详细介绍了如何利用ArcGIS遥感影像分类技术高效计算植被覆盖度。通过数据准备、监督与非监督分类方法详解,并结合制表分析与栅格计算器进行面积统计,最终实现从分类图到覆盖度百分比的全流程自动化与可视化,为生态评估与规划提供精准数据支持。

weixin_29091445的博客 421

HC-05蓝牙模块arduino通信实例代码以及注意事项

HC-05蓝牙模块arduino通信实例代码以及注意事项HC-05的接线及使用进入蓝牙的设置模式进入AT命令模式(设置蓝牙参数)注意事项进入AT模式的代码(注意在通电之前让蓝牙模块进入设置模式)进入AT模式响应常用AT命令如下完整小车蓝牙控制代码 HC-05的接线及使用 单个使用时只需接rx,tx,vcc,gnd四个引脚并将模块的rx与单片机的tx连接(硬串口或软串口),tx与单片机的rx连接(硬...

RiseC的博客 3656

基于SSM的足浴管理系统(源码+开题)

研究内容: 本研究的内容主要包括以下几个方面:首先,我们需要对现有的足浴管理系统进行深入的研究和分析,了解其优缺点;最后,我们需要对新设计的系统进行评估和优化,以满足用户的需求和提升系统的使用体验。因此,开发一种基于SSM的足浴管理系统,能够有效地解决这些问题,提高足浴服务的质量和效率。研究目的: 本研究的主要目的是设计和实现一个功能完善、操作简便、用户体验良好的基于SSM的足浴管理系统。通过对系统的研究和设计,我们希望能够为足浴服务行业提供一个高效、便捷的工具,从而推动足浴服务行业的发展。

林科程序设计 1688

Arduino小白必看:不用USB转TTL,教你用软串口玩转HC05蓝牙AT指令

本文详细介绍了如何利用Arduino的软串口功能零成本配置HC05蓝牙模块的AT指令,包括硬件接线、软件设置和常见问题排查。通过实战案例和高级技巧,帮助初学者快速掌握蓝牙模块的配置方法,提升项目开发效率。

motor的博客 952

YOLOv8【第十三章:模型压缩与极致优化篇·第4节】LAMP 剪枝算法——无需超参的自动化剪枝策略!

🏆 本文收录于 《YOLOv8实战:从入门到深度优化》 专栏。该专栏系统复现并梳理全网各类 YOLOv8 改进与实战案例(当前已覆盖分类 / 检测 / 分割 / 追踪 / 关键点 / OBB 检测等方向),坚持持续更新 + 深度解析,质量分长期稳定在 97 分以上,可视为当前市面上 覆盖较全、更新较快、实战导向极强 的 YOLO 改进系列内容之一。

**My Coding Family** 5646

再不入坑就晚了,深度神经网络概念大整理,最简单的神经网络是什么样子?

再不入坑就晚了,深度神经网络概念大整理,最简单的神经网络是什么样子?

我是香菜 3万+

告别HC-05:用Arduino与软串口动态配置蓝牙模块的实战指南

本文介绍了使用Arduino和软串口技术动态配置蓝牙模块的实战方法。通过软串口与AT指令,无需额外硬件即可灵活修改蓝牙模块名称、密码等参数,显著提升物联网开发和教学实验效率。重点讲解了硬件连接、代码实现及调试技巧。

jenkins8butler的博客 185

ESP32学习笔记06-UART 的485 通讯模式

通信方式选择UART 控制器支持多种通信模式,使用函数 uart_set_mode() 可以选择模式。选择特定模式后,UART 驱动程序将处理已连接 UART 设备的相应行为。例如,主机开始向 Tx FIFO 缓冲区写入数据时,UART 驱动程序会自动置位 RTS 管脚(逻辑 1);最后一位数据传输完成后,驱动程序就会取消置位 RTS 管脚(逻辑 0)。要使用此模式,软件。

Car12 2476

蓝牙模块HC-05的调试(利用LED灯来检验信号是否能正常传输)

蓝牙模块HC-05的调试(利用LED灯来检验信号是否能正常传输) by hasyu 我所用到的硬件 BlueTooth HC-05,arduino 2560(uno也行吧) 电脑 手机 硬件的连接 不同步骤不一样,所以丢到后面。 蓝牙模块的不同模式解读 AT模式 首先按住蓝牙模块上的复位键然后再上电,看见蓝牙模块上的LED灯以2s间隔闪烁,就表示进入了AT模式 记住串口助手的波特率设置为38400,停止位1位,数据为8位,奇偶校验无,另外一定要勾上“发送新行”! 当然如果使用arduino 自带

qq_52331964的博客 5974

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

关于hc-05蓝牙和arduino串口通信的那些事情

主要原因是arduino uno只有一个硬串口,如果arduino的硬串口接了蓝牙的话,那么arduino uno的程序烧录就会有问题,根本烧录不了。然后设置B的配对密码,代码为:AT+PWSD="1111"(具体密码是根据你的实际情况,想改什么就改什么)。蓝牙断电,长按hc-05按钮,然后上电,如果hc-05的led灯出现2秒慢闪的情况,说明进入了AT模式。返回连接模式,1表示任意蓝牙地址连接模式,0表示指定蓝牙地址连接模式,需要地址绑定。,不然会连接错别人的蓝牙,或者自己的蓝牙被别人连接(深刻的教训)

m0_61181020的博客 4434

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

Arduino控制HC-05蓝牙模块:AT指令与透传模式切换全攻略

串口通信是嵌入式系统和物联网设备中实现数据交换的基础技术,其原理是通过发送和接收数据帧在设备间建立可靠的数据通道。在无线通信领域,蓝牙技术因其低功耗和通用性成为短距离数据传输的主流方案,其中蓝牙模块的AT指令集提供了灵活的配置接口。通过掌握AT指令,开发者可以自定义模块参数,实现设备间的稳定配对与通信,这对于智能家居、远程控制和可穿戴设备等应用场景至关重要。本文聚焦于HC-05蓝牙模块,详细解析如何利用Arduino作为控制器,实现AT指令模式与透传模式间的灵活切换,并提供了完整的硬件连接方案和代码实现,帮

weixin_30861797的博客 461

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

上一篇: RFID系统设计陷阱与优化:从毕设到工业级应用的跨越
下一篇: 智慧农业中的I2C实战:从代码调试到传感器融合的工程化思考
linux6sysadmin
博客等级 码龄4年 59粉丝 1615原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值