Benutzer-Werkzeuge

Webseiten-Werkzeuge


bluetooth-verbindung_mit_linux

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 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())

bluetooth-verbindung_mit_linux.1739036238.txt.gz · Zuletzt geändert: 2025/02/08 17:37 von torsten.roehl