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

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.

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