Raspberry Pi Pico W: WLAN-Wetterstation mit DHT22
Eine Wetterstation ist ein Gerät, das verwendet wird, um verschiedene meteorologische Daten zu messen und aufzuzeichnen. Beispielsweise Temperatur und Luftfeuchtigkeit. Mit diesen Daten kann das aktuelle und zukünftige Wetter prognostiziert werden.
Wir wollen mit dem Temperatur- und Luftfeuchtigkeitssensor DHT22 die aktuellen Daten für Temperatur und Luftfeuchtigkeit messen und mit Hilfe des Raspberry Pi Pico W im eigenen WLAN auf einer Webseite anzeigen.
Wenn Du keinen Raspberry Pi Pico W mit WLAN-Funktion hast, dann kannst Du Dir die Daten auch auf der Kommandozeile der Thonny Python IDE anzeigen lassen.
Aufbau und Bauteile
Raspberry Pi Pico | DHT22 | AM3202 | |
---|---|---|---|
Pin 36 | 3V3 +3,3V | 1 (VCC) | 1 (VCC) |
Pin 20 | GPIO 15 | 2 (Data) | 2 (Data) |
Pin 18 | GND | 4 (GND) | 3 (GND) |
Schnell und einfach alle Bauteile zusammen bestellen
Programmcode
Es gibt 2 Parameter, die individuell konfiguriert werden MÜSSEN:
- wlanSSID: Das ist der WLAN-Name, mit dem sich der Raspberry Pi Pico W verbinden soll.
- wlanPW: Das ist das WLAN-Passwort für die Authentifizierung an dem zu verbindenden WLAN.
Im Programmcode existieren 2 Funktionen:
- Messen mit dem DHT22
- Verbindung mit dem WLAN aufbauen
Zuerst wird die Verbindung mit dem WLAN hergestellt. Dach wird der Server gestartet und anschließend in einer Endlos-Schleife die Zugriff auf den Webserver verarbeitet. Innerhalb dieser Schleife wird eine Messung ausgelöst, wenn ein Zugriff stattgefunden hat. Die Daten werden entweder als Webseite geliefert oder nur die Werte, wenn sie explizit angefragt wurde.
# Bibliotheken laden from machine import Pin import network import time import socket from dht import DHT22 # WLAN-Konfiguration wlanSSID = 'WLANNAME' wlanPW = 'WLANPASSWORT' network.country('DE') # Initialisierung: Status-LED led_onboard = Pin('LED', Pin.OUT, value=0) # Initialisierung GPIO und DHT22 time.sleep(1) dht22_sensor = DHT22(Pin(15, Pin.IN, Pin.PULL_UP)) # HTML-Datei html = """<!doctype html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><link rel="shortcut icon" href="data:"><title>Raspberry Pi Pico</title></head><body><h1 align="center">Deine Wetterstation</h1><hr><p><b>Temperatur:</b> TEMPERATURE °C</p><p><b>Luftfeuchtigkeit:</b> HUMIDITY % RH</p><hr><p align="center">DEMO von Elektronik-Kompendium.de</p></body></html>""" # Funktion: DHT22 abfragen def dht22Measure(): global temperature, humidity # Messung durchführen dht22_sensor.measure() # Werte lesen temperature = dht22_sensor.temperature() humidity = dht22_sensor.humidity() # Funktion: WLAN-Verbindung def wlanConnect(): wlan = network.WLAN(network.STA_IF) if not wlan.isconnected(): print('WLAN-Verbindung herstellen') wlan.active(True) wlan.connect(wlanSSID, wlanPW) for i in range(10): if wlan.status() < 0 or wlan.status() >= 3: break print('.') time.sleep(1) if wlan.isconnected(): print('WLAN-Verbindung hergestellt') netConfig = wlan.ifconfig() print('IPv4-Adresse:', netConfig[0]) print() return netConfig[0] else: print('Keine WLAN-Verbindung') print('WLAN-Status:', wlan.status()) print() return '' # WLAN-Verbindung herstellen ipv4 = wlanConnect() # HTTP-Server starten if ipv4 != '': print('Server starten') addr = socket.getaddrinfo(ipv4, 80)[0][-1] server = socket.socket() server.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) server.bind(addr) server.listen(1) print('Server hört auf', addr) print() print('Beenden mit STRG + C') print() # Auf eingehende Verbindungen hören while True: try: conn, addr = server.accept() print('HTTP-Request von Client', addr) request = conn.recv(1024) #print('Request:', request) request = str(request) request = request.split() print('URL:', request[1]) # Sensor abfragen dht22Measure() # URL auswerten if request[1] == '/temperature': response = str(temperature) elif request[1] == '/humidity': response = str(humidity) else: # Daten formatieren: Nachkommastellen kürzen und Punkt gegen Komma tauschen temperature = '{:.2f}'.format(temperature).replace('.',',') humidity = str(humidity).replace('.',',') # Daten für Response aufbereiten response = html response = response.replace('TEMPERATURE', temperature) response = response.replace('HUMIDITY', humidity) # HTTP-Response senden conn.send('HTTP/1.0 200 OK\r\nContent-type: text/html\r\n\r\n') conn.send(response) conn.close() print('HTTP-Response gesendet') print() except OSError as e: print(e) break except (KeyboardInterrupt): break try: conn.close() except NameError: pass try: server.close() print('Server beendet') except NameError as e: print(e)
Weitere verwandte Themen:
- Raspberry Pi Pico W als Webserver
- Raspberry Pi Pico W: Online-Wetterstation mit Vorhersage (DWD-API)
- Raspberry Pi Pico: Temperatur messen mit dem DHT22/AM2302
- Raspberry Pi Pico: Temperatursensoren DHT11, DHT22 und DS18B20 vergleichen
- Raspberry Pi Pico W: Sensor-Daten per E-Mail senden
Teilen:
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)