1. 蓝牙模块选型为什么不能只看价格做智能硬件项目尤其是用单片机做数据采集、遥控小车或者智能家居设备选蓝牙模块这事儿我踩过的坑比吃过的盐都多。很多新手朋友一上来就直奔某宝按价格排序哪个便宜买哪个。结果呢要么是代码死活调不通串口乱码要么是手机连不上特别是用苹果手机测试的时候最头疼的是项目做到一半发现模块功耗太大电池半天就没电了。所以选型第一步真不是比价而是搞清楚你的项目到底需要什么。你得先问自己几个问题你的设备主要和什么通信是手机安卓还是苹果还是另一个单片机需要传什么数据是偶尔发几个字节的传感器读数还是要持续传输音频流设备是插电的还是用电池供电对功耗极其敏感回答清楚这几个问题你才能跳出“HC-05天下第一”或者“BLE最省电”这种片面认知。蓝牙技术发展到今天已经分化出不同的“工种”用错了模块就像让程序员去搬砖不是不能干是干得又累又差。我记得最早做一个小型气象站需要把温湿度数据发到手机上做个简单显示。当时图省事用了经典的HC-05确实和安卓手机配对即用代码简单。但后来想给用iPhone的朋友演示直接就傻眼了手机根本搜不到设备。这就是没考虑“兼容性”这个关键场景。还有一次做可穿戴的计步器用了BLE模块手机连接和低功耗都很完美但我想通过模块的AT指令修改设备名时发现这模块根本不支持串口AT指令配置必须用专门的手机APP或者上位机开发调试流程全变了非常折腾。所以选型是个系统工程价格只是最后一步才需要考虑的因素。2. 从经典到低功耗你必须懂的蓝牙核心概念2.1 经典蓝牙Bluetooth Classic与低功耗蓝牙BLE这俩兄弟虽然都姓“蓝牙”但脾气和能力天差地别绝对不能混为一谈。你可以把经典蓝牙比如蓝牙2.1、3.0想象成一个精力充沛的“话痨”它连接稳定后就像开了一条持续不断的数据水管串口可以哗啦啦地传输数据速度也快早期能达到2.1Mbps左右用来传音频、传大量文件是它的强项。我们熟悉的蓝牙音箱、蓝牙耳机、老式的手机蓝牙传文件用的都是它。但它有个大毛病费电。因为它需要一直维持连接哪怕不传数据也在“待机聊天”对于靠纽扣电池供电的设备来说它可能几天就把电耗光了。而低功耗蓝牙Bluetooth Low Energy 也就是BLE从蓝牙4.0开始引入则是个“节能标兵”。它的设计哲学是“没事绝不废话”。平时深度睡眠功耗极低。需要通信时快速醒来发完数据立刻回去睡觉。它的数据传输像是“电报”短促、间歇。所以它的峰值速率可能不如经典蓝牙但平均功耗可以做到经典蓝牙的十分之一甚至百分之一。像智能手环、心率带、蓝牙温湿度计这些需要常年工作的设备都是BLE的天下。但要注意BLE这种“电报”模式天然不适合需要持续高速流传输的场景比如实时音频。2.2 单模、双模与主从角色理解了上面两种技术单模和双模就好懂了。单模设备只支持其中一种技术。要么是只支持经典蓝牙的单模设备现在很少了要么是只支持BLE的单模设备非常常见很多低功耗传感器模块都是。双模设备同时集成了经典蓝牙和BLE的硬件和协议栈。它可以同时或分时扮演两种角色。比如一个蓝牙音箱芯片是双模的它可以用经典蓝牙模式播放手机音乐同时用BLE模式连接智能语音助手接收控制指令。双模模块的优势是兼容性无敌通吃新旧设备但成本和功耗通常会比单模BLE高。另一个关键概念是主机Central和从机Peripheral。这是BLE里的核心角色模型经典蓝牙也有类似的主从概念但略有不同。在BLE世界里从机Peripheral通常是我们的硬件设备比如温湿度计。它像个广播员不断对外喊“我是XX温湿度计我这有数据”而主机Central通常是手机或者网关它像个扫描者听到广播后主动去连接从机并读取数据。绝大部分的单片机蓝牙模块在BLE模式下都是作为从机设计的。而像HC-05这类经典蓝牙模块通常可以设置成主机或从机模式主机模式可以用来主动搜索连接其他蓝牙设备如另一个HC-05。2.3 虚拟串口SPP与BLE通信的本质区别这是实战中最容易栽跟头的地方经典蓝牙模块如HC-05和单片机通信靠的是SPPSerial Port Profile协议这个协议完美地在蓝牙链路之上模拟了一个传统的串口。对于单片机程序来说它就像在和另一个串口设备通信TX、RX发送接收简单直接。开发者几乎无需关心底层蓝牙协议开发门槛极低。但BLE没有SPP这个协议BLE的通信是基于“服务Service”和“特征值Characteristic”的GATT模型。数据被组织成一个个结构化的特征值读写数据需要遵循特定的UUID和句柄。这就像你去图书馆经典蓝牙是给了你一本连续的小说串口数据流而BLE是给了你一个图书分类目录GATT表你要看哪本书数据得先查目录找到编号UUID再按规矩借阅读写操作。因此如果你买了一个“单模BLE”模块指望它像HC-05一样单片机通过串口发送AT指令就能配置、通过串口直接收发数据那几乎是不可能的。这类BLE模块通常需要你通过单片机编程按照BLE协议栈去操作那些特征值或者模块厂商提供了特定的串口指令集但不是标准AT指令来转换复杂度高很多。不过市场上有一种折中方案BLE虚拟串口模块。这种模块内部自带一个MCU和BLE协议栈它把复杂的GATT操作封装好了对外提供一个真正的物理串口。单片机通过这个串口收发数据模块内部的MCU负责把数据打包成BLE协议发送出去。手机端则需要安装一个匹配的、支持该模块私有服务的APP或者使用通用的BLE串口APP需要知道服务UUID。这种模块简化了单片机端的开发但牺牲了一定的灵活性并且手机端APP受限。3. 经典蓝牙模块实战HC系列家族详解与深坑提示3.1 HC-05经典之王但别迷信HC-05几乎是单片机蓝牙入门的代名词。它稳定、易用、资料多主从一体可切换。如果你做的项目只需要连接安卓手机或电脑传输的数据量不大不小比如遥控指令、传感器数据包而且设备是USB供电或者有大容量电池那么HC-05依然是一个可靠的选择。它的使用简单到令人发指VCC、GND接上电TXD、RXD交叉连接到单片机的串口上电后通过KEY引脚拉高进入AT指令模式就可以用串口调试助手配置名称、密码、主从角色了。配置完退出AT模式它就会自动尝试连接或等待连接单片机程序里直接读写串口就行。但是它的坑也非常明显苹果iOS兼容性问题这是最大的坑HC-05基于蓝牙2.1/3.0规范不支持BLE。而苹果从iOS系统层面对传统经典蓝牙SPP协议的支持极其苛刻普通模块根本无法直接连接。除非你的设备经过苹果MFi认证费用高昂、流程复杂否则iPhone是搜不到也连不上HC-05的。所以如果你的项目目标用户包含iPhone用户HC-05基本可以一票否决。功耗问题它的工作电流在几十毫安级别配对连接后即使空闲也有几个毫安。对于电池供电的设备你需要仔细计算续航。我曾用它做一个太阳能供电的远程数据标签晴天还好阴天电池就撑不过两天。“正版”与“山寨”之痛市面上HC-05价格从七八块到二十几块不等。我实测过低价模块尤其是一些标着“HC-05兼容”的问题很多。最常见的是误码率奇高同样的代码和距离正版模块数据丝滑流畅山寨模块会随机出现乱码字符。其次是AT指令响应不稳定有时能识别有时不能。我的建议是宁可多花十块钱选择信誉好的店铺买“原装”或“高品质”版本能省去无数调试的烦恼。3.2 HC-04、HC-02等其他成员各有绝活也各有脾气HC家族不止HC-05其他几个型号在特定场景下可能更合适。HC-04性价比之选但供电是硬伤HC-04可以看作是HC-05的一个变种通常宣传为双模SPPBLE。但你要注意这里的“双模”可能和你想的不一样。很多HC-04模块的经典蓝牙部分是SPP 2.1而BLE部分可能只是一个简单的、不可直接串口通信的广播模式比如用于iBeacon并不能实现通过BLE虚拟串口与手机通信。选购时一定要问清楚卖家BLE模式是否支持串口数据传输。 它最大的坑在于供电。很多HC-04模块的芯片工作电压是3.3V而且不支持5V容忍。这意味着你必须提供稳定的3.3V电源如果你直接把它接到单片机的5V串口和5V电源上很可能瞬间烧毁模块。而HC-05很多版本是支持3.3V-5V宽电压的。所以如果你的系统只有5V电源选HC-04就要额外加一个LDO降压电路增加了复杂性和空间。HC-02阉割了主机模式的HC-05HC-02可以理解为只支持从机模式的HC-05。除了不能作为主机主动去连接其他蓝牙设备外其他特性、指令集和HC-05基本一致。这意味着它更便宜但如果你需要你的设备比如一个蓝牙网关主动去扫描连接多个传感器节点HC-02就不行了。对于绝大多数只需要被动等待手机来连接的从机设备HC-02是性价比更高的选择。HC-08、HC-42等BLE模块进入低功耗世界这些型号通常才是真正的单模BLE模块。比如HC-08它就是基于TI的CC254x系列芯片专为低功耗设计。使用它们你就不再是通过简单的AT指令配置串口了而是需要通过串口发送特定的、模块厂商自定义的指令集可能类似AT但格式不同去操作BLE的连接、广播、服务与特征值。手机端需要使用支持BLE的APP并正确配置对应的服务UUID才能通信。再次强调不要指望它们像HC-05那样即插即用。它们的优势是功耗可以做到微安级睡眠电流适合电池设备。4. 双模模块与纯BLE模块面向未来的选择4.1 为什么需要双模模块双模模块是解决“兼容性”痛点的终极方案之一。它内部有两套射频和协议栈系统。比如一个典型的双模模块当老款安卓手机或者需要高速传输数据时它可以以经典蓝牙SPP模式工作提供稳定的串口数据流。当连接iPhone、iPad或者需要超低功耗时它可以切换到BLE模式工作。 这样一个硬件产品就能覆盖最广泛的用户群体。市面上有些智能手环就用双模芯片连接旧手机用经典蓝牙同步数据平时用BLE做通知推送以省电。对于开发者来说双模模块的接口可能有两种形式一种是提供两套独立的AT指令集分别控制两种模式另一种是提供统一的指令自动协商或手动切换模式。在选型时一定要找到配套的SDK和详细文档并实测两种模式下的连接稳定性和功耗。4.2 纯BLE模块开发实战以常见CC2541/CC2640为例如果你确定你的产品只面向智能手机安卓4.3/iOS 5并且对功耗有严格要求那么单模BLE模块是更纯粹、更专业的选择。我们以常见的TI CC2541模块为例讲讲和HC-05完全不同的开发流程。首先硬件连接和HC-05类似也是VCC、GND、TXD、RXD。但上电后你通常不能直接用串口调试助手发AT指令。你需要找到模块厂商提供的专用配置固件和工具比如TI的SmartRF Flash Programmer通过特定的调试接口如CC Debugger先把一个包含GATT服务和串口转发功能的固件烧录到模块中。这个固件定义了一个“串口服务”里面有用于收发数据的特征值。烧录好之后模块上电单片机才能通过串口发送模块自定义的指令例如可能是ATNAME?也可能是\r\nGETNAME\r\n这种格式来查询或设置参数。更重要的是单片机要发送应用数据可能需要遵循特定的帧格式。例如不是直接发送字符串Hello而是要打包成0xAA 0x05 0x48 0x65 0x6C 0x6C 0x6F 0x55这样的数据包包含帧头、长度、数据、校验等。模块收到后会将其写入BLE的特征值中供手机读取。手机端你需要开发一个APP或使用LightBlue这类调试工具去扫描、连接该设备找到对应的“串口服务”UUID并订阅Notify用于接收数据的特征值向用于发送数据的特征值写入数据。整个数据链路才打通。可以看到这个过程比HC-05复杂得多。但换来的是在连接间隔Connection Interval设置合理的情况下模块的平均功耗可以低至10微安级别一颗纽扣电池用一年不再是梦。4.3 选型清单对照你的项目需求打勾为了帮你更直观地决策我总结了一个简单的选型对照表特性/需求HC-05 (经典蓝牙)单模BLE模块 (如HC-08)双模模块 (SPPBLE)BLE虚拟串口模块兼容iPhone否 (无MFi)是(iOS 5)是(BLE模式)是(需特定APP)兼容安卓是(全版本)是(4.3)是(全版本)是(4.3需APP)开发难度极低(标准串口)高(需懂BLE基础)中(两套指令/协议)低(物理串口)功耗水平高 (毫安级)极低(微安级)中 (依模式而定)低-中数据传输串口流稳定包传输速率较低双模式可选串口流典型应用安卓遥控车、数据记录仪(有电)智能手环、传感器标签兼容性要求高的商用产品快速BLE原型开发成本低低-中中-高中你可以拿着这个表回去对照自己项目的第一个问题连接谁传什么供电如何答案就清晰多了。比如做一个给园丁用的土壤湿度监测器需要连接各种老款安卓手机且是太阳能供电可能HC-05更合适。而做一个面向都市年轻人的智能防丢贴片必须兼容iPhone且用纽扣电池那就必须选择BLE模块或双模模块。