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
- mbot Bluetooth Modul blinkt → keine Verbindung!
- mbot Bluetool Modul leuchtet Dauerhaft → Verbindung!
Die Bluetooth-Schnittstelle wird mit dem Tool bluetoothctl
kontrolliert.
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
.
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]# <code> ===== Wichtige Befehle ===== ==== Verbindung vertrauen und verbinden ==== Ersetzen Sie die MAC-Adresse mit der Ihres mBots: <code> 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
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())