Skip to content

Technik Blog

Programmieren | Arduino | ESP32 | MicroPython | Python | Raspberry Pi | Raspberry Pi Pico

Menu
  • Smarthome
  • Gartenautomation
  • Arduino
  • ESP32 & Co.
  • Raspberry Pi & Pico
  • Solo Mining
  • Deutsch
  • English
Menu

Drahtlose Datenübertragung: Python-Skript für Bluetooth-Kommunikation mit Mikrocontroller

Posted on 24. November 202310. März 2024 by Stefan Draeger

In diesem Beitrag möchte ich dir ein Python-Skript für die drahtlose Bluetooth-Kommunikation zwischen einem Raspberry Pi und einem Mikrocontroller präsentieren. Mit diesem Skript kannst du recht einfach Zeichenketten senden und so auf einem Mikrocontroller Befehle ausführen.

Drahtlose Datenübertragung: Python-Skript für Bluetooth-Kommunikation mit Mikrocontrollern
Drahtlose Datenübertragung: Python-Skript für Bluetooth-Kommunikation mit Mikrocontrollern

Wie du auf einem Raspberry Pi die drahtlose Kommunikation via Bluetooth aktivierst, habe ich dir im Beitrag Schritt-für-Schritt-Anleitung: Einrichten von Bluetooth auf dem Raspberry Pi ausführlich erläutert.

Inhaltsverzeichnis

  • Wozu dient dieses Python-Skript?
  • Was muss vor dem Versenden von Daten erledigt werden?
    • Koppeln des Bluetooth Moduls HC-06 mit dem Raspberry Pi
      • Schritt 1 – Kommandozeilentool „bluetoothctl“ aufrufen
      • Schritt 2 – Koppeln des Moduls HC-06 mit dem Raspberry Pi
      • Schritt 3 – Aufbauen der Verbindung
  • Python-Skript für die Bluetooth-Kommunikation mit Mikrocontroller
    • Warum die Pause zwischen dem Senden von Daten?
    • Download des Skriptes
  • Code für das Empfangen von seriellen Daten am Arduino UNO R3

Wozu dient dieses Python-Skript?

Das Python-Skript kannst du wie eingangs erwähnt nutzen, um zum Beispiel mit einem Zeichen auf einem Mikrocontroller einen Befehl auszuführen oder auch Daten zu versenden, welche weiterverarbeitet werden sollen.

Du kannst das Skript auch als Basis für deinen eigenen Ideen nutzen und beliebig umschreiben.

Ich möchte das Skript nutzen, um später mit dem Raspberry Pi via Bluetooth ein kleines Auto zu steuern, aber dazu gibt es einen separaten Beitrag!

Was muss vor dem Versenden von Daten erledigt werden?

Das Skript sucht beim Starten zunächst nach Bluetoothgeräte. Jedoch musst du zunächst dein gewünschtes Gerät mit dem Raspberry Pi koppeln.

In meinem Fall habe ich eine kleine Schaltung am Arduino UNO R3* mit dem HC-06* aufgebaut.

Hinweis von mir: Die mit einem Sternchen (*) markierten Links sind Affiliate-Links. Wenn du über diese Links einkaufst, erhalte ich eine kleine Provision, die dazu beiträgt, diesen Blog zu unterstützen. Der Preis für dich bleibt dabei unverändert. Vielen Dank für deine Unterstützung!

Schaltung - Arduino UNO R3 mit Bluetooth Modul HC-06
Schaltung – Arduino UNO R3 mit Bluetooth Modul HC-06

Das Bluetooth Modul HC-06 ist mit dem Passwort 1234 gesichert und so muss vor dem Aufbau einer Verbindung mit dem Skript dieses eingerichtet werden.

Koppeln des Bluetooth Moduls HC-06 mit dem Raspberry Pi

Im nachfolgenden YouTube-Video erläutere ich dir, wie du ein HC-06 Modul mit dem Raspberry Pi koppelst und Daten vom Pi an den angeschlossenen Arduino sendest.

Python-Skript zum Übertragen von Daten vom Raspberry Pi zum Arduino UNO R3
Dieses Video auf YouTube ansehen.

Schritt 1 – Kommandozeilentool „bluetoothctl“ aufrufen

Zum Koppeln des Bluetooth Moduls HC-06 musst du das Kommandozeilentool „bluetoothctl“ aufrufen. Dort gibst du nun „scan on“ ein und wartest, bis dein Gerät gefunden wurde.

Manchmal dauert dieses ein paar Sekunden und auch wenn der Prompt erscheint, können trotzdem noch Zeilen hinzugefügt werden!

pi@raspberrypi:~/Python/BluetoothSearch $ bluetoothctl

