Benutzer-Werkzeuge

Webseiten-Werkzeuge


bluetooth-verbindung_mit_linux

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen RevisionVorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
bluetooth-verbindung_mit_linux [2025/02/08 15:28] torsten.roehlbluetooth-verbindung_mit_linux [2025/02/12 13:32] (aktuell) torsten.roehl
Zeile 1: Zeile 1:
 ====== Bluetooth-Verbindung mit Linux ====== ====== Bluetooth-Verbindung mit Linux ======
  
-Diese Anleitung beschreibt, wie Sie den Makeblock mBot per **BLE (Bluetooth Low Energy)** mit ''bleak'' unter Ubuntu steuern können. Dabei wird ein Python-Skript (''makeblock_test.py'') verwendet, das testweise die LEDs des mBots schalten kann.+//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 ====== ====== Voraussetzungen ======
- +++++ Installation und Konfiguration der benötigten Pakete | 
-===== Systemvoraussetzungen & benötigte Pakete =====+Systemvoraussetzungen & benötigte Pakete 
 Getestet wurde mit folgender Umgebung: Getestet wurde mit folgender Umgebung:
  
Zeile 13: Zeile 19:
   * **Python 3.11+** (Empfohlen: Anaconda oder System-Python)   * **Python 3.11+** (Empfohlen: Anaconda oder System-Python)
   * **Bluetooth-Adapter mit BLE-Unterstützung**   * **Bluetooth-Adapter mit BLE-Unterstützung**
-          * USB-BT500 ASUS+          * USB-BT500 ASUS <color #c3c3c3> (Dieser Stand stand zum Testen zur Verfügung)</color>
  
 ==== Notwendige Pakete installieren ==== ==== Notwendige Pakete installieren ====
Zeile 21: Zeile 27:
 sudo apt update sudo apt update
 sudo apt install bluetooth bluez bluez-tools rfkill libbluetooth-dev sudo apt install bluetooth bluez bluez-tools rfkill libbluetooth-dev
-</code>+</code> 
  
 ---- ----
  
 ==== Bluetooth einrichten & Berechtigungen setzen ==== ==== Bluetooth einrichten & Berechtigungen setzen ====
-Damit Ihr Benutzer Bluetooth nutzen kannmuss er in die **''bluetooth''-Gruppe** aufgenommen werden:+Damit Bluetooth verwendet werden kann muss der Benutzer in die **''bluetooth''-Gruppe** aufgenommen werden:
  
 <code> <code>
Zeile 38: Zeile 44:
 sudo rfkill unblock bluetooth sudo rfkill unblock bluetooth
 </code> </code>
 +
 +<note>Ältere Ubuntu-Distributionen benötigen möglicherweise einen Link, falls der USB-BT500 ASUS nicht erkannt wird.
 +<code>
 +$ cd /usr/lib/firmware/rtl_bt
 +$ sudo ln -s rtl8761b_fw.bin rtl8761bu_fw.bin
 +</code>
 +☛ https://forums.linuxmint.com/viewtopic.php?t=377733
 +</note>
 +
  
 ---- ----
  
 ===== Python  ===== ===== Python  =====
-Damit Sie BLE-Geräte steuern können, benötigen Sie ''bleak''.+Damit BLE-Geräte gesteuert werden können, wird ''bleak'' benötigt.
  
-==== Installation mit Conda (Empfohlen) ==== 
-<code> 
-conda install -c conda-forge bleak 
-</code> 
  
 ==== Installation mit ''pip'' (System-Python oder venv) ==== ==== Installation mit ''pip'' (System-Python oder venv) ====
-Falls Sie kein Conda nutzen:+Falls ohne Conda gearbeitet wird:
 <code> <code>
 pip install bleak pip install bleak
Zeile 56: Zeile 67:
  
 ---- ----
 +++++
 ====== Tool: bluetoothctl   ====== ====== 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 <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) |
 +
 +
 +<WRAP center round tip 90%>
 +  * mbot Bluetooth Modul blinkt → <color #ed1c24>keine</color> Verbindung!
 +  * mbot Bluetool Modul leuchtet Dauerhaft →  Verbindung!
 +</WRAP>
  
