Bleak客户端向E104-BT02 BLE模块发送字节无响应问题求助
Bleak向E104-BT02发送数据失败排查方案
- 先修复代码中明显的语法问题
你代码中print(res)的res变量未做任何定义,运行时会直接触发NameError,如果上层有异常捕获逻辑吞了报错,就会出现看起来代码运行正常但写入未执行的情况,直接删除这行即可。 - 明确指定GATT特征写入模式
多数BLE串口模块的RX特征仅支持无响应写入,Bleak的write_gatt_char默认的写入响应策略会匹配特征声明的属性,但部分国产BLE模块的GATT属性声明与实际支持能力不匹配,手动指定写入参数:
如果无响应写入无效,再尝试改为# 替换原有的写入代码行 await client.write_gatt_char(UART_RX_CHAR_UUID, data, response=False)response=True测试。 - Windows平台专属适配操作
- 升级Bleak到最新正式版本,旧版本Bleak在Windows 10/11上存在部分蓝牙适配器写入静默失败的兼容性问题,升级命令:
pip install --upgrade bleak - 提前在Windows系统蓝牙设置中完成E104-BT02的配对绑定,BLEConsole、LightBlue等工具会自动触发配对流程,但Bleak默认不会主动发起配对请求,未配对的设备可能出现读取正常但写入被系统拦截的情况。
- 升级Bleak到最新正式版本,旧版本Bleak在Windows 10/11上存在部分蓝牙适配器写入静默失败的兼容性问题,升级命令:
- 确认特征属性匹配
连接成功后添加代码打印目标特征的支持属性,确认UUID对应特征确实支持写入:
正常输出应包含char = client.services.get_characteristic(UART_RX_CHAR_UUID) print("RX特征支持的属性:", char.properties)write或write-without-response属性,否则说明特征UUID选择错误。 - 添加入口延迟测试
部分低功耗BLE模块处理写入请求有延迟,可在写入代码后添加短延时验证是否为发送频率过高导致丢包:await client.write_gatt_char(UART_RX_CHAR_UUID, data, response=False) await asyncio.sleep(0.1)
内容的提问来源于stack exchange,提问作者Dmitriy Silin
相关产品推荐
相关产品推荐

