我正在使用bluepy編寫一個程序,用於偵聽由藍牙設備發送的特徵。我也可以使用任何庫或語言,唯一的約束是在Linux上運行,而不是在移動環境中(似乎廣泛用於移動設備,沒有人使用BLE與桌面)。 使用bluepy我註冊的代表,並試圖註冊通知後調用write('\x01\x00')
藍牙rfc中所述。 但它不起作用,收到任何特徵通知。 也許我寫錯了訂閱的訊息。 我寫的小片段有錯誤嗎?非常感謝。BLE使用gatttool或bluepy訂閱通知
class MyDelegate(btle.DefaultDelegate):
def __init__(self, hndl):
btle.DefaultDelegate.__init__(self)
self.hndl=hndl;
def handleNotification(self, cHandle, data):
if (cHandle==self.hndl):
val = binascii.b2a_hex(data)
val = binascii.unhexlify(val)
val = struct.unpack('f', val)[0]
print str(val) + " deg C"
p = btle.Peripheral("xx:xx:xx:xx", "random")
try:
srvs = (p.getServices());
chs=srvs[2].getCharacteristics();
ch=chs[1];
print(str(ch)+str(ch.propertiesToString()));
p.setDelegate(MyDelegate(ch.getHandle()));
# Setup to turn notifications on, e.g.
ch.write("\x01\x00");
# Main loop --------
while True:
if p.waitForNotifications(1.0):
continue
print "Waiting..."
finally:
p.disconnect();