Agent registered
[bluetooth]# scan on
Discovery started
[CHG] Controller B8:27:EB:AA:D5:1A Discovering: yes
[CHG] Device 4D:C0:06:78:46:4D RSSI: -58
[CHG] Device 4D:C0:06:78:46:4D TxPower: 7
[CHG] Device 4D:6A:69:C7:A6:F7 RSSI: -82
[CHG] Device 4D:6A:69:C7:A6:F7 TxPower: 7
[CHG] Device DE:28:81:28:4A:5C RSSI: -52
[NEW] Device 20:15:12:15:21:33 HC-06
[bluetooth]#

In meinem Fall wurde das Bluetooth Modul HC-06 mit der MAC-Adresse 20:15:12:15:21:33 gefunden. Diese benötigen wir, um die beiden Geräte (den Raspberry Pi und das Modul HC-06) zu koppeln.

Schritt 2 – Koppeln des Moduls HC-06 mit dem Raspberry Pi

Im nächsten Schritt geben wir jetzt den nachfolgenden Befehl ein und vergeben dann das Passwort 1234.

[bluetooth]# pair 20:15:12:15:21:33
Attempting to pair with 20:15:12:15:21:33
[CHG] Device 20:15:12:15:21:33 Connected: yes
Request PIN code
[agent] Enter PIN code: 1234
[CHG] Device 20:15:12:15:21:33 ServicesResolved: yes
[CHG] Device 20:15:12:15:21:33 Paired: yes
Pairing successful
[CHG] Device 20:15:12:15:21:33 ServicesResolved: no
[CHG] Device 20:15:12:15:21:33 Connected: no

Wenn dieses erfolgreich war, dann sollte „Pairing successful“ ausgegeben werden!

Schritt 3 – Aufbauen der Verbindung

Nachdem erfolgreichen koppeln kann eine Verbindung aufgebaut werden.

[bluetooth]# connect 20:15:12:15:21:33
Attempting to connect to 20:15:12:15:21:33
[CHG] Device DE:28:81:28:4A:5C RSSI: -49
[CHG] Device 20:15:12:15:21:33 Connected: yes
[CHG] Device 20:15:12:15:21:33 ServicesResolved: yes

Python-Skript für die Bluetooth-Kommunikation mit Mikrocontroller

Wenn du das kleine Python-Skript startest, dann wird zunächst nach Bluetoothgeräte gesucht und diese dann aufgelistet. Zusätzlich erhältst du noch die Möglichkeit erneut nach Geräte zu suchen und das Skript zu beenden. (Wie jedes Python-Skript kann dieses aber auch mit Strg+X beenden.)

import bluetooth
import time

nearby_devices = None

def sendData(target_address, geraetename):
   try:
      msg = input("Eingabe: ")
      print(msg)
      if len(msg) > 0:
         print(f"Aufbau der Verbindung zu {geraetename} {target_address} wird aufgebaut.")
         for s in msg:
            port = 1
            sock=bluetooth.BluetoothSocket( bluetooth.RFCOMM )
            sock.connect((target_address, port))
            sock.send(s)
            print(s)
            sock.close()
            time.sleep(2)
         searchDevices()
   except Exception as err:
      print(f"Fehler beim senden der Daten an {geraetename}!")
      print(f"{err=}, {type(err)=}")


def searchDevices():
   global nearby_devices
   if nearby_devices == None:
      print("Suche Bluetoothgeräte")
      nearby_devices = bluetooth.discover_devices(lookup_names=True)
      print(f"Es wurde(n) {len(nearby_devices)} Gerät(e) gefunden!")

   if len(nearby_devices) > 0:
      print("Gefundene Geräte:")
      index = 0
      for addr, name in nearby_devices:
         print(f"\t[{index}] Gerätename: {name}, Adresse: {addr}")
         index = index + 1
      print("\t[S] Suche neustarten")
      print("\t[E] Ende")

      eingabe = input("Wähle ein Gerät zum senden von Daten: ")
      if eingabe.upper()  == "E":
         print("Ende")
      elif eingabe.upper() == "S":
         nearby_devices = None
         searchDevices()
      elif eingabe.isnumeric():
         adresse = nearby_devices[int(eingabe)][0]
         geraetename = nearby_devices[int(eingabe)][1]
         sendData(adresse, geraetename)

searchDevices()

Warum die Pause zwischen dem Senden von Daten?

Ich habe viel herumexperimentiert, aber ich konnte immer nur maximal 2 Zeichen am Stück korrekt übertragen. Jedes weitere Zeichen war entweder im Minusbereich oder ein komplett anderer Character wurde übertragen.

 for s in msg:
            port = 1
            sock=bluetooth.BluetoothSocket( bluetooth.RFCOMM )
            sock.connect((target_address, port))
            sock.send(s)
            print(s)
            sock.close()
            time.sleep(2)

Somit kam mir die Idee, jedes Zeichen einzeln zu übertragen. Die Pause habe ich erstmal auf 2 Sekunden gesetzt, diese kannst du jedoch nach Belieben anpassen, jedoch sollte diese nicht kleiner als 0,5 Sekunden sein.

Download des Skriptes

PythonSkript zum senden von Zeichenketten via BluetoothHerunterladen

