====== Bluetooth-Verbindung mit Linux ======
//Diese Anleitung beschreibt, wie der mBot-Roboter per **BLE (Bluetooth Low Energy)** 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 (Dieser Stand stand zum Testen zur Verfügung)
==== 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
Ältere Ubuntu-Distributionen benötigen möglicherweise einen Link, falls der USB-BT500 ASUS nicht erkannt wird.
$ cd /usr/lib/firmware/rtl_bt
$ sudo ln -s rtl8761b_fw.bin rtl8761bu_fw.bin
☛ https://forums.linuxmint.com/viewtopic.php?t=377733
----
===== Python =====
Damit BLE-Geräte gesteuert werden können, wird ''bleak'' benötigt.
==== Installation mit ''pip'' (System-Python oder venv) ====
Falls ohne Conda gearbeitet wird:
pip install bleak
----
++++
====== 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 '' | Zeigt detaillierte Informationen zu einem Gerät |
| ''trust '' | Markiert das Gerät als vertrauenswürdig |
| ''connect '' | Verbindet sich mit dem angegebenen Gerät |
| ''disconnect '' | Trennt die Verbindung zum Gerät |
| ''remove '' | 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 //(10:A5:62:22:CA:C4)// 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.
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.
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())