MicroPython TypeError:在 ESP32 上使用 ubluetooth 时,“int”类型的对象没有 len()

问题描述 投票:0回答:1

我正在使用运行 MicroPython 的 ESP32 模块,并且在尝试使用 ubluetooth 模块实现 BLE 功能时遇到持续的类型错误。当我尝试注册 BLE 服务时发生错误。

这是仍然产生错误的最简单版本的代码:

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, 32),
    )),
)

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

print("Service registered")

当我运行此代码时,出现以下错误:

MPY: soft reboot 
Traceback (most recent call last): 
  File "<stdin>", line 15, in <module> 
TypeError: object of type 'int' has no len() 

我尝试简化代码来隔离问题,但错误仍然存在。我已确认固件是最新的,并尝试在不同的 ESP32 设备上运行代码,得到相同的结果。

我正在寻找有关可能导致此错误的原因以及如何解决该错误的任何见解。是否是 MicroPython 固件或 ubluetooth 模块的问题?有没有其他人遇到过这个问题,你是如何解决的?

esp32 上的蓝牙无法正常工作

任何帮助将不胜感激!

bluetooth esp32
1个回答
0
投票

根据Micropython文档, 返回值将是这样的,

( (hr,), (tx, rx,), ) = bt.gatts_register_services(SERVICES)

但是,在您的函数中,您需要将第一个元组作为两个值访问

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

因此尝试像文档中给出的那样作为一个值进行访问

© www.soinside.com 2019 - 2024. All rights reserved.