Ошибка "bluepy.btle.BTLEDisconnectError" при попытке подключения к BLE девайсу с raspberry pi4 с помощью bluepy
Не получается подключиться к BLE девайсу с чипом NRF с помощью скрипта, который написал на основе примеров. Сам девайс является BLE-устройством, и подключиться я пытаюсь с помощью raspberry pi4 и библиотеки bluepy для python. Писал код на основе офф. документации библиотеки и примеров в интернете
Если пытаюсь подключиться, то выдает ошибку
Traceback (most recent call last):
File "/home/user/worksPy/notification.py", line 8, in <module>
dev = btle.Peripheral(MAC, "random", 1)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/dist-packages/bluepy-1.3.0-py3.11.egg/bluepy/btle.py", line 411, in __init__
self._connect(deviceAddr, addrType, iface, timeout)
File "/usr/local/lib/python3.11/dist-packages/bluepy-1.3.0-py3.11.egg/bluepy/btle.py", line 467, in _connect
raise BTLEDisconnectError("Failed to connect to peripheral %s, addr type: %s"
bluepy.btle.BTLEDisconnectError: Failed to connect to peripheral c3:77:69:80:ee:e0, addr type: random
Пытался менять addr type на public и на random, но это не помогло, как в других решениях, которые я нашел в гугле.
Сам код, который я пытаюсь выполнить:
from bluepy import btle
MAC = "c3:77:69:80:ee:e0"
SERVICE_UUID = "000054fe-0000-1000-8000-00805f9b34fb"
CHARACTERISTIC_UUID = "00002A00-0000-1000-8000-00805f9b34fb"
print("Connect to:" + MAC)
dev = btle.Peripheral(MAC)
print("\n--- dev ----------------------------")
print(type(dev))
print(dev)
print("\n--- dev.services -------------------")
for svc in dev.services:
print(str(svc))
print("\n------------------------------------")
print("Get Serice By UUID: " + SERVICE_UUID)
service_uuid = btle.UUID(SERVICE_UUID)
service = dev.getServiceByUUID(service_uuid)
print(service)
print("\n--- service.getCharacteristics() ---")
print(type(service.getCharacteristics()))
print(service.getCharacteristics())
#----------------------------------------------
characteristics = dev.getCharacteristics()
print("\n--- dev.getCharacteristics() -------")
print(type(characteristics))
print(characteristics)
for char in characteristics:
print("----------")
print(type(char))
print(char)
print(char.uuid)
if(char.uuid == CHARACTERISTIC_UUID ):
print("=== !CHARACTERISTIC_UUID matched! ==")
print(char)
print(dir(char))
print(char.getDescriptors)
print(char.propNames)
print(char.properties)
print(type(char.read()))
print(char.read())
#print("=== dev ============================")
#print(dir(dev))
#print("=== service ========================")
#print(dir(service))
При этом если с помощью этой библиотеки просканировать устройства, то оно отображается в списке.
Код сканнера:
class ScanDelegate(DefaultDelegate):
def __init__(self):
DefaultDelegate.__init__(self)
def handleDiscovery(self, dev, isNewDev, isNewData):
if isNewDev:
print("Discovered device", dev.addr)
elif isNewData:
print("received new data from", dev.addr)
scanner = Scanner().withDelegate(ScanDelegate())
devices = scanner.scan(10.0)
for dev in devices:
print("Device %s (%s), RSSI=$%d dB" % (dev.addr, dev.addrType, dev.rssi))
for(adtype, desc, value) in dev.getScanData():
print(" %s =%s" % (desc, value))
Вот девайс, к которому я пытаюсь подключиться: 