WiFi Thermo- / Hygro- / Barometer

Um die Luft-Temperatur, -feutche und -druck zu messen, habe ich einen Sensor mit einem Raspberry Pi Pico verbuden mit 3 AAA Batterien betrieben.

Ein Gehäuse, welches ich mit tinkercad.com enworfen und anschliessend mit dem 3D-Drucker gedruckt habe, schliesst alle Bauteile schön ein. Ein Deckel, der schön eng draufsitzt hält gut genug um die Batterien im Gehäuse zu halten.

Wer das Gehäuse bei sich drucken möchte, kann die Files hier downloaden: https://www.printables.com/model/1037401-raspberry-pi-pico-wifi-air-sensor

Beim Sensor handelt es sich um eine Kombination von AHT20 / BMP28 welche Temperatur, relative Luftfeuchtigkeit und den Luftdruck misst. Er wird mit dem I2C interface am Pi Pico verbunden. Das lesen der Messwerte ist so sehr einfach.

Die Bauteile passen exakt in die Aussparungen und werden durch Pins festgehalten. So verrutscht nichts mehr und es braucht keine Schrauben oder Leim, was das Demontieren vereinfacht.

Mit 3 AAA Batterien wird der Pico mit Strom versorgt und hält, sofern man ihn richtig programmiert, viele Tage auch mit aufladbaren Batterien. Wichtig ist, dass man mit machine.lightsleep() den Pico in einen Ruhezustand versetzt, der sehr wenig Energie benötigt.

Die Verkabelung ist sehr einfach, Batteriehalter (es gab leider kein Bild mit 3 Batterien) an VSYS und GND. Den Sensor verbindet man mit einem beliebigen I2C-Kanal. Unten der Python-Code als Beispiel um es nachzubauen. Ich sende alle 5 Minuten die neuen Messwerte an meinen OpenHAB server. Auch die aktuelle Spannung der Stromversorgung wird gemessen zusätzlich zur Wlan-Signalstärke.

import json, ahtx0, bmp280, gc, network, requests, time, machine

vsys = machine.ADC(3)
i2c = machine.I2C(1, scl=machine.Pin(27), sda=machine.Pin(26))
aht20 = ahtx0.AHT20(i2c)
bmp = bmp280.BMP280(i2c, addr=0x77)
header = {"Content-Type":"text/plain"}

while True:

wlan = network.WLAN(network.STA_IF)
wlan.active(True)
wlan.connect("<your_wlan_ssid>", "<your_wlan_password>")
print("Connecting to WLAN")
time.sleep(3)

if wlan.isconnected():

machine.Pin(29, machine.Pin.IN)
x = {
"voltage": round(vsys.read_u16()*3.23*3/65535, 1),
"humidity": int(round(aht20.relative_humidity, 0)),
"temperature": round(aht20.temperature, 1),
"temperature2": round(bmp.temperature, 1),
"pressure": int(round(bmp.pressure/100, 0)),
"wlan_signal": wlan.status("rssi")
}

jsonString = json.dumps(x)
print("jsonString: ", jsonString)

try:
requests.put("http://openhab/rest/items/<item_name>/state", data=jsonString, headers=header, timeout=5)
wlan.active(False)
wlan.deinit()
gc.collect()
machine.lightsleep(5*60*1000)
except Exception as err:
print(f"error: {err}")


Bauteile können hier gekauft werden: