Raspberry Pi Pico W als schnurloses Thermometer (mit MQTT)
Wenn ein Raspberry Pi Pico als Sensor verwendet wird, der irgendwelche Werte erfasst, dann möchte man diese Daten in irgendeiner Weise aus dem System herausbekommen.
Bei einem Raspberry Pi Pico W mit WLAN-Funkchip könnte man die Daten per WLAN an eine Gegenstelle übertragen.
Beispielhaft wollen wir die Daten des integrierten Temperatur-Sensors an einen MQTT-Broker übertragen.
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 Temperaturwert entgegennimmt. Hierzu ist ein MQTT-Broker im eigenen Netzwerk notwendig. Dafür eignet sich zum Beispiel ein Raspberry Pi.
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 „picotemp“ und der übermittelte Wert die ermittelte Temperatur.
Nach dem WLAN-Verbindung hergestellt und der Taster initialisiert wurde, wird in einer Endlos-Schleife die Temperatur ermittelt. Dann wird die Verbindung zum MQTT-Broker hergestellt und ein „Publish“ ausgelöst. Danach wird die MQTT-Verbindung beendet.
# Bibliotheken laden import machine import network import time from umqtt_simple import MQTTClient # WLAN-Konfiguration wlanSSID = 'WLANSSID' wlanPW = 'WLANPASSWORD' network.country('DE') # MQTT-Konfiguration mqttBroker = '192.168.0.10' mqttClient = 'pico' mqttUser = 'mqttuser' mqttPW = '' mqttTopic = b"picotemp" # Status-LED für die WLAN-Verbindung led_onboard = machine.Pin('LED', machine.Pin.OUT, value=0) # Initialisierung des Sensors sensor_temp = machine.ADC(4) # Funktion: Temperatur abrufen und umrechnen def getTemp(): read = sensor_temp.read_u16() spannung = read * 3.3 / (65535) temperatur = 27 - (spannung - 0.706) / 0.001721 return temperatur # 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() # Funktion zur Taster-Auswertung while True: myValue = str(getTemp()) try: client = mqttConnect() client.publish(mqttTopic, myValue) print("An Topic %s gesendet: %s" % (mqttTopic, myValue)) print() client.disconnect() print('MQTT-Verbindung beendet') print() except OSError: print() print('Fehler: Keine MQTT-Verbindung') print() # 60 Sekunden warten time.sleep(60)
Der Programmcode läuft im Prinzip endlos, sofern kein Fehler produziert wird. Mit STRG + C kann man den Programmcode in Thonny regulär beenden.
Mehr Informationen zur Temperaturmessung
Temperatur messen ist eine beliebte Mikrocontroller-Anwendung. Das hat durchaus auch praktische Relevanz. Es gibt viele Anwendungen, bei denen Motoren, Pumpen, Heizungen und Lüfter temperaturabhängig geschaltet werden.
Der im Pico integrierte Temperatursensor ist allerdings nicht zum Messen einer Raum-Temperatur eignet. Er misst die Temperatur des Picos, die von der Wärmeentwicklung des Mikrocontrollers beeinflusst wird. Für eine Temperatur-Regelung ist ein externer Temperaturfühler notwendig.
- Raspberry Pi Pico: Temperatur messen
- Raspberry Pi Pico: Temperatur mit dem integrierten Temperatursensor messen und anzeigen
Weitere verwandte Themen:
- Raspberry Pi Pico W als MQTT-Publisher
- Raspberry Pi Pico W als MQTT-Subscriber
- Raspberry Pi Pico W als schnurloser Taster (mit MQTT)
- Raspberry Pi Pico W als fernsteuerbarer Schalter (mit MQTT)
- Raspberry Pi Pico W als WLAN-Client
Frag Elektronik-Kompendium.de
Hardware-nahes Programmieren mit dem Raspberry Pi Pico und MicroPython
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
Online-Workshop: 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.
Für Ihre Fragen zu unseren Online-Workshops mit dem Raspberry Pi Pico besuchen Sie unseren PicoTalk (Online-Meeting). (Headset empfohlen)