尧图网络科技YAOTU DIGITAL 获取报价
获取报价
首页 / 资讯中心 / 文章详情

E104-BT02蓝牙透传模块实战:从AT指令配置到GATT机制解析

发布时间:2026/9/5 6:32:10

资讯中心
01
ARTICLE

E104-BT02蓝牙透传模块实战:从AT指令配置到GATT机制解析

E104-BT02蓝牙透传模块实战:从AT指令配置到GATT机制解析
干过几年硬件开发的朋友应该都有这种体验项目里需要“蓝牙透传”功能第一反应是找个串口蓝牙模块结果买回来一搜全是“BLE协议栈”“GATT服务”“配对绑定”“MTU协商”这种词文档翻了两小时板子还在桌上吃灰。我第一次用E104-BT02的时候也差不多但实际把它跑通只用了不到五分钟——因为这颗模块本质上就是把复杂的BLE工作全封装好了你只需要管好串口。E104-BT02是一款基于PHY6222方案的BLE 5.0透传模块出厂自带AT指令固件支持广播参数配置、串口波特率修改、设备名称设置还带完整的透传通道。对大多数智能硬件、传感器采集、调试工装、配网引导这类场景来说它能帮你把“蓝牙模块”这个环节从两周工作量压缩到半天。这篇文章除了讲清楚怎么最快跑起来还会把BLE里头几个最容易坑人的机制一起拆明白顺便聊聊开源电路和驱动代码应该怎么理解、怎么改。1. E104-BT02在蓝牙模组里是什么定位为什么它能省掉半个固件组的工作量1.1 模块的本质一颗把BLE协议栈包好的串口桥很多同学第一次接触E104-BT02会有一个误区认为它是“蓝牙芯片”需要自己写协议栈。其实E104-BT02出厂已经烧好了完整的BLE透传固件主控芯片PHY6222内部跑着完整的BLE 5.0协议栈射频匹配、天线、晶振、电源电路全部在模块上做好了。你的MCU要做的事就只是通过UART往模块的TXD/RXD引脚丢数据。打个比方传统方案是让你自己盖房子从打地基开始而E104-BT02相当于给你一个精装好的单身公寓你只需要把行李业务数据搬进去。所以它的核心价值不在“多快多强”而在“能让你跳过大量射频和协议栈的坑”。对我个人来说这个模块最舒服的一点是如果用ST的MCUSDK里把串口驱动写好业务层直接调发送函数就行手机端再用任意一个BLE调试助手就能看到数据。整个过程从头到尾不会碰任何蓝牙协议栈代码调试起来非常纯粹。1.2 选型对比E104-BT01、E104-BT02、E104-BT51到底怎么选经常有人问亿佰特E104系列这么多型号到底有什么区别。我整理了一张对比表以最常见的三颗为例型号蓝牙版本主控方案典型定位适合场景E104-BT01BLE 4.2PHY6202透传从机低功耗传感节点、简单透传E104-BT02BLE 5.0PHY6222透传从机大多数IoT透传、快速原型验证E104-BT51BLE 5.1PHY6252主从一体需要模块作为主机连接多个外设其他BT02x系列视型号而定各不同透传/主从/定位按官方文档确认这里必须提醒一句具体参数以官方数据手册为准不同批次、不同固件版本之间可能存在差异。我实际用E104-BT02的项目里绝大多数场景都是“设备作为从机手机/网关作为主机”所以透传从机这个定位完全够用。如果你要做的是“两个模块之间互相传数据”那就需要主从一体的型号比如E104-BT51而不是BT02这种纯从机透传模块。选型时先想清楚拓扑结构再下单不然模块到了发现能力不匹配很耽误进度。1.3 性能预期速率、距离、功耗不要说信广告我见过太多人看了宣传页上的“BLE 5.0”就以为可以传高清视频这是典型的认识偏差。E104-BT02这类串口透传模块实际吞吐率受三个因素限制串口波特率、BLE连接参数Connection Interval、MTU大小。在默认配置下模块串口跑115200bps时如果你看一眼手机收到的数据速率会发现它大概率远到不了115200bps的原始速率因为BLE空口本身是按“连接事件”周期性传输的每个事件里能塞的数据包数量有限。我自己实测下来稳定传业务数据的场景建议按2KB/s左右做规划偶尔突发传个几KB也没问题但别拿它当真无线串口高速传输。距离方面E104-BT02在空旷视距下理论标称能到80米左右实际项目里穿一堵墙大概剩二三十米。这个数据受天线布局、环境反射、供电质量影响很大建议做样机时留足余量。功耗更是要重点说。BLE低功耗的前提是“大部分时间在睡眠”但你如果把广播间隔设得很短、连接间隔设得很小或者频繁大流量收发电流一样会上去。很多同学拿到模块直接接上调试发现电流比手册标称大很多其实不是模块虚标是配置没调。等到后面第三章讲连接参数的时候我再展开说。2. 硬件接线和最小系统照抄基本不会翻车2.1 引脚定义和参考电路E104-BT02的引脚不算多最核心的就是VCC、GND、TXD、RXD外加部分状态引脚。下面是一份参考接线表具体引脚排列以你买到的模块丝印为准模块引脚接MCU说明VCC3.3V电源典型电压范围1.8~3.6V注意电流余量GNDGND必须与MCU共地TXDMCU_RX模块串口发送RXDMCU_TX模块串口接收状态/其他可选GPIO用于查询模块状态、控制休眠等最小参考电路可以这样理解3.3V直接进VCC在模块电源引脚旁边并联一个100nF陶瓷电容和一个10uF钽电容这两个电容负责滤掉高频纹波和提供瞬态电流。TXD/RXD交叉接到MCU的串口USB转串口工具调试时同样交叉接法。很多开源项目的原理图里还会在VCC入口串一个磁珠或者0欧电阻方便单独测量模块电流这属于调试友好设计。我建议你在自己的板上也留一个电流测试点后续调功耗不用拿烙铁去挑电感。2.2 电源和串口电平的坑E104-BT02的工作电压范围标称在1.8V到3.6V之间这是芯片级的宽压设计但实际使用我建议统一用3.3V因为大部分MCU也是3.3V电平方便直接对接。这里有个高频翻车点很多人用的是5V供电的STM32老开发板或者5V单片机直接把MCU的TXD5V电平怼到模块的RXD上。模块的RXD引脚并不一定支持5V耐压长期这样操作轻则通信偶尔异常重则烧坏内部引脚。如果MCU是5V电平我建议用一颗MOS管电平转换电路或者至少用电阻分压把TXD电平降到3.3V以下。RXD方向一般问题不大因为3.3V的模块TXD送到5V MCU的RX大多数MCU能识别高电平但严谨一点最好也做电平匹配。电源的另一个坑是瞬态电流。BLE模块在发射瞬间电流可能冲到几十毫安如果你用的是劣质USB转串口工具或者LDO余量不够电压会被拉低然后你看到的症状就是“模块偶尔失联”“发送数据乱码”特别难排查。我踩过一次之后后面做板子都会给模块单独留一路LDO或者至少保证电源输入能用万用表稳得住。2.3 天线区域和PCB布局提醒如果你只是拿模块接杜邦线做验证那这一节可以略过。但如果要画PCB量产一定要记住模块的天线区域要净空模块下方PCB不要铺铜天线辐射方向不要放置金属件和走线。常见的翻车操作是把模块塞在金属外壳角落天线旁边还有大电流电源线结果实测定点距离从80米直接掉到10米。这种情况不是模块坏了是天线被干扰了。BLE模块的天线匹配是出厂调好的你唯一要做的就是别去破坏它周围的环境。3. 玩透它之前先把BLE这几个机制搞清楚3.1 广播类型决定手机能不能“看见”它BLE设备要能被手机发现必须处于广播状态。E104-BT02上电后默认会发出可连接广播所以手机能搜到它。但很多人不知道的是广播还分好几种类型可连接广播、不可连接广播、可扫描广播等。如果你的模块被配置成了“不可连接广播”那手机虽然能搜到但点击连接永远失败因为从机压根没有开放连接窗口。调试的时候遇到这种问题第一步要做的是用nRF Connect这类工具扫描周围所有设备看模块是否出现在列表里再看它的广播类型是否正常。广播间隔Advertising Interval对功耗和发现速度影响也很大。间隔越短手机发现越快但平均电流越大间隔越长越省电但可能手机要等好几秒才能搜到。E104-BT02固件一般支持通过AT指令改广播间隔项目里如果对“开机即被搜到”有要求建议把间隔调小一点等配网完成后再切换到长间隔省电模式。3.2 连接、配对和绑定bond不bond有讲究BLE的连接过程并不复杂手机发送连接请求从机接受双方协商好连接参数连接就算建立了。但连接之后还会遇到“配对Pairing”和“绑定Bonding”这对概念。配对是连接之后的安全认证过程用于加密链路。绑定则是在配对的基础上双方把密钥信息保存下来下次连接时自动认证不需要重新配对。很多新手用E104-BT02遇到的现象是第一次手机连上弹窗让你配对你输入0000或123456数据能正常传。但第二次连的时候手机会自动跳过配对或者提示“无法连接”这就很可能是绑定信息冲突了——手机端已经存了旧密钥但模块恢复过出厂设置两端密钥对不上。我的建议是开发调试阶段如果遇到连不上先把手机蓝牙设置里该设备的“忘记此设备”删掉再用调试助手重新扫描连接。E104-BT02固件如果有“解绑”或者“恢复出厂”的AT指令配合使用能解决大部分配对诡异问题。3.3 GATT服务、特征和MTU为什么一次只能发那么点数据GATT是整个BLE数据交互的组织结构。设备上电后会把自身能力组织成一个个“服务Service”每个服务里有若干个“特征Characteristic”每个特征支持读、写、通知等不同属性。用BLE调试助手连上E104-BT02后你会看到模块暴露了一个透传服务里面一般有一个可写特征和一个可通知特征手机往可写特征写数据模块从串口吐出去模块串口收到数据后通过可通知特征推给手机。这里藏着BLE一个很经典的限制默认MTUMaximum Transmission Unit是23字节扣除3字节的ATT头用户数据一次最多传20字节。如果你在手机端连续发了100字节给模块应用层不做处理的话数据就会被拆成5包而且拆包的时机由协议栈决定。E104-BT02这类模块固件一般会做自动分包处理串口侧你发一大包数据它会在空口分包发出去。但上位机如果对时序敏感就得自己处理粘包、断包的问题。第三章后面我会给一个比较稳妥的驱动处理思路。3.4 连接参数数据吞吐和功耗的数学关系连接参数包括连接间隔Connection Interval、从机延迟Slave Latency、超时时间Supervision Timeout。连接间隔越短单位时间内能传的数据越多但双方唤醒越频繁功耗越高从机延迟允许模块在没数据时跳过若干个连接事件进一步省电。在E104-BT02这种透传模块里固件一般会在连接后响应手机发起的参数协商请求Android和iOS的默认参数不同所以同一个模块分别用安卓和iPhone连着测实时性和功耗表现可能不一样。我处理项目功耗问题时一般会先把手机端的调试APP里的连接参数设置打开手动把连接间隔调大如果业务还能忍受延迟就可以靠这段调参拿到不少续航收益。不过要注意如果你把从机延迟设得太高串口发数据后要等好几个连接事件才发得出去会造成明显的延迟波动需要根据项目需求取舍。4. 5分钟快速上手流程AT配置加手机透传保姆级步骤4.1 准备工作上手E104-BT02需要准备的东西不多E104-BT02模块一块USB转TTL工具一个比如CH340、CP2102杜邦线若干PC端串口助手任意一个都行手机端BLE调试助手我用得最多的是nRF Connect和LightBlueApp Store/安卓市场都能搜到接线时把模块的TXD接USB工具的RXDRXD接USB工具的TXDVCC接3.3VGND共地。接好之后插上电脑打开设备管理器确认串口号然后打开串口助手波特率先按115200配置。4.2 进入AT模式并配置模块参数E104-BT02出厂固件默认处于透传状态要配置参数需要先进入AT模式。不同固件版本的进入方式不太一样常见的有发送特定字符序列、拉高/拉低某个配置引脚具体以你手头模块的手册为准。我手上这颗是用串口直接发“AT”字符模块返回“OK”就说明AT通路正常。进入AT模式后有几项配置我建议必查设备名称用AT指令改成自己能识别的名字方便手机搜索。串口波特率确认MCU侧波特率与模块一致这是乱码问题的头号来源。广播间隔按项目功耗和发现速度需求调整。每次配置完记得用AT指令保存并重启模块让配置生效。4.3 手机连接并收发第一包数据模块重启后打开手机nRF Connect扫描列表里找到你设置好的设备名称点击连接。连上后进入“GATT”页面找到透传服务通常是一个自定义UUID的服务没有标准蓝牙服务那么显眼点开服务下面的特征值列表。要给模块发数据找那个可写Write或Write Without Response的特征点在“发送”按钮输入一串ASCII或十六进制数据这时候模块的TXD引脚就会把收到的数据通过串口吐给USB转TTL工具你就能在串口助手里看到。反向通路同理在PC串口助手里给模块发一串数据模块收到后通过可通知特征推给手机手机调试助手里会实时显示出来。到这里双向透传就跑通了。4.4 AT指令速查E104-BT02的AT指令集不同批次略有差异但下面这些指令结构在E104系列里很常见具体以官方手册为准指令示例作用AT测试串口通信是否正常ATNAMExxx设置广播名ATADVINTxxx设置广播间隔ATUART115200设置串口波特率ATRESET重启模块ATRESTORE恢复出厂设置注意指令格式细节有的固件需要带回车换行有的需要十六进制发送用串口助手调试时两个都试一下能少走很多弯路。5. 开源电路和驱动代码应该怎么理解、怎么改5.1 开源硬件设计的核心思路现在不少项目都会把E104-BT02的原理图、PCB、固件驱动一起开源拿到这些文件后别急着抄板先看清楚几个关键设计点。第一看电源设计。开源板子上模块电源脚旁边一定会有去耦电容有的还会加磁珠隔离数字噪声这是保证射频稳定性的基础。第二看串口部分有没有ESD保护器件量产产品在接插件插拔频繁的场景里ESD防护是保命的。第三看模块天线区域有没有按我第二章说过的净空原则处理。我之前参考过一个开源项目设计自己的板子抄完原理图之后发现对方在模块RXD脚上串了一个100欧电阻当时觉得多余就没抄。后来项目在现场调试时频繁出现模块不响应查了很久才发现是因为MCU的TXD边沿过冲太大把模块RXD引脚电平干扰了。加回那颗电阻之后问题立刻消失。所以开源硬件不是照抄就能完事每一颗料都有它的道理。5.2 驱动代码框架串口收发、环形缓冲、AT状态机开源驱动代码虽然各家写法不同但核心框架基本一致串口中断接收环形缓冲区发送函数AT指令解析。下面是我个人整理的一套通用结构以STM32 HAL库为例#define BLE_UART huart2 static uint8_t rx_byte; static uint8_t ble_rx_pool[1024]; static ring_buffer_t ble_rx_ring; void BLE_UART_Init(void) { ring_buffer_init(ble_rx_ring, ble_rx_pool, sizeof(ble_rx_pool)); HAL_UART_Receive_IT(BLE_UART, rx_byte, 1); } void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) { if (huart BLE_UART) { ring_buffer_write(ble_rx_ring, rx_byte, 1); HAL_UART_Receive_IT(BLE_UART, rx_byte, 1); } } void BLE_SendData(uint8_t *data, uint16_t len) { HAL_UART_Transmit(BLE_UART, data, len, 100); }这套代码的思路很简单串口每收到一个字节就进中断把数据丢进环形缓冲区主循环里再从缓冲区取数据做业务处理。用环形缓冲的好处是即使主循环偶尔卡顿串口数据也不会因为没及时读取而丢失。AT指令解析部分可以用一个状态机逐字节匹配“OK”“ERROR”这些关键字。如果只是跑透传业务AT解析只在配置阶段用到平时主循环完全可以不解析。5.3 从STM32换到ESP32或者其他MCU要改哪些地方如果你用的是ESP32驱动代码不需要改太多主要是把串口初始化和接收回调换成ESP-IDF或Arduino风格的API。ESP32的串口也有类似中断接收用ESP-IDF的uart_driver_install加上事件队列就能复刻上面的环形缓冲逻辑。换到其他MCU时重点检查三件事串口波特率是不是和模块一致中断接收回调里有没有及时读走数据发送函数有没有做超时保护。只要这三件事做好了移植驱动基本就是体力活。有一点我要特别强调不要在主循环里用阻塞延时去等串口数据。很多初学者在项目里写HAL_UART_Transmit发送一包100字节的数据因为阻塞等待延时导致BLE模块收到数据后从串口吐给MCU时没人接收数据就丢了。正确做法是接收永远靠中断缓冲区发送也尽量做成非阻塞或者短超时的形式。6. 实际项目里最容易踩的坑和我的排查思路6.1 搜不到/连不上先分清广播、扫描、绑定三层问题“手机搜不到模块”这个问题很多人第一反应是模块坏了其实90%的情况是下面三层里的某一层出了问题。第一层是广播层模块压根没在广播比如配置过“关闭广播”或者模块进入休眠第二层是扫描层手机端开启了MAC地址过滤、厂商过滤把模块滤掉了第三层是绑定层手机之前连过这个模块但绑定信息已经失效。我的排查顺序很固定先换一个手机上的通用BLE调试工具比如nRF Connect关掉所有过滤条件扫描看能不能看到模块广播如果看不到检查模块供电和串口是否有异常输出如果看得到但连不上删除手机蓝牙里的旧配对记录再用AT指令把模块恢复出厂。按这个链路排查大部分问题五分钟内能定位。6.2 数据断断续续MTU、分包、连接参数的三角关系项目里出现“收发数据偶尔丢包、时序不对”这类问题别急着怀疑模块稳定性先看你一次发多少数据。前面说过默认MTU下BLE空口单包最多20字节有效数据如果你从串口一次性发了几百字节模块固件会自动分包但每一包之间是不是连续的、间隔多大取决于连接参数和系统调度。我之前做过一个数据采集项目MCU每100ms通过E104-BT02上报一包300字节的数据手机端偶尔会漏掉中间某段。一开始以为是模块丢包后来抓包发现是手机端BLE回调里没有做分片重组的逻辑只取了每个通知的前20字节。修复方式是在APP端实现一个按Sequence Number拼接的缓冲重组逻辑而不是依赖模块固件保证单包完整性。所以当你觉得“数据丢了”的时候先在串口侧确认模块确实收到了完整数据再怀疑空口传输。透传模块骗不了人串口进什么它就会努力往空口发什么。6.3 用调试助手做一次GATT体检比瞎猜快很多很多问题是“软件上看起来正常但数据传不了”这时候我习惯用BLE调试助手给模块做一次“GATT体检”。具体操作用nRF Connect连上模块逐个查看Service下的Characteristic属性确认可写特征是否支持Write Without Response可通知特征是否支持Notify然后在特征上打开CCCClient Characteristic Configuration Descriptor订阅通知。这一步是新手最容易漏的如果不主动打开CCC通知开关模块串口收到数据后就算想通过Notify推给手机手机端也不会收到任何消息。这时候模块看起来一切正常串口也有数据进但手机端就是没反应。做完GATT体检之后至少能确认到底是模块没发还是手机没订阅通知避免互相甩锅。我早期做BLE项目时手机端连接后第一件事就是找透传特征然后发数据结果对方收不到折腾半天才发现厂家的样例固件默认不发通知必须手动点一下“开启Notify”。从那以后我总结了一句话用BLE模块先看GATT再谈业务逻辑。这比闷头调强一百倍。个人觉得E104-BT02这类串口透传模块最大的价值是让你把一个看似复杂的蓝牙项目简化成“两个串口之间搬数据”。你不需要成为BLE协议栈专家也能做出稳定可用的无线透传产品。但前提是你得理解BLE的广播、连接、MTU、GATT这些基础机制否则看似简单的透传出了问题依然会让你一头雾水。在做新项目的时候我也习惯先画一块基于E104-BT02的最小测试板配合开源仓库里的电路和驱动先把业务逻辑在串口层彻底跑通再去考虑产品化细节。这个小习惯帮我省掉了大量后期联调的时间。如果你正准备上BLE不妨也按这个思路试试。
02
RELATED NEWS

相关资讯

更多网站建设与数字化升级内容

03
WHY YAOTU

想打造同款高转化官网?

懂行业、懂生意,从建站到增长一站式陪跑

场景化定制

不做模板站,围绕你的业务场景量身设计,小众不撞款。

营销型架构

以转化目标组织内容与路径,让官网真正带来询盘。

全周期服务

设计、开发、运营、运维一体,上线只是开始。

免费获取你的建站方案

留下需求,专属顾问 24 小时内为你输出方案建议。