Raspberry Pi Pico W als schnurloser Taster (mit MQTT)

Geräte und Funktionen sind zur lokalen Bedienung in der Regel mit einem Taster verbunden. Meist existiert dazu eine elektrische Verbindung. Die Idee ist, ein Gerät oder eine Funktion aus der Ferne zu schalten. Dazu brauchen wir einen Taster, der mit einem Funknetzwerk verbunden ist. Hier in diesem Fall mit einem WLAN.

Wir nutzen hier einen Raspberry Pi Pico W als schnurlosen bzw. drahtlosen Taster, der damit ein Aktor in Deinem Smart Home sein kann.

MQTT

Message Queue Telemetry Transport, kurz MQTT, ist ein äußerst einfach aufgebautes Kommunikationsprotokoll für den Nachrichtenaustausch zwischen Geräten in Umgebungen mit geringer Bandbreite und instabilen Verbindungen. Typischerweise lassen sich mit MQTT Sensordaten, wie Temperatur oder Füllstände, übertragen. Aber auch klassische Nachrichten oder Kurzmitteilungen.

Die Kommunikation erfolgt über das MQTT-Protokoll mit einem MQTT-Broker, der den Schaltzustand entgegennimmt. Hierzu ist ein MQTT-Broker im eigenen Netzwerk notwendig. Dafür eignet sich zum Beispiel ein Raspberry Pi.

Aufbau und Bauteile

Raspberry Pi Pico W als schnurloser Taster

MQTT-Bibliothek für MicroPython

Die Kommunikation des Raspberry Pi Pico als MQTT-Publisher oder -Subscriber wird von MicroPython nicht direkt unterstützt. Dazu ist für MicroPython eine externe Bibliothek notwendig, die heruntergeladen und auf dem Pico gespeichert werden muss. Als MQTT-Bibliothek verwenden wir „umqtt.simple“.

Damit der folgende Programmcode die Bibliothek findet, muss die heruntergeladene Datei auf Deinem Raspberry Pi Pico mit dem Dateinamen „umqtt_simple.py“ gespeichert sein.

MQTT-Broker

Wenn man nun mit MQTT experimentieren will, braucht man mindestens einen Publisher, einen Broker und einen Subscriber. Man braucht also für eine Teststellung mindestens drei Geräte oder Software-Implementierungen.
Wenn man keinen eigenen MQTT-Broker hat, kann man den Test-Broker mit der Adresse test.mosquitto.org verwenden. Allerdings ist die Verbindung in der Regel unsicher und der Server unter Umständen nicht verfügbar oder überlastet. Der ist zum Testen, aber nicht für den Produktiv-Betrieb geeignet.

Programmcode

Im folgenden Programmcode wird zuerst eine Verbindung mit einem WLAN hergestellt. Hierzu sind die Zugangsdaten korrekt einzutragen.

  • wlanSSID: Das ist der Name des WLANs zu dem eine Verbindung hergestellt werden soll.
  • wlanPW: Das ist das WLAN-Passwort von dem WLAN.

Desweiteren muss hier die Adresse des MQTT-Brokers hinterlegt werden, der sich in Deinem lokalen Netzwerk befinden sollte.

  • mqttBroker: Hier muss die IPv4-Adresse des MQTT-Brokers bzw. -Servers im Netzwerk eingetragen sein.
  • mqttClient: Das ist der Name des MQTT-Clients.
  • mqttUser: Benutzername für den Client zur Authentifizierung gegenüber dem MQTT-Broker. (optional)
  • mqttPW: Passwort zum Benutzernamen für die Authentifizierung. (optional)
  • mqttTopic: Bezeichner für den Wert, der an den Broker übermittelt wird. Standardmäßig ist der Bezeichner „button“ und der übermittelte Wert „pressed“.

Nach dem WLAN-Verbindung hergestellt und der Taster initialisiert wurde, wird in einer Endlos-Schleife der Taster-Zustand abgefragt. Wenn er betätigt wird, wird die Verbindung zum MQTT-Broker hergestellt und ein „Publish“ ausgelöst. Danach wird die MQTT-Verbindung beendet und der Programmcode wartet wieder auf die Betätigung des Tasters.

# Bibliotheken laden
import machine
import network
import rp2
import utime as time
from umqtt_simple import MQTTClient

# WLAN-Konfiguration
wlanSSID = 'WLANSSID'
wlanPW = 'WLANPASSWORD'
rp2.country('DE')

# MQTT-Konfiguration
mqttBroker = '192.168.0.10'
mqttClient = 'pico'
mqttUser = 'mqttuser'
mqttPW = ''
mqttTopic = b"picobutton"

# Status-LED für die WLAN-Verbindung
led_onboard = machine.Pin('LED', machine.Pin.OUT, value=0)

