Raspberry Pi Pico W & Bluetooth

In diesem Beitrag möchte ich dir zeigen, wie du das Bluetooth Modul HC-06 am Raspberry Pi Pico W mit Micropython programmiert wird.

Raspberry Pi Pico W & Bluetooth
Raspberry Pi Pico W & Bluetooth

Eigentlich bräuchten wir kein zusätzliches Modul, denn der Mikrocontroller verfügt über den Chip CYW43438 von Infineon (siehe Beitrag Raspberry Pi Pico W mit Infineon CYW43438 Chip). Aber die Bluetooth-Funktionalität sind auf diesem Softwareseitig deaktiviert worden, somit müssen uns einem zusätzlichen Modul behelfen.

Pinout des Bluetooth Modules HC-06

Das hier verwendete Bluetooth Modul HC-06 habe ich dir bereits im Beitrag Arduino Lektion 21: Bluetooth Modul HC-06 für den Arduino vorgestellt.

Es gibt neben dem HC-06 Modul noch das HM10 Modul, welches über Bluetooth 4.0 & BLE verfügt und somit deutlich schneller arbeitet.

Bluetooth Modul HC06 (links) und HM10 (rechts)
Bluetooth Modul HC06 (links) und HM10 (rechts)

Hier, in diesem Beitrag, möchte ich das Modul HC-06 mit Bluetooth verwenden, denn dieses kannst du auch mit einem alten Handy steuern und kannst somit ggf. alte Geräte wiederverwenden.

Anschluss des HC-06 Moduls an den Raspberry Pi Pico W

Das Bluetooth Modul HC-06 wird per UART am Raspberry Pi Pico W programmiert. Das macht den Anschluss recht easy, denn wir brauchen nur einen der beiden UART Schnittstellen und die Stromversorgung von 5V inkl. GND.

Bluetooth Modul HC-06Raspberry Pi Pico W
RXDGP0, UART0 TX
TXDGP1, UART0 RX
GND35, GND
VCC40, VBUS
Pinzuordnung des HC-06 Moduls zum Raspberry Pi Pico W
Bluetooth Modul HC-06 am Raspberry Pi Pico
Bluetooth Modul HC-06 am Raspberry Pi Pico

Eine kleine Schaltung

Im nachfolgenden Beispiel möchte ich dir zeigen, wie du per Bluetooth zwei kleine LEDs schalten kannst.

Schaltung - Bluetooth Modul HC-06 am Raspberry Pi Pico
Schaltung – Bluetooth Modul HC-06 am Raspberry Pi Pico

In der Grafik von Fritzing verwende ich das Vorgängermodell Raspberry Pi Pico (also ohne WiFi Support), jedoch sind beide Modul von der Pinbelegung gleich und somit ist diese Grafik auch für den neuen Pico W gültig.

Die beiden LEDs sind jeweils an GPIO14 & 15 angeschlossen.

Android App zum Senden von Daten per Bluetooth

Für die nachfolgenden Beispiele verwende ich die Android-App Serial Bluetooth Terminal. Diese App ist sehr einfach zu bedienen und bietet die Grundfunktionalitäten, welche wir benötigen, um Daten per Bluetooth an den Pico W zu senden.

Android-App Serial Bluetooth Terminal im Google Play Store
Android-App Serial Bluetooth Terminal im Google Play Store

Es gibt für Apple Geräte sicherlich ein äquivalent, da mir jedoch kein solches Gerät zur Verfügung steht, bleibt dieser Test jedoch aus.

Programmieren des Bluetooth Moduls per UART

Aus der Schaltung kannst du übernehmen, dass wir das Modul per UART (RX & TX) programmieren werden.

Im ersten Schritt wollen wir zunächst eine Verbindung mit dem Handy aufbauen und Text versenden. Für die

# Bibliothek zum steuern der UART Kommunikation
from machine import Pin,UART

# beginn der UART Kommunikation auf dem ersten Kanal
# GP0 & GP1 mit 9600 baud
uart = UART(0,9600)

# Endlosschleife
while True:
    # pruefen ob irgendwelche Daten empfangen wurden
    if uart.any():
        # lesen der Daten und speichern in
        # der Variablen command
        command = uart.readline()
        # ausgeben der Variablen command auf
        # der seriellen Schnittstelle
        print(command)

Dieses kleine Programm bewirkt, dass wir wie erwähnt Daten mit einer Bluetooth-Terminal-App versenden und empfangen können.

Raspberry Pi Pico W & Bluetooth Modul HC-06 - simple UART

In dem Video siehst du, dass die Daten in der Konsole nach folgendem Muster ausgegeben werden.

