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 W: WLAN-Wetterstation mit DHT22

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:

  1. Messen mit dem DHT22
  2. 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:

Frag Elektronik-Kompendium.de

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

Online-Workshop: Programmieren mit dem Raspberry Pi Pico

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

Besuchen Sie unser fast monatlich stattfindendes Online-Meeting PicoTalk und lernen Sie uns kennen. Die Teilnahme ist kostenfrei.

Termine und Newsletter-Anmeldung

 

Elektronik-Sets für das Hardware-nahe Programmieren