# Funktion: WLAN-Verbindung herstellen
def wlanConnect():
    wlan = network.WLAN(network.STA_IF)
    if not wlan.isconnected():
        print('WLAN-Verbindung herstellen:', wlanSSID)
        wlan.active(True)
        wlan.connect(wlanSSID, wlanPW)
        for i in range(10):
            if wlan.status() < 0 or wlan.status() >= 3:
                break
            led_onboard.toggle()
            print('.')
            time.sleep(1)
    if wlan.isconnected():
        print('WLAN-Verbindung hergestellt / WLAN-Status:', wlan.status())
        print()
        led_onboard.on()
    else:
        print('Keine WLAN-Verbindung / WLAN-Status:', wlan.status())
        print()
        led_onboard.off()

# Funktion: Verbindung zum MQTT-Server herstellen
def mqttConnect():
    if mqttUser != '' and mqttPW != '':
        print("MQTT-Verbindung herstellen: %s mit %s als %s" % (mqttClient, mqttBroker, mqttUser))
        client = MQTTClient(mqttClient, mqttBroker, user=mqttUser, password=mqttPW)
    else:
        print("MQTT-Verbindung herstellen: %s mit %s" % (mqttClient, mqttBroker))
        client = MQTTClient(mqttClient, mqttBroker)
    client.connect()
    print()
    print('MQTT-Verbindung hergestellt')
    print()
    return client

# WLAN-Verbindung herstellen
wlanConnect()

# Button initialisieren
btn = machine.Pin(15, machine.Pin.IN, machine.Pin.PULL_UP)
print('Taster wartet auf Betätigung')

# Funktion zur Taster-Auswertung
while True:
    time.sleep_ms(100)
    if btn.value() == 0:
        print()
        print('Taster gedrückt')
        print()
        try:
            client = mqttConnect()
            client.publish(mqttTopic, b"pressed")
            print("An Topic %s gesendet" %  mqttTopic)
            print()
            client.disconnect()
            print('MQTT-Verbindung beendet')
        except OSError:
            print()
            print('Fehler: Keine MQTT-Verbindung')
        # Entprell-Pause
        time.sleep_ms(200)

Der Programmcode läuft im Prinzip endlos, sofern kein Fehler produziert wird. Mit STRG + C kann man den Programmcode in Thonny regulär beenden.

Weitere verwandte Themen:

Teilen:

Hardware-nahes Programmieren mit dem Raspberry Pi Pico und MicroPython

Elektronik-Set Pico Edition

Das Elektronik-Set Pico Edition ist ein Bauteile-Sortiment mit Anleitung zum Experimentieren und Programmieren mit MicroPython.

  • LED: Einschalten, ausschalten, blinken und Helligkeit steuern
  • Taster: Entprellen und Zustände anzeigen
  • LED mit Taster einschalten und ausschalten
  • Ampel- und Lauflicht-Steuerung
  • Elektronischer Würfel
  • Eigene Steuerungen programmieren

Elektronik-Set jetzt bestellen Online-Workshop buchen

Programmieren mit dem Raspberry Pi Pico
Online-Workshop

Hardware-nahes Programmieren mit dem Raspberry Pi Pico

Gemeinsam mit anderen und unter Anleitung experimentieren? Wir bieten unterschiedliche Online-Workshops zum Raspberry Pi Pico und MicroPython an. Einführung in die Programmierung, Sensoren programmieren und kalibrieren, sowie Internet of Things und Smart Home über WLAN und MQTT.

Online-Workshop buchen

Für Ihre Fragen zu unseren Online-Workshops mit dem Raspberry Pi Pico besuchen Sie unseren PicoTalk (Online-Meeting). (Headset empfohlen)

Zum PicoTalk

 

Elektronik-Set Pico Edition
Elektronik-Set Pico Edition

Raspberry Pi Pico: Hardware-nahes Programmieren mit MicroPython

Leichter Einstieg mit All-in-one-Set zum sofort Loslegen, um eigene Steuerungen programmieren.

Elektronik-Set jetzt bestellen

 

Elektronik-Set Pico WLAN Edition
Elektronik-Set Pico WLAN Edition

Raspberry Pi Pico W: IoT und Smart Home mit WLAN und MQTT

Betreibe Deinen Raspberry Pi Pico W als drahtloser Sensor in Deinem WLAN, versende E-Mails mit Daten und kommuniziere per MQTT im Internet of Things oder Smart Home.

Elektronik-Set jetzt bestellen

 

Elektronik-Set Sensor Edition
Elektronik-Set Sensor Edition

Erweiterung zu den Elektronik-Sets Pico Edition und Pico WLAN Edition

Elektronik-Set mit den beliebtesten Sensoren zum Messen von Temperatur, Helligkeit, Bewegung, Lautstärke und Entfernung.

Elektronik-Set jetzt bestellen