Code für das Empfangen von seriellen Daten am Arduino UNO R3

Hier nun das kleine Programm für den Arduino UNO R3. Das Bluetooth Modul HC-06 wird lediglich via serieller Kommunikation angesprochen und daher lesen wir hier von einer seriellen Schnittstelle.

#include <SoftwareSerial.h>

SoftwareSerial BT(11, 10);

void setup() {
  Serial.begin(9600);
  BT.begin(9600);
  BT.println("Hallo vom Arduino UNO R3");
}

void loop() {
  if (BT.available()) {
    char data = BT.read();
    Serial.println(data);
    BT.println("Daten empfangen!");
  }
}

Dieses Programm können wir jetzt erweitern, um bei bestimmten Zeichen eine Aktion auszuführen.

1 thought on “Drahtlose Datenübertragung: Python-Skript für Bluetooth-Kommunikation mit Mikrocontroller”

  1. Pingback: Arduino zu Raspberry Pi: Bluetooth für die Übertragung von Sensorwerten einsetzen - Technik Blog

Schreibe einen Kommentar Antworten abbrechen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Fragen oder Feedback?

Du hast eine Idee, brauchst Hilfe oder möchtest Feedback loswerden?
Support-Ticket erstellen

Newsletter abonnieren

Bleib auf dem Laufenden: Erhalte regelmäßig Updates zu neuen Projekten, Tutorials und Tipps rund um Arduino, ESP32 und mehr – direkt in dein Postfach.

Jetzt Newsletter abonnieren

Unterstütze meinen Blog

Wenn dir meine Inhalte gefallen, freue ich mich über deine Unterstützung auf Tipeee.
So hilfst du mit, den Blog am Leben zu halten und neue Beiträge zu ermöglichen.

draeger-it.blog auf Tipeee unterstützen

Vielen Dank für deinen Support!
– Stefan Draeger

Kategorien

Tools

  • Unix-Zeitstempel-Rechner
  • ASCII Tabelle
  • Spannung, Strom, Widerstand und Leistung berechnen
  • Widerstandsrechner
  • 8×8 LED Matrix Tool
  • 8×16 LED Matrix Modul von Keyestudio
  • 16×16 LED Matrix – Generator

Links

Blogverzeichnis Bloggerei.de TopBlogs.de das Original - Blogverzeichnis | Blog Top Liste Blogverzeichnis trusted-blogs.com

Stefan Draeger
Königsberger Str. 13
38364 Schöningen

Tel.: 01778501273
E-Mail: info@draeger-it.blog

Folge mir auf

  • Impressum
  • Datenschutzerklärung
  • Disclaimer
  • Cookie-Richtlinie (EU)
©2025 Technik Blog | Built using WordPress and Responsive Blogily theme by Superb
Cookie-Zustimmung verwalten
Wir verwenden Technologien wie Cookies, um Geräteinformationen zu speichern und/oder darauf zuzugreifen. Wir tun dies, um das Surferlebnis zu verbessern und um personalisierte Werbung anzuzeigen. Wenn Sie diesen Technologien zustimmen, können wir Daten wie das Surfverhalten oder eindeutige IDs auf dieser Website verarbeiten. Wenn Sie Ihre Zustimmung nicht erteilen oder zurückziehen, können bestimmte Funktionen beeinträchtigt werden.
Funktional Immer aktiv
Die technische Speicherung oder der Zugang ist unbedingt erforderlich für den rechtmäßigen Zweck, die Nutzung eines bestimmten Dienstes zu ermöglichen, der vom Teilnehmer oder Nutzer ausdrücklich gewünscht wird, oder für den alleinigen Zweck, die Übertragung einer Nachricht über ein elektronisches Kommunikationsnetz durchzuführen.
Vorlieben
Die technische Speicherung oder der Zugriff ist für den rechtmäßigen Zweck der Speicherung von Präferenzen erforderlich, die nicht vom Abonnenten oder Benutzer angefordert wurden.
Statistiken
Die technische Speicherung oder der Zugriff, der ausschließlich zu statistischen Zwecken erfolgt. Die technische Speicherung oder der Zugriff, der ausschließlich zu anonymen statistischen Zwecken verwendet wird. Ohne eine Vorladung, die freiwillige Zustimmung deines Internetdienstanbieters oder zusätzliche Aufzeichnungen von Dritten können die zu diesem Zweck gespeicherten oder abgerufenen Informationen allein in der Regel nicht dazu verwendet werden, dich zu identifizieren.
Marketing
Die technische Speicherung oder der Zugriff ist erforderlich, um Nutzerprofile zu erstellen, um Werbung zu versenden oder um den Nutzer auf einer Website oder über mehrere Websites hinweg zu ähnlichen Marketingzwecken zu verfolgen.
Optionen verwalten Dienste verwalten Verwalten von {vendor_count}-Lieferanten Lese mehr über diese Zwecke
Einstellungen anzeigen
{title} {title} {title}