Ich schreibe ein Programm mit bluepy, die auf eine Eigenschaft hören von einem Bluetooth-Gerät gesendet. Ich kann auch jede Bibliothek oder Sprache verwenden, die einzige Einschränkung besteht darin, unter Linux und nicht in einer mobilen Umgebung zu laufen (es scheint, dass es nur in mobilen Geräten weit verbreitet ist, niemand benutzt BLE mit Desktop). Mit bluepy registriere ich den Delegaten und nach dem Versuch, für die Benachrichtigung zu registrieren, die write('\x01\x00')
anruft, wie im Bluetooth rfc beschrieben. Aber es funktioniert nicht, eine Benachrichtigung für das Merkmal wird empfangen. Vielleicht bin ich falsch beim Schreiben der Nachricht zum Abonnieren. Gibt es einen Fehler in dem kleinen Snippet, das ich geschrieben habe? Ich danke dir sehr.BLE abonnieren Benachrichtigung mit gatttool oder 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();