-Um den mBot zu verbinden, verwenden Sie ''bluetoothctl''. 
  
-==== Bluetooth-Interface  ====+===== Bluetooth-Interface  =====
 <code> <code>
 bluetoothctl bluetoothctl
Zeile 71: Zeile 108:
 </code> </code>
  
-==== Scannen nach BLE-Geräten ====+===== Scannen nach BLE-Geräten =====
 <code> <code>
 scan on scan on
Zeile 78: Zeile 115:
 Er sollte eine MAC-Adresse in diesem Format haben: ''10:A5:62:22:CA:C4''. Er sollte eine MAC-Adresse in diesem Format haben: ''10:A5:62:22:CA:C4''.
  
-==== Schritt 3: Gerät vertrauen verbinden ====+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. 
 +<code> 
 +scan off # scan wieder beenden! 
 +</code> 
 + 
 +Alternativ kann mit dem Befehl ''devices'' eine Liste der Geräte (und MAC-Adressen) angezeigt werden. 
 +<code> 
 +[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: Ersetzen Sie die MAC-Adresse mit der Ihres mBots:
 <code> <code>
Zeile 91: Zeile 144:
 </code> </code>
  
-Falls die Verbindung fehlschlägt, starten Sie den Bluetooth-Dienst neu:+Falls die Verbindung fehlschlägt,  Bluetooth-Dienst neu starten:
 <code> <code>
 sudo systemctl restart bluetooth sudo systemctl restart bluetooth
 </code> </code>
-Starten Sie dann ''bluetoothctl'' erneut und versuchen Sie es noch einmal. 
  
 +==== Verbindung trennen und entfernen ====
 Falls Ihr mBot **direkt nach dem Verbinden mit Ubuntu verbunden bleibt**, trennen Sie ihn: Falls Ihr mBot **direkt nach dem Verbinden mit Ubuntu verbunden bleibt**, trennen Sie ihn:
 <code> <code>
Zeile 103: Zeile 156:
 </code> </code>
  
-**Hinweis:** Der mBot sollte nur mit dem Python-Skript verbunden sein, nicht dauerhaft mit Ubuntu!+Mit ''info MAC'' können Informationen abgerufen werden!
  
-----+<WRAP center round info 85%> 
 +**Hinweis:**
  
 +Der mBot sollte __nur__ mit dem Python-Skript verbunden sein, nicht dauerhaft mit Ubuntu!
 +
 +</WRAP>
 +
 +----
 +++++
 ====== Testen ====== ====== Testen ======
 +
 +<WRAP center round tip 90%>
 +**Um die Skripte zu testen, muss die MAC-Adresse des Makeblock-Bluetooth-Moduls bekannt sein!**
 +
 +Sie ist im Skript durch die von uns verwendete //<color #c3c3c3>(10:A5:62:22:CA:C4)</color>// zu ersetzen. Ansonsten muss das Skript nicht angepasst werden.
 +
 +Die Bereiche, die im Skript geändert werden müssen, sind durch
 +<code>
 + # TODO ADJUST START
 +</code> 
 +und
 +<code>
 +# TODO ADJUST END
 +</code> 
 +gekennzeichnet.
 +</WRAP>
 +
 +Die folgende Ausgabe von ''bluetoothctl'' zeigt, dass alle Voraussetzungen für das Testen mit Python erfüllt sind!
 +<code>
 +[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
 +</code>
 +
 +  * ✅ 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 ===== ===== BLE-Scanner =====
-Dieses Skript prüft, ob ''bleak'' Ihren mBot erkennt.+Dieses Skript prüft, ob ''bleak'' den mBot erkennt.
  
-==== Erstellen Sie ''scan_ble.py'' mit folgendem Inhalt: ==== + 
-<code python>+ 
 +<Code c linenums:1 | Listing 1:makeblock_scanner.py>
 import asyncio import asyncio
 from bleak import BleakScanner from bleak import BleakScanner
Zeile 124: Zeile 228:
  
 asyncio.run(scan()) asyncio.run(scan())
-</code>+</Code>
  
-==== Starten Sie das Skript: ==== 
-<code> 
-python3 scan_ble.py 
-</code> 
  
-Falls Ihr mBot erkannt wird, ist alles korrekt eingerichtet!+Falls der mBot erkannt wird, ist alles korrekt eingerichtet!
  
 ---- ----
  
-===== Steuer-Skript: ''r'', ''g'', ''b'', ''0'' senden ===== +===== mbot steuern ===== 
-Jetzt steuern wir den mBot mit ''bleak''.+Dieses Script steuert  mit einfachen Kommandos die LEDs des mBot.
  
-==== Erstellen Sie ''makeblock_control.py'' mit folgendem Inhalt: ==== + 
-<code python>+<Code c linenums:1 | Listing 1:makeblock_test.py>
 import asyncio import asyncio
 from bleak import BleakClient from bleak import BleakClient
  
-device_address = "10:A5:62:22:CA:C4"  Ersetzen Sie diese mit Ihrer MAC-Adresse+# 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" WRITE_CHAR_UUID = "0000ffe3-0000-1000-8000-00805f9b34fb"
  
 async def send_char(client, char): async def send_char(client, char):
 +    """Sendet ein einzelnes Zeichen über BLE"""
     try:     try:
-        data = bytearray([ord(char)])+        # Konvertiere Zeichen in Byte 
 +        data = bytearray([ord(char)])  
         await client.write_gatt_char(WRITE_CHAR_UUID, data)         await client.write_gatt_char(WRITE_CHAR_UUID, data)
         print(f"Gesendet: {char}")         print(f"Gesendet: {char}")
Zeile 155: Zeile 261:
  
 async def main(): async def main():
 +    """Verbindet sich mit dem mBot und sendet Befehle"""
     try:     try:
         async with BleakClient(device_address) as client:         async with BleakClient(device_address) as client:
             if await client.is_connected():             if await client.is_connected():
                 print(f"Verbunden mit {device_address}")                 print(f"Verbunden mit {device_address}")
 +
                 while True:                 while True:
-                    user_input = input("Geben Sie 'r', 'g', 'b', '0' zum Senden ein oder 'q' zum Beenden: ")+                    user_input = input("'r', 'g', 'b', '0' zum Senden'q' zum Beenden: ") 
                     if user_input == 'q':                     if user_input == 'q':
                         print("Programm beendet.")                         print("Programm beendet.")
-                        break+                        break  # Beende das Programm
                     elif user_input in ['r', 'g', 'b', '0']:                     elif user_input in ['r', 'g', 'b', '0']:
-                        await send_char(client, user_input)+                        await send_char(client, user_input)  # senden
                     else:                     else:
                         print("Ungültige Eingabe!")                         print("Ungültige Eingabe!")
 +
     except Exception as e:     except Exception as e:
         print(f"Verbindungsfehler: {e}")         print(f"Verbindungsfehler: {e}")
 +
  
 asyncio.run(main()) asyncio.run(main())
-</code> 
  
-==== Starten Sie das Skript: ==== +</Code
-<code+ 
-python3 makeblock_control.py +
-</code>+
  
----- 
  
-====== Fazit ====== 
-✅ Bluetooth eingerichtet, Berechtigungen gesetzt   
-✅ ''bluetoothctl'' genutzt, um mBot zu verbinden   
-✅ ''bleak'' installiert und getestet   
-✅ Steuerung mit Python erfolgreich!   
  
-Falls Sie das Setup auf einem anderen Rechner wiederholen möchten, folgen Sie einfach dieser Anleitung. 
  
bluetooth-verbindung_mit_linux.1739028480.txt.gz · Zuletzt geändert: 2025/02/08 15:28 von torsten.roehl