You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ESP32运行MicroPython时ubluetooth注册BLE服务报TypeError求助

问题解决:MicroPython ESP32 BLE注册服务TypeError错误

错误成因

你遇到的TypeError: object of type 'int' has no len()是因为BLE特征的参数格式不符合ubluetooth模块的要求。ble.gatts_register_services方法期望特征定义的第三个参数是一个配置字典(用于设置最大长度、初始值等属性),但你直接传入了整数32。模块内部会尝试对这个参数执行长度检查,因此对整数调用len()时触发错误。

解决方法

将特征定义中的整数32替换为字典格式{'max_len': 32},明确指定特征的最大数据长度。

修正后的完整代码

from ubluetooth import BLE, UUID, FLAG_READ, FLAG_WRITE

_BLE_UUID = UUID('12345678-1234-5678-1234-56789abcdef0')
_BLE_CHAR_UUID = UUID('abcdef01-1234-5678-1234-56789abcdef0')

ble = BLE()
ble.active(True)

services = (
    (_BLE_UUID, (
        (_BLE_CHAR_UUID, FLAG_READ | FLAG_WRITE, {'max_len': 32}),
    )),
)

service_handle, char_handle = ble.gatts_register_services(services)[0]

print("Service registered")

补充说明

  • 这并非MicroPython固件或ubluetooth模块的问题,属于参数格式使用错误,不少开发者初次使用该模块时都会遇到类似问题。
  • 若需要配置更多特征属性,还可以在字典中添加其他键值对,比如设置初始值:{'max_len': 32, 'initial_value': b'initial'}

内容的提问来源于stack exchange,提问作者Pablo Churchill

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 04:07:13