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
`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.

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

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.1739034751.txt.gz · Zuletzt geändert: 2025/02/08 17:12 von torsten.roehl