MicroPython v1.19.1 on 2022-06-18; Raspberry Pi Pico with RP2040

Type "help()" for more information.
>>> %Run -c $EDITOR_CONTENT
b'H'
b'a'
b'l'
b'l'
b'o'
b'\r'
b'\n'

Damit wir die Daten von Byte in String konvertieren, müssen wir beim Ausgeben oder später beim Auswerten der Variable command die Funktion „decode()“ aufrufen.

print(command.decode())

Wenn wir nun den Funktionsaufruf decode verwenden, so entfallen die zusätzlichen Zeichen.

MicroPython v1.19.1 on 2022-06-18; Raspberry Pi Pico with RP2040

Type "help()" for more information.
>>> %Run -c $EDITOR_CONTENT
H
a
l
l
o

Steuern von LEDs per Bluetooth am Raspberry Pi Pico W

Im nächsten Schritt wollen wir jedoch per Bluetooth unsere beiden LEDs steuern, dazu senden wir für die grüne LED den Buchstaben g und für die rote den Buchstaben r ab.

Den Quellcode passen wir an und implementieren die beiden Pins für die LEDs sowie die beiden If-Statements für den Check auf die empfangenen Daten.

# Bibliothek zum steuern der UART Kommunikation
from machine import Pin,UART

# beginn der UART Kommunikation auf dem ersten Kanal
# GP0 & GP1 mit 9600 baud
uart = UART(0,9600)

# rote LED am Pin GPIO14 angeschlossen
led_rot = Pin(14, Pin.OUT)
# gruene LED am Pin GPIO15 angeschlossen
led_gruen = Pin(15, Pin.OUT)

# Variablen zum speichern das Status der LEDs
led_rot_status = False
led_gruen_status = False

# Endlosschleife
while True:
    # pruefen ob irgendwelche Daten empfangen wurden
    if uart.any():
        # lesen der Daten und speichern in
        # der Variablen command
        command = uart.readline()
        # ausgeben der Variablen command auf
        # der seriellen Schnittstelle wenn
        # diese nicht leer ist
        if len(command.decode()) > 0:
            print(command.decode())
        else
            # wenn ein leerer String empfangen wurde
            # dann soll die Funktion beendet werden
            return
        
        # Wenn der Buchstabe r empfangen wurde UND
        # die Variable led_rot_status ist False, dann ...
        if command.decode() == 'r' and not led_rot_status:
            # Ausgeben der Zeile auf der seriellen Schnittstelle
            print('LED rot ein')
            # umkehren des Signals auf dem Pin der LED
            led_rot.toggle()
            # setzen der Variable led_rot_status auf True
            led_rot_status = True
        # Wenn der Buchstabe r empfange wurde UND
        # die Variable led_rot_status ist True, dann ...
        elif command.decode() == 'r' and led_rot_status:
            # Ausgeben der Zeile auf der seriellen Schnittstelle
            print('LED rot aus')
            # umkehren des Signals auf dem Pin der LED
            led_rot.toggle()
            # setzen der Variable led_rot_status auf False
            led_rot_status = False
        
        # Wenn der Buchstabe g empfangen wurde UND
        # die Variable led_gruen_status ist False, dann ...
        if command.decode() == 'g' and not led_gruen_status:
            # Ausgeben der Zeile auf der seriellen Schnittstelle
            print('LED gruen ein')
            # umkehren des Signals auf dem Pin der LED
            led_gruen.toggle()
            # setzen der Variable led_gruen_status auf True
            led_gruen_status = True
        elif command.decode() == 'g' and led_gruen_status:
            # Ausgeben der Zeile auf der seriellen Schnittstelle
            print('LED gruen aus')
            # umkehren des Signals auf dem Pin der LED
            led_gruen.toggle()
            # setzen der Variable led_gruen_status auf False
            led_gruen_status = False

Wenn wir nun den Code auf den Pi Pico laden, dann können wir mit den Buchstaben r & g die entsprechenden LEDs steuern.

Quellenangabe

Für diesen Beitrag habe ich den englischen Beitrag https://www.instructables.com/Bluetooth-ModuleHC-05-With-Raspberry-Pi-Pico/ als Grundlage verwendet. Dieser Beitrag geht jedoch nur so weit, dass die Daten aus dem Bluetooth Terminal in die Konsole geschrieben wird.

Ein Kommentar

  1. Ich würde gerne einen X-box 360 controller mit dem pico w verbinden – wie kann ich den den paaren wie beim normalen Raspberry 4 b oder zero w? Ich habe auch das Modul H06 – jedoch möchte ich nicht die App auf dem Handy sondern die Console nutzen. Wie geht das?

Kommentar hinterlassen

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