拓十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

HC05蓝牙模块AT指令配置与Arduino实战详细教程

HC05蓝牙模块AT指令配置与Arduino实战详细教程 1. HC05模块初识与硬件准备1.1 先认清楚HC05的引脚与模块版本差异拿到一块HC05蓝牙模块第一件事不是接线上电而是先看清板子上的丝印和按键情况。市面上流通的HC05模块大致分两种一种是带按键的通常印有HC-05字样板上除了电源灯还会有一颗状态灯另一种是不带按键的裸板或积木块版本引出了EN或者叫KEY引脚通过拉高这个引脚来进入AT指令模式。HC05通常有六个引脚分别是STATE状态输出、RXD接收端、TXD发送端、GND地线、VCC电源正极、EN使能/AT模式切换。不同厂家的引脚顺序可能略有差异有的一字排开有的双排引出但功能是统一的。接线的核心规则就两条TXD接对方的RXDRXD接对方的TXD然后一定共地。这个共地问题我见过太多次了有人忘了接GND模块灯也亮了但收发数据全是乱码排查半天才发现是地线没接。供电方面也要留心。HC05的数据手册一般标称工作电压3.6V到6V所以用Arduino Uno的5V引脚供电通常没问题。但有些精简版模块只支持3.3V供电接到5V上虽然当时不烧摸上去会烫手时间长了我亲眼见过模块冒烟。保险起见看一眼模块背面的丝印说明或者直接查你手上这块的型号和批次别拿5V硬怼。1.2 进入AT指令模式是第一步也是最容易卡住的一步AT指令模式是HC05最有价值也是最有门槛的地方。很多新手拿到模块接好线打开串口助手发AT指令结果返回的是乱码或者毫无反应十有八九是根本没进入AT模式。进入AT模式的方式取决于模块类型。带按键的模块断电状态下按住板上那个小按键不松手再上电看到状态指示灯变成大约两秒闪一次的慢闪节奏就说明已经进了AT指令模式。不带按键的模块需要把EN引脚直接接到VCC5V或3.3V看模块要求然后再上电。有些模块把EN拉高后状态灯的闪烁节奏也会变通常同样是慢闪。还有一个隐蔽但关键的因素是上电时序。如果你先给模块供了电再把EN拉高很多模块是不会进入AT模式的必须在EN有效按着按键或接好高电平的前提下完成上电过程。我调试过的多数HC05只要先按下按键再插USB基本百发百中。AT模式下的默认波特率一定要搞清楚。绝大多数HC05模块出厂默认是38400但我也遇到过默认9600的版本甚至有些库存老模块默认波特率更奇怪。首次连接时如果38400没反应建议把波特率从9600、19200、38400、57600、115200这几个常见值轮询一遍串口助手调一下就能试出来。1.3 AT模式下的LED状态、接线与工具准备AT模式中状态灯慢闪数据透传模式中状态灯快闪这个判断方法比任何文档都直观。经常有人问我“模块连上手机之后怎么确认能通信”其实看灯就行手机连上HC05之后状态灯会从快闪变成常亮或者慢闪间隔变化不同模块表现不太一样但一定和断开时不同。做AT指令配置建议准备一个USB转TTL模块比如CH340或者CP2102方案的都可以。USB转TTL模块能直接接到电脑上用串口调试助手操作HC05比每次用Arduino板载芯片转发要省事得多。当然用Arduino Uno也能实现同样的效果后面我会专门讲用Arduino代替USB转TTL的接线和代码方案。准备一根公对母杜邦线一把小螺丝刀如果需要调整排针基本上就够了。串口调试助手方面Windows下我习惯用SSCOM或者XCOM也可以直接用Arduino IDE自带的串口监视器。有一个必须注意的细节发送AT指令时串口助手的“发送新行”选项要打开。具体来说要保证指令末尾带\r\n回车换行否则HC05不会把你发的内容当作一条完整指令去执行。Arduino IDE的Serial Monitor里要选择“Both NL CR”模式就是这个原因。1.4 准备好这些常见指令先心里有个底在正式操作之前我把最常用的指令清单先列出来后面逐个讲解你可以直接对着表格操作。指令功能示例返回AT测试通信是否正常OKATNAME?查询当前蓝牙名称NAME:HC-05ATNAMEMyBT修改蓝牙名称为MyBTOKATPSWD?查询配对密码PSWD:1234ATPSWD8888设置配对密码为8888OKATUART?查询当前波特率UART:38400,0,0ATUART9600,0,0设置波特率9600停止位1位无校验OKATROLE?查询主从模式ROLE:0ATROLE1设置为主模式OKATORGL恢复出厂设置OK这张表是后面所有操作的地图。需要注意不同厂商对返回信息的格式可能稍有差异比如有的是OK有的是\r\nOK\r\n只要看到OK就算成功不必强求格式完全一致。2. AT指令核心指令深入拆解2.1 基础测试指令AT先确认通信链路是否打通所有AT配置的第一步都是一样的发送一个单独的AT等待返回OK。这一步不是为了走流程而是在验证三件事波特率是否选对、硬件接线是否正确、模块是否真的处于AT模式。如果在38400波特率下发送AT返回的是乱码先别急着怀疑模块坏了很可能是波特率不对。乱码通常是“波特率不匹配”的经典症状。如果发送AT完全没有反应什么字符都不返回那大概率不是波特率问题而是接线错了或者没进入AT模式。还有一种情况是返回ERROR这种往往是指令格式不对或者参数超范围后面再排查。我调试时习惯先用USB转TTL连接不上电就发送AT观察返回不行就按着按键重新上电再试。很多时候模块被折腾得半死不活拔电等三秒再重新进入AT模式问题就解决了。AT指令模式本身也是一个“低功耗但不完全工作”的状态偶尔冷启动一下更稳。2.2 修改蓝牙名称ATNAME的用法与字符限制蓝牙名称是设备被发现时显示的名字HC05出厂默认一般叫HC-05或HC-05-BT多个设备混在一起时根本分不清谁是谁。改名字用ATNAME名称这条指令例如ATNAMECarBluetooth返回OK后重新搜索就能看到新名字。关于命名有几个隐藏规则要注意。首先名称里最好不要用中文和特殊符号很多HC05固件只扩展ASCII字符集中文字符会让模块返回ERROR或者显示乱码。其次名称长度并没有严格统一的限制但我测试中超过20个字符时有些模块会截断稳妥起见控制在15个字符以内。第三名称修改后会在下一次上电时重新广播不用手动复位。另外个别HC05模块的固件版本对ATNAME这条指令支持不够好如果返回ERROR且确认格式没错可以试着把名字改成纯英文字母和数字的组合排除特殊字符干扰。2.3 修改配对密码ATPSWD让设备更安全默认配对密码是1234这个密码是手机或电脑搜索到HC05并主动连接时需要的PIN码。如果你的项目放在公共场合或者不想让陌生人随便连上建议改成自己的密码。指令是ATPSWD8888注意密码只能是四位数字字符超过四位或包含字母通常会报ERROR。有一个容易迷惑的点是配对密码和AT指令模式没有关系。也就是说修改配对密码后再用USB转TTL发AT指令时通信不受密码限制因为AT模式走的是串口物理链路不是蓝牙无线链路。只有当手机通过蓝牙去连接HC05时才需要输入这个密码。实际项目中我建议密码不要设置得太复杂因为是自己开发的设备密码错了重新连会比较麻烦。如果真忘了密码又不想一条条试直接用ATORGL恢复出厂设置就能重置为1234。2.4 修改波特率ATUART的参数表与返厂逻辑修改波特率是最容易出问题但也是最常被需要的一项操作。HC05出厂默认波特率是38400这个速度在使用Arduino的硬件串口时刚好匹配但如果你的单片机系统用的是9600波特率比如某些传感器模块或老代码就需要修改模块的串口波特率。指令格式是ATUART参数1,参数2,参数3三个参数分别代表波特率、停止位、校验位。参数2填0表示1位停止位填1表示2位停止位参数3填0表示无校验1表示奇校验2表示偶校验。绝大多数场景下用ATUART9600,0,0就够了。支持波特率范围主要集中在1200到115200我实测过的模块支持1200、2400、4800、9600、19200、38400、57600、115200这几个常见档位超出范围会返回ERROR。有些版本固件对非标波特率支持得更好但没必要去挑战它的极限选常规值最稳。修改波特率成功之后有一个关键点模块会立即生效并重启之后如果用串口调试助手继续发AT指令必须把串口助手的波特率也切成新值否则又会出现乱码。很多人改完波特率满怀期待地给模块发指令发完还是用38400去收结果什么都收不到还以为是模块变砖了。API里有一种说法是ATUART设定的波特率只在下次上电后生效但实测下来多半是立即生效所以稳妥做法就是改完立刻把所有通信工具都切成新波特率。2.5 设置主从模式ATROLE与双机通信基础HC05支持三种工作模式从模式Slave、主模式Master、回环模式Loopback。默认是从模式手机搜索并连接HC05就是典型的从模式应用。主模式下模块会主动去连接周围广播中的从设备这个功能在做双机通信时特别有用。指令为ATROLE0从模式、ATROLE1主模式、ATROLE2回环模式。查询当前模式用ATROLE?。回环模式用得不多它会把收到的数据原样返回主要用于测试。做主从配对时除了角色设置还有两个隐藏点。一个是配对码主设备和从设备的ATPSWD必须一致否则连不上。另一个是连接模式有些模块用ATCMODE控制CMODE0表示绑定固定地址连接CMODE1表示允许任意地址连接。做双机实验时建议先把两个模块的CMODE都设为1让它们自由配对等链路通了再考虑地址绑定的事情。2.6 恢复出厂设置与红灯变砖的应对ATORGL是一条恢复出厂指令执行后模块名称回到HC-05密码回到1234波特率回到38400角色回到从模式。它是所有配置混乱时的救命稻草。使用场景主要有三个不知道当前波特率导致无法通信时直接硬件进入AT模式用38400发送ATORGL配置了错误的参数导致模块异常时项目结束后要把模块恢复给别人使用时。但要注意恢复出厂设置不等于清空模块里所有NVRAM配置个别功能位可能仍保留。如果想让模块彻底回到最干净的状态可以执行ATORGL后断电重新上电再执行一次ATRMAAD清除配对设备地址最后再断电上电。这个操作链是我在实际项目里摸索出来的官方手册里未必写这么细。3. 结合Arduino的完整实操流程3.1 方案一用USB转TTL独立配置HC05这是我强烈推荐给新手的方案。用USB转TTL模块的好处是干净、直观、可复现不会牵扯到Arduino板载串口与模块之间的冲突。接线表如下USB转TTLHC055VVCCGNDGNDTXDRXDRXDTXD不接EN若按键模块则按住按键接好线后按住模块按键再插入USB或先把EN跳线到VCC再上电串口助手选择对应的COM口波特率设为38400勾选发送新行发送AT收到OK即进入AT模式。整个流程可以这样走第一步发送ATNAMEMyDevice改名第二步发送ATPSWD8888改密码第三步发送ATUART9600,0,0改波特率第四步断电重新上电把串口助手波特率换成9600发送AT验证是否正常。走完这四步你的HC05就已经完成了最基本的定制化配置。3.2 方案二用Arduino Uno当USB转TTL桥如果手头没有USB转TTL模块用Arduino Uno、Nano或者Mega也能完成这项工作。Arduino板载的USB转串口芯片比如ATmega16U2或CH340本身就是一颗USB转TTL芯片我们只需要写一小段代码把Arduino当成一个双向透传的桥把电脑上串口助手的数据转发到HC05再把HC05的回复转回给电脑。接线方式有两种。第一种是用Arduino的硬件串口RX/TX引脚0和1接HC05但这样下载程序时必须先把HC05拆下来否则会上传失败。第二种更推荐用软件串口定义到引脚2和3上这样既不影响硬件串口下载程序也方便调试。接线如下Arduino引脚2接HC05的TXDArduino引脚3接HC05的RXD5V接VCCGND接GND。进入AT模式的操作同样要按着按键上电或EN接5V。Arduino端的代码可以直接用下面的透传程序#include SoftwareSerial.h SoftwareSerial hc05(2, 3); // RX接HC05的TXDTX接HC05的RXD void setup() { // 打开Arduino硬件串口波特率设为9600用于和电脑串口助手通信 Serial.begin(9600); // 打开软件串口和HC05通信 hc05.begin(38400); } void loop() { // 电脑串口助手 → HC05 if (Serial.available()) { hc05.write(Serial.read()); } // HC05 → 电脑串口助手 if (hc05.available()) { Serial.write(hc05.read()); } }这段代码中电脑串口助手的波特率用9600Arduino从串口助手收到数据后通过软件串口以38400发送给HC05。如果你想改HC05的波特率到ATUART9600,0,0那一步之后就把hc05.begin(38400)改成hc05.begin(9600)再重新烧录一次即可。这里有个很容易踩的坑软件串口的波特率不能随意设得过高超过57600后性能会不稳定而38400和9600都在安全范围之内所以放心用。3.3 方案三使用Arduino IDE串口监视器直接发送AT指令如果你只是临时配置不用串口调试助手Arduino IDE的串口监视器也能完成。前提依然是Arduino被烧录成透传桥程序然后在串口监视器右下角把波特率设置为9600对应程序中Serial.begin(9600)的值在底部的行结束选项里选择“Both NL CR”。接着在输入框里输入AT点击发送理论上就能在监视器窗口看到OK。Arduino IDE的串口监视器功能上比专业串口调试助手弱一些但胜在无需额外下载软件临时用一个下午够用了。3.4 从改名到改波特率的完整操作案例我以一个实际项目“蓝牙控制继电器”为例完整走一遍配置流程。项目需求是手机通过蓝牙发送字符’1’打开继电器发送’0’关闭继电器。单片机端用的Arduino UnoHC05工作波特率需要和Arduino的SoftwareSerial匹配所以我顺手把HC05从38400改成9600。完整操作步骤硬件接线。USB转TTL连接HC05TXD接RXDRXD接TXDGND共地VCC接5V。按住模块按键插入USB上电看到LED慢闪。串口助手选COM口波特率38400勾选“发送新行”。发送AT返回OK。发送ATNAMERelayCtrl返回OK。发送ATPSWD6666返回OK。发送ATUART9600,0,0返回OK。断电重新上电这次不按按键让模块进入透传模式。把串口助手波特率切换为9600再发送AT。这里要注意透传模式下AT指令一般不会响应除非模块支持AT指令透传唤醒部分固件支持在数据模式下发进入AT模式。如果没响应说明模块已经处于正常通信状态。到这一步HC05的配置就已经完成了。接下来把USB转TTL拔掉把HC05接到Arduino上用软件串口或硬件串口进行后续的数据透传。3.5 Arduino端配置示例蓝牙控制继电器接线HC05的TXD接Arduino引脚2RXD接引脚3VCC接5VGND接GND。继电器控制引脚接Arduino引脚8。#include SoftwareSerial.h SoftwareSerial hc05(2, 3); // RX: HC05 TXD, TX: HC05 RXD const int relayPin 8; void setup() { pinMode(relayPin, OUTPUT); digitalWrite(relayPin, LOW); Serial.begin(9600); hc05.begin(9600); } void loop() { if (hc05.available()) { char c hc05.read(); if (c 1) { digitalWrite(relayPin, HIGH); } else if (c 0) { digitalWrite(relayPin, LOW); } } }这个程序本身并不复杂但有一个关键点hc05.begin(9600);里的波特率必须和你在AT指令中设置的波特率一致。如果之前把HC05设成了9600这里就用9600如果还是默认的38400这里就写38400。我的建议是统一用9600因为软件串口在高波特率下偶尔会丢字节9600最稳。4. 常见问题与排查技巧实录4.1 HC05蓝牙搜索不到或者连接不上搜索不到设备时先看模块的LED状态。正常待配对状态下模块应该处于快闪状态。如果LED不亮大概率是供电问题或者模块损坏。如果LED常亮说明已经被某个设备占用了需要先断开那个设备再重新进入可发现状态。搜索得到名称但连接不上常见原因有三个密码不对默认1234如果改过就难办了主从模式不匹配手机作为主设备连接HC05的从模式是标准用法但如果HC05被设成了主模式手机就搜不到它了因为主模式不会广播模块已经被其他设备连接。如果模块之前配对过电脑或者手机它会记住那个设备的地址。想彻底清理可以在AT模式下发送ATRMAAD清除配对地址然后重新上电。4.2 串口助手发送AT无响应这是最高频的问题按优先级排查是不是没有进入AT模式看LED是不是慢闪。如果不是按着按键重新上电或者把EN接高电平再上电。波特率对不对先试38400再试9600轮换几次。接线对不对TXD接RXD、RXD接TXDGND必须共地。RX和TX没有交叉是新手最常见的接法错误。发送新行开了吗AT指令需要以\r\n结尾。模块是不是被蓝牙占用了如果有手机连着HC05先把手机断开再把模块断电重来。使用的USB转TTL模块本身有没有问题有些劣质CH340模块的TXD在空闲时不是高电平会导致HC05的RXD一直在收无效数据。可以换一个USB转TTL试试。如果以上都排查完还是无响应可以考虑是不是模块硬件已经挂了。HC05容易在上电瞬间被不稳定的5V电源打死所以调试时尽量用稳压电源或靠谱的USB口。4.3 修改波特率后“失联”了怎么办改完波特率模块立刻以新波特率工作你的串口助手还在用旧波特率自然收不到任何数据。解决办法很简单把串口助手波特率切成新值。如果你不记得改了哪个值可以用轮询法从1200到115200各个档位挨个切切一个发一个AT看到OK就知道当前波特率了。如果你实在记不起波特率还可以硬重置进入AT模式时模块用的是AT模式固定波特率多数HC05在AT模式下会回到默认38400。所以哪怕你改成了9600只要正确进入AT模式再用38400发AT一般都能收到OK。注意有的固件在AT模式下也沿用已保存的波特率那就只能轮询了。最极端的情况是模块彻底“变砖”无论如何都不响应。首先确认模块电源正常。如果上电后LED都不亮可能是板载LDO烧了。如果LED亮但串口死活不通可以试试用3.3V的USB转TTL板供电因为有些模块的电压容限很窄5V供电反而会进入不稳定的状态。4.4 两个HC05双机通信时配对失败两个HC05做双机通信一个设为主模式另一个设为从模式。常见失败原因有从模块的PSWD和主模块不一致。主模块发起连接时要输入从模块的配对码所以两个模块的PSWD必须设成相同的值或者主模块知道从模块的密码。主模块启用了地址绑定CMODE0但绑定的地址和当前从模块地址不一致。遇到这个问题两个模块都执行ATCMODE1让主模块可以连接任意从模块测试通过后再考虑绑定。从模块没有处于可发现状态。从模块在空闲时会周期性广播如果从模块已经被其他设备连接主模块就搜不到它。双机配对有一个很实用的验证办法两块模块分别接在电脑的USB转TTL上两块都进入AT模式串口助手分别打开两个COM口。主模块发送ATINQM查看查询模式发送ATINIT初始化发送ATINQ搜索周围设备能找到从模块的地址再用ATPAIR地址,超时时间发起配对。这一套指令在真正的项目中虽然用得不多但用来排障非常有效。4.5 用Arduino下载程序时上传失败这个问题几乎每个用Arduino接蓝牙模块的人都会遇到。原因是HC05的TXD和Arduino的RX或者板载USB转串口芯片的RX之间存在电平和干扰冲突导致Arduino IDE在上传程序时无法正常握手指令。解决办法有三个一是下载程序时把HC05从Arduino上拔下来等程序烧完再插回去这是最原始也最保险的方法二是使用SoftwareSerial让HC05接在2、3脚上避免占用硬件串口三是某些Arduino板可以通过按开发板上的复位按钮在上传开始瞬间松开复位实现“手工同步”但成功率因人而异。我实际项目中为了方便通常直接把蓝牙模块的5V和GND做成一个带开关的跳线平时供电下载程序时拨掉电源和串口接线非常省事。如果你做长期项目也建议设计成可跳线的结构。4.6 常见问题速查表现象可能原因解决方法手机搜不到HC05模块已在AT模式或已被其他设备连接断电重上电断开已有连接手机连接后立刻断开密码错误或供电不足确认密码更换稳定电源串口助手发AT返回乱码波特率不匹配切换38400/9600串口助手发AT无返回未进入AT模式按键上电或EN接VCC发送AT返回ERROR指令格式错误或参数超范围核对指令确保\r\n结尾改完波特率后连不上通信工具波特率未同步切换串口助手波特率两个HC05配对不上密码不一致或CMODE0统一PSWD设置CMODE1Arduino上传失败HC05占用硬件串口拔掉蓝牙或改用SoftwareSerial5. 从基础配置到项目实战的进阶扩展5.1 蓝牙控制继电器从手机APP到实物动作的完整链路HC05最大的价值在于让手机和单片机之间建立一条无线串口链路而链路之后的玩法就完全看想象力了。最经典的实战项目就是蓝牙控制继电器智能家居、远程开关、遥控灯都能用这套逻辑。链路是这样的手机安装任意串口蓝牙APP比如“蓝牙串口”、“Serial Bluetooth Terminal”通过蓝牙连接到HC05。手机发送字符1HC05通过串口把字符1传给ArduinoArduino判断后让继电器引脚输出高电平继电器吸合电器通电。发送字符0则断电。继电器的接线要特别注意HC05和Arduino的逻辑电压是5V而继电器模块的信号端通常可以直接接Arduino引脚。但如果你用的是一个需要大电流驱动的继电器或者你的继电器模块没有自带的驱动三极管一定要加一个三极管或光耦驱动不要用Arduino引脚直接驱动线圈否则不但单片机带不动还可能烧掉引脚。5.2 蓝牙控制舵机让机械臂跟着手机指令动控制舵机比控制继电器稍微复杂一点但原理相同。Arduino通过Servo库产生PWM信号驱动舵机角度变化蓝牙模块负责接收手机发送的角度指令。例如在手机上发送90HC05把字符串90传给ArduinoArduino解析成整型90度然后myservo.write(90)舵机就转动了。#include SoftwareSerial.h #include Servo.h SoftwareSerial hc05(2, 3); Servo myServo; void setup() { myServo.attach(9); hc05.begin(9600); } void loop() { if (hc05.available()) { String cmd hc05.readStringUntil(\n); cmd.trim(); int angle cmd.toInt(); if (angle 0 angle 180) { myServo.write(angle); } } }这段代码有个细节手机发送的数据可能需要加回车换行所以用readStringUntil(\n)来分割指令。cmd.trim()也很重要因为很多APP发送数据时会带上空格或回车字符。5.3 智能小车与双机通信把遥控玩出花智能小车是HC05最常见的项目之一。小车端用L298N电机驱动板驱动两个直流电机HC05接收手机指令Arduino根据指令前进、后退、左转、右转。这个项目里HC05的配置和前面讲的完全一样区别只在Arduino端的控制逻辑。双机通信则是把两块HC05分别接到两个Arduino上一个设为主模式一个设为从模式两块板就可以无线透传数据。这个场景在做无线传感器数据采集、远程控制另一台设备时特别有用。比如一台Arduino连接温湿度传感器把采集到的数据通过HC05发送出去另一台Arduino作为主模式接收数据再通过USB串口打印到电脑上。需要注意双机通信时如果数据量较大HC05的透传速度会有瓶颈串口波特率建议保持在115200以下。而且主模块发起连接需要时间首次连接可能耗时几秒甚至更久应用层需要做重试和确认机制不能在模块还没连上时就拼命发数据。5.4 关于HM10等BLE模块的对比什么时候选HC05很多人在做完HC05项目后会问为什么不直接用HM10HM10是BLE 4.0低功耗蓝牙模块手机上不需要配对直接用APP连接体验更好功耗也更低。但这不等于HC05没有价值。HC05是经典蓝牙Bluetooth Classic兼容性极好电脑、手机、各种嵌入式设备都能用而且透传带宽比BLE高适合传输速度要求较高的数据流。HM10只支持BLE 4.0部分老设备或者不带BLE协议的设备就用不了。我的建议是如果你是做手机和单片机的点对点控制比如遥控小车、遥控灯两个都行哪个便宜用哪个如果你要做的是双机通信、数据传输或者嵌入到老系统中选HC05更稳。如果做低功耗传感器节点长期电池供电那必须选HM10。5.5 一个更实用的扩展让蓝牙模块支持手机APP自定义指令实际项目中手机APP端通常不是简单的字符发送而是需要设计一套自定义指令协议。例如发送LED_ON代表开灯LED_OFF代表关灯MOTOR_LEFT_90代表左轮转90度这种协议解析起来比单个字符更可靠也方便扩展。Arduino端的解析逻辑可以从读取单个字符升级成读取一整行然后用strcmp或String.equals()做匹配。对性能要求高的项目建议用char数组加strtok分割不要频繁创建String对象否则在有限内存的单片机上容易内存碎片。6. 写在最后我踩过的一些坑与建议说实话HC05这块透传模块做了这么多年文档和例程遍地都是但它依然是很多初学者放弃蓝牙项目的“劝退师”。我自己第一次做蓝牙小车时也遇到过改完波特率找不到模块、AT模式进不去、手机连上就掉线这些坎。现在回头看大多数问题都出在流程不清晰或者接线不规范上。如果你刚开始接触我建议按“先用USB转TTL独立配置再接入Arduino”这个顺序走。不要一上来就把HC05插到Arduino上直接用因为Arduino的串口和蓝牙串口在一起时出了问题很难分清是哪一环。先用USB转TTL把模块配置好接到Arduino上做透传再优化代码逻辑这个顺序能省掉至少一半的排障时间。另外一个小技巧在做项目前先把HC05的波特率统一成和你单片机代码里一致的数值别用默认的38400去写代码然后又改来改去。我在项目里固定使用9600软件串口稳定调试时也不容易出错。如果真的改了波特率导致失联记住ATORGL可能未必能救回来因为AT模式下的波特率不一定是38400这时候用轮询法找到当前波特率再改回自己的目标值比直接恢复出厂更靠谱。最后想提醒一句HC05的AT指令虽然花样不多但它的返回信息和控制逻辑是理解“AT指令体系”很好的入门教材。后面你再碰SIM800、ESP8266、4G模组会发现它们都是同一套思想用串口发ICB格式的指令模块返回响应码写代码时统一用超时加重试的方式处理。学会HC05后面玩其他通信模块会顺手很多。
返回列表