Auf dem Raspberry per Remote VS-Code
sudo pip3 install bluepy
Damit der Zugriff auf die BLE Hardware möglich ist muss der Python-Code als superuser ausgeführt werden. Dafür muss eine 'launch.json' Datei erstellt werden und in dieser Datei die Konfiguration "sudo" auf "true" gestellt werden.
"configurations": [
{
"name": "Python: Current File",
"type": "python",
"request": "launch",
"program": "${file}",
"console": "integratedTerminal",
"justMyCode": true,
"sudo": true
}
]
Wenn die BLE-Kommunikation nicht korrekt funktioniert, kann die Kommunikation mitgeschnitten werden. Dafür kann das Tool "hcidump" verwendet werden.
sudo hcidump -t
Sollte der Befehl nicht gefunden werde, kann das Tool mit folgendem Befehl installiert werden:
sudo apt-get install bluez-hcidump
Die grundlegende Verwendung des bluepy
Modules wird in der Datei startup.py veranschaulicht. Die oben verlinkte Dokumentation beschreibt die weitere Verwendung des Moduls.
Im Allgemeinen kann mit einem Scanner
-Objekt die Suche nach BLE-Geräten gestartet werden. (Zeile 21) Durch die Verwendung einer eigene Klasse, welche von der Klasse DefaultDelegate
erbt, kann durch Überschreiben der Methode def handleDiscovery(self, scanEntry, isNewDev, isNewData):
benutzerdefiniertes Verhalten beim Auffinden eines neuen Geräts ausgeführt werden. (Zeilen 3-9) Ein Objekt dieser benutzerdefinierten Klasse kann einem Scanner übergeben werden (Zeile 21) Beim Aufruf der scan
Methode des Scanners werden die gefundenen Geräte direkt zurückgegeben. (Zeile 22)
Die Code-Zeilen 37-48 zeigen wie auf einen HeartRate-Service zugegriffen werden kann und wie die Notifications für die HeartRateMeasurements aktiviert werden. Für die Verarbeitung der Notification wird dem Device ein Objekt einer benutzerdefinierte Klasse, welche von der Klasse DefaultDelegate
erbt, übergeben. (Zeile 37) In dieser benutzerdefinierte Klasse kann durch Überschreiben der Methode def handleNotification(self, cHandle, data):
benutzerdefiniertes Verhalten beim Empfang einer Notification ausgeführt werden. (Zeilen 12-19)