1) Прежде всего, есть проект github python, который делает именно это в Linux на Raspberry Pi: https://github.com/IanHarvey/bluepy
2) Во-вторых, это фрагмент от Энтони Чиу использует этот API для связи с несколькими устройствами с помощью уведомлений:
from bluepy.btle import Scanner, DefaultDelegate, Peripheral
import threading
class NotificationDelegate(DefaultDelegate):
def __init__(self, number):
DefaultDelegate.__init__(self)
self.number = number
def handleNotification(self, cHandle, data):
print 'Notification:\nConnection:'+str(self.number)+ \nHandler:'+str(cHandle)+'\nMsg:'+data
bt_addrs = ['00:15:83:00:45:98', '00:15:83:00:86:72']
connections = []
connection_threads = []
scanner = Scanner(0)
class ConnectionHandlerThread (threading.Thread):
def __init__(self, connection_index):
threading.Thread.__init__(self)
self.connection_index = connection_index
def run(self):
connection = connections[self.connection_index]
connection.setDelegate(NotificationDelegate(self.connection_index))
while True:
if connection.waitForNotifications(1):
connection.writeCharacteristic(37, 'Thank you for the notification!')
while True:
print'Connected: '+str(len(connection_threads))
print 'Scanning...'
devices = scanner.scan(2)
for d in devices:
print(d.addr)
if d.addr in bt_addrs:
p = Peripheral(d)
connections.append(p)
t = ConnectionHandlerThread(len(connections)-1)
t.start()
connection_threads.append(t)
3) Я просто напишу ручной вариант подключения с bluetoothctl, который вы наверняка пробовали. Поскольку его здесь нет, добавлю и это:
**Ручное подключение с помощью bluetoothctl: ** Чтобы получить список характеристик, вы можете использовать команду «list-attributes» после установления соединения и входа в Подменю общих атрибутов через menu gatt
в bluetoothctl, что должно вывести то же самое список как указано выше:
list-attributes 00:61:61:15:8D:60
Чтобы прочитать атрибут, вы сначала выбираете его с помощью команды «выбрать-атрибут», как вы уже догадались:
select-attribute /org/bluez/hci0/dev_00_61_61_15_8D_60/service000a/char000b
После этого вы можете выполнить команду «чтение» без каких-либо параметров.
Чтобы непрерывно читать характеристику (если характеристика поддерживает это), используйте команду «notify»:
notify on
PS: это мой первый ответ на stackoverflow :) Я также новичок в BLE, так что терпите меня. Заинтересован в вашем проекте, любые ссылки / контакты приветствуются :) Вы можете найти меня на alexandrudancu.com
person
Alex
schedule
12.02.2019