Dies ist eine alte Version des Dokuments!
Inhaltsverzeichnis
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 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
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
Bluetooth einrichten & Berechtigungen setzen
Damit Bluetooth verwendet werden kann muss der Benutzer in die bluetooth
-Gruppe aufgenommen werden:
sudo usermod -aG bluetooth $USER newgrp bluetooth # Änderungen sofort anwenden
Starten Sie anschließend den Bluetooth-Stack neu:
sudo systemctl restart bluetooth sudo rfkill unblock bluetooth
Python
Damit Sie BLE-Geräte steuern können, benötigen Sie bleak
.
Installation mit Conda (Empfohlen)
conda install -c conda-forge bleak
Installation mit ''pip'' (System-Python oder venv)
Falls Sie kein Conda nutzen:
pip install bleak
Tool: bluetoothctl
Im Folgenden 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
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!
[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
- ✅ 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())