Bluetooth Signal senden und auslesen?
Hi, ich würde gerne eine App machen, die ein Bluetooth-Signal mit einer Buchstabenfolge aussendet (Android/iOS).
Diese Nachricht würde ich gerne mit der Signalstärke und der Buchstabenfolge auf einem Windows 10/11-Computer empfangen (hier mit Python).
Wie kann man das machen?
Vielen Dank für eure Hilfe.
2 Antworten
Im einfachsten Fall nutzt du BLE advertising. Das heißt, die Daten werden direkt herausgeschickt und sind für jedes Gerät in der Nähe, welches Bluetooth-Signale empfangen kann, lesbar, ohne dass dafür die Geräte erst miteinander gekoppelt werden müssen.
Für die Android-App könntest du dabei auf die BluetoothLeAdvertiser-Klasse zurückgreifen. Apple stellt hingegen die CBPeripheralManager-Klasse zur Verfügung. Solltest du mit anderen Technologien als Java/Kotlin (Android) oder Swift (iOS) arbeiten, müsstest du dich im Vorfeld nach Bibliotheken umschauen, die stattdessen auf die passenden Schnittstellen zurückgreifen.
Der Computer, der die Daten empfangen soll, muss, wie bereits geschrieben, Bluetooth/BLE (mindestens Version 4) verstehen. Manche Rechner haben schon integrierte Hardware, andernfalls kann ein Bluetooth Dongle aushelfen.
Mit Hilfe der Bleak-Bibliothek kannst du auf Seiten des Centrals (also deinem Rechner, das mobile Endgerät wiederum nimmt die Rolle des Peripherals ein) nach den Daten scannen. Nutze dazu den BleakScanner. Die Signalstärke (RSSI) sollte in dem AdvertisementData-Objekt stehen, welches du via discover erhalten kannst.
Wenn du sicherstellen möchtest, dass die empfangene Nachricht tatsächlich vom erwarteten Peripheral kam, könntest du der Nachricht irgendein Präfix vorhängen, welches abgestimmt mit dem Central ist. Beispiel: my-android-device_Nachricht, wobei my-android-device_ dem Präfix entspricht.
Bluetooth funktioniert nur nach Kopplung also die beiden Geräte müssen gekoppelt sein.
Für das Protokoll gibt es bei Bluetooth Standard ein Serial Protokoll das man als Serial Port Profile bezeichnet.
Wie die genaue Implementierung unter Windows läuft weiß ich aber leider nicht, ChatGPT kann aber solche Standard Dinge meist recht gut.