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
相关产品推荐
相关产品推荐

