Dies ist eine alte Version des Dokuments!
Bluetooth-Verbindung mit Linux
Diese Anleitung beschreibt, wie der mBot-Roboter per BLE (Bluetooth Low Energy) mit bleak
unter Ubuntu angesprochen werden kann. Dabei wird ein Python-Skript (makeblock_test.py
) verwendet, das testweise die LEDs des mBots schalten kann.
- Voraussetzungen
- Installation und Konfiguration der benötigten Pakete
bluetoothctrl
- Umgang mit dem wichtigen Tool zur Kontrolle der angeschlossenen Bluetoothgeräte.
- Testen
- Testen (hier in Python) der Verbindung und Steuern des mBot-Roboters.
Voraussetzungen
Installation und Konfiguration der benötigten Pakete
Systemvoraussetzungen & benötigte Pakete Getestet wurde mit folgender Umgebung:
- Ubuntu (getestet mit 20.04 & 22.04, sollte auch auf anderen Versionen laufen)
- Python 3.11+ (Empfohlen: Anaconda oder System-Python)
- Bluetooth-Adapter mit BLE-Unterstützung
- USB-BT500 ASUS
Notwendige Pakete installieren
Führen Sie folgende Befehle aus, um alle benötigten Systempakete zu installieren:
sudo apt update sudo apt install bluetooth bluez bluez-tools rfkill libbluetooth-dev
Ältere Ubuntu-Distributionen benötigen eventuell einen link auf rtl8761bu_fw.bin!
'' $ cd /usr/lib/firmware/rtl_bt $ sudo ln -s rtl8761b_fw.bin rtl8761bu_fw.bin
</WRAP>
—-
==== Bluetooth einrichten & Berechtigungen setzen ====
Damit Bluetooth verwendet werden kann muss der Benutzer in die
bleakbluetooth
-Gruppe aufgenommen werden:
<code>
sudo usermod -aG bluetooth $USER
newgrp bluetooth # Änderungen sofort anwenden
</code>
Starten Sie anschließend den Bluetooth-Stack neu:
<code>
sudo systemctl restart bluetooth
sudo rfkill unblock bluetooth
</code>
—-
===== Python =====
Damit BLE-Geräte gesteuert werden können, wird benötigt.
==== Installation mit
pip (System-Python oder venv) ====
Falls ohne Conda gearbeitet wird:
<code>
pip install bleak
</code>
—-
++
====== Tool: bluetoothctl ======
++++ Umgang mit dem wichtigen Tool zur Kontrolle der angeschlossenen Bluetoothgeräte.
Im diesem Abschnitt wird das Tool
bluetoothctl
vorgestellt, mit dem die Bluetooth-Schnittstelle verwaltet werden kann. Außerdem werden einige nützliche Kommandos erläutert, um eine erfolgreiche Verbindung zum mBot herzustellen.
===== Bluetooth-Befehle & Erklärungen =====
Hauptfunktionen von bluetoothctl
* Aktivieren und Deaktivieren von Bluetooth
* Suchen und Verbinden mit Bluetooth-Geräten
* Koppeln und Entkoppeln von Geräten
* Anzeigen und Verwalten von gekoppelten Geräten
* Ändern von Bluetooth-Einstellungen
^ Befehl ^ Beschreibung ^
| bluetoothctl
| Startet das Bluetooth-Management-Tool |
| scan on
| Sucht nach BLE-Geräten in der Umgebung |
| scan off
| Stoppt die Suche nach BLE-Geräten (wichtig für Verbindungsaufbau)|
|devices
| Zeigt eine Liste aller erkannten Bluetooth-Geräte |
|info <MAC>
| Zeigt detaillierte Informationen zu einem Gerät |
| trust <MAC>
| Markiert das Gerät als vertrauenswürdig |
| connect <MAC>
| Verbindet sich mit dem angegebenen Gerät |
| disconnect <MAC>
| Trennt die Verbindung zum Gerät |
| remove <MAC>
| Entfernt das Gerät aus der Liste bekannter Geräte |
| sudo systemctl restart bluetooth
| Startet den Bluetooth-Dienst neu (bei Verbindungsproblemen) |
- mbot Bluetooth Modul blinkt → keine Verbindung!
- mbot Bluetool Modul leuchtet Dauerhaft → Verbindung!
===== Bluetooth-Interface =====
bluetoothctl
Falls Sie bereits in bluetoothctl
sind, sehen Sie eine Eingabezeile wie:
[bluetooth]#
===== Scannen nach BLE-Geräten =====
scan on
Lassen Sie den Scan 10–15 Sekunden laufen, bis Ihr mBot erscheint.
Er sollte eine MAC-Adresse in diesem Format haben: 10:A5:62:22:CA:C4
.
Da manche BLE-Geräte keine Verbindung erlauben, während sie noch gescannt werden, sollte der Scan zuvor mit scan off beendet werden, falls scan on verwendet wurde.
scan off # scan wieder beenden!
Alternativ kann mit dem Befehl devices
eine Liste der Geräte (und MAC-Adressen) angezeigt werden.
[bluetooth]# devices Device 59:65:C3:57:CC:EC 59-65-C3-57-CC-EC Device 25:81:AA:74:75:85 25-81-AA-74-75-85 Device 10:A5:62:22:CA:C4 Makeblock_LE10a56222cac4 [DEL] Device 25:81:AA:74:75:85 25-81-AA-74-75-85 [bluetooth]#
===== Wichtige Befehle ===== ==== Verbindung vertrauen und verbinden ==== Ersetzen Sie die MAC-Adresse mit der Ihres mBots:
trust 10:A5:62:22:CA:C4 connect 10:A5:62:22:CA:C4
Falls die Verbindung klappt, sehen Sie:
[CHG] Device 10:A5:62:22:CA:C4 Connected: yes Connection successful
Falls die Verbindung fehlschlägt, Bluetooth-Dienst neu starten:
sudo systemctl restart bluetooth
==== Verbindung trennen und entfernen ==== Falls Ihr mBot direkt nach dem Verbinden mit Ubuntu verbunden bleibt, trennen Sie ihn:
disconnect 10:A5:62:22:CA:C4 remove 10:A5:62:22:CA:C4
Mit info MAC
können Informationen abgerufen werden!
Hinweis:
Der mBot sollte nur mit dem Python-Skript verbunden sein, nicht dauerhaft mit Ubuntu!
—- ++ ====== Testen ======
Um die Skripte zu testen, muss die MAC-Adresse des Makeblock-Bluetooth-Moduls bekannt sein!
Sie ist im Skript durch die von uns verwendete zu ersetzen. Ansonsten muss das Skript nicht angepasst werden.
Die Bereiche, die im Skript geändert werden müssen, sind durch # TODO ADJUST START
und # TODO ADJUST END
gekennzeichnet.
Die folgende Ausgabe von bluetoothctl zeigt, dass alle Voraussetzungen für das Testen mit Python erfüllt sind!
<code>
[bluetooth]# info 10:A5:62:22:CA:C4
Device 10:A5:62:22:CA:C4 (public)
Name: Makeblock_LE10a56222cac4
Alias: Makeblock_LE10a56222cac4
Paired: no
Trusted: yes
Blocked: no
Connected: no
LegacyPairing: no
UUID: Generic Access Profile (00001800-0000-1000-8000-00805f9b34fb)
UUID: Generic Attribute Profile (00001801-0000-1000-8000-00805f9b34fb)
UUID: Device Information (0000180a-0000-1000-8000-00805f9b34fb)
UUID: Vendor specific (00006287-3c17-d293-8e48-14fe2e4da212)
UUID: Vendor specific (0000d0ff-3c17-d293-8e48-14fe2e4da212)
UUID: Unknown (0000ffe1-0000-1000-8000-00805f9b34fb)
UUID: Unknown (0000ffe4-0000-1000-8000-00805f9b34fb)
Modalias: bluetooth:v005Dp0001d0003
</code>
* ✅ Connected: no → Der mBot ist nicht dauerhaft mit Ubuntu verbunden → Gut!
* ✅ Trusted: yes → Der mBot wurde als vertrauenswürdig eingestuft → Richtig konfiguriert!
* ✅ Paired: no → Der mBot wurde nicht gekoppelt (BLE braucht keine Kopplung)
* ✅ Liste der UUIDs → Zeigt die verfügbaren GATT-Services und Characteristics des Geräts.
===== BLE-Scanner =====
Dieses Skript prüft, ob
bleak'' den mBot erkennt.
Listing 1:makeblock_scanner.py
import asyncio from bleak import BleakScanner async def scan(): print("Scanne nach BLE-Geräten...") devices = await BleakScanner.discover() for device in devices: print(f"Gefunden: {device.name} - {device.address}") asyncio.run(scan())
Falls der mBot erkannt wird, ist alles korrekt eingerichtet!
mbot steuern
Dieses Script steuert mit einfachen Kommandos die LEDs des mBot.
Listing 1:makeblock_test.py
import asyncio from bleak import BleakClient # TODO ADJUST START # Makeblock BLE-Adresse hier eintragen device_address = "10:A5:62:22:CA:C4" # TODO_ADJUST END WRITE_CHAR_UUID = "0000ffe3-0000-1000-8000-00805f9b34fb" async def send_char(client, char): """Sendet ein einzelnes Zeichen über BLE""" try: # Konvertiere Zeichen in Byte data = bytearray([ord(char)]) await client.write_gatt_char(WRITE_CHAR_UUID, data) print(f"Gesendet: {char}") except Exception as e: print(f"Fehler beim Senden von '{char}': {e}") async def main(): """Verbindet sich mit dem mBot und sendet Befehle""" try: async with BleakClient(device_address) as client: if await client.is_connected(): print(f"Verbunden mit {device_address}") while True: user_input = input("'r', 'g', 'b', '0' zum Senden. 'q' zum Beenden: ") if user_input == 'q': print("Programm beendet.") break # Beende das Programm elif user_input in ['r', 'g', 'b', '0']: await send_char(client, user_input) # senden else: print("Ungültige Eingabe!") except Exception as e: print(f"Verbindungsfehler: {e}") asyncio.run(main())