Schwimmschalter-Zustand über Raspberry Pico W Server abfragen

In einem älteren Beitrag habe ich gezeigt, wie man mit einer einfachen Regenfasspumpe sich eine automatisierte Bewässerung im Garten aufbauen kann. Das ist eine günstige Lösung um Wasser zu sparen. Ich habe damals auch gezeigt, wie man über eine API ermitteln kann, wann ein guter Zeitpunkt zum Gießen ist. Das Problem dabei war aber, dass man nicht herausfinden konnte, wie viel noch in der Tonne ist oder ob diese vielleicht sogar ganz leer ist. Wie man das machen kann möchte ich hier noch zeigen.

Ob die Tonne leer ist kann man mit einem Schwimmschalter und einem Raspberry Pico W prüfen und dann in das Skript zur Überprüfung ob ein guter Zeitpunkt zum Bewässern ist, einbauen.

Man braucht:

  • Raspberry Pico W
  • Schwimmschalter (gibt es echt billig)
  • Stromversorgung und passendes USB Kabel für den Raspberry Pico W
Schwimmschalter
Schwimmschalter aus China

So ein Schwimmschalter ist ein total einfacher Reed Schalter. Wenn er im Wasser ist und schwimmt, dann wird der Schwimmer nach oben gedrückt und der Schaltkreis ist offen. Wenn er trocken liegt, wird der Schwimmer durch die Erdanziehung nach unten gezogen und der Schaltkreis wird geschlossen.

Den Raspberry Pico brauchen wir um den Schalterzustand abzufragen und über einen kleinen eingebauten (embedded) Server bereit zu stellen.

Den Raspberry Pico richtet man erstmal ein wie hier beschrieben. Dann installiert man die Bibliothek phew! in Thonny. Das geht wenn der mit der Firmware geflashte Pico über USB-Kabel am Rechner steckt in Thonny über Werkzeuge -> Verwaltete Pakete. Dort danach suchen und installieren. Außerdem hier noch das Paket picozero installieren.

Nun erstellt man für den Pico eine main.py und schreibt dort den Code hier rein:

from machine import Pin
import time
from phew import server, connect_to_wifi

wifi_ssid= "xxyyy"
wifi_pw = "xxxyyy"

button = Pin(14, Pin.IN, Pin.PULL_DOWN)

def over_under_check():
    if button.value():
        return "Over Water"
    else:
        return "Under water"

def bootstrap():
    ip = connect_to_wifi(wifi_ssid, wifi_pw)
    if ip is not None:
        print("Get status from: http://"+ip+"/status \n")
       
@server.route("/status", methods=["GET"])
def send_status(request):
    stat = over_under_check()
    return stat, 200


@server.catchall()
def catchall(request):
  return "Not found", 404


bootstrap()
server.run()

Er liegt auch auf Github. Ihr müsst nuch Eure WLAN Daten eingeben. Das Skript startet mit phew! einen Server und zeigt dann die URL an über die man den Status des Schalters abfragen kann.

Nun Thonny stoppen und mal den Pico vom PC abstecken. Wir verkabeln ihn nun mit dem Schwimmschalter. Nun verbindet man den Schwimmschalter wie hier gezeigt mit dem Pico. Ein Wiederstand dazwischen ist nicht nötig, da wir im Code mit Pin.PULL_DOWN softwareseitig einen Pulldown Wiederstand setzen. Wer mehr zu Pullup und Pulldown Wiederständen erfahren will kann das hier tun.

Jetzt mal wieder am PC anstecken und Thonny öffnen. Dort das main.py laufen lassen und auf den Output warten. Hier steht die URL mit der IP über die man den Status des Schwimmschalters abfragen kann. Im Router legt man nun für diese IP fest, dass immer die gleiche an das Gerät vergeben werden soll. Dann kann man das auch ohne PC besser nutzen, da die IP sich nun nicht ändert.

Jetzt einfach mal den Schwimmschalter mit den Fingern hoch bewegen und die URL im Browser aufrufen. Es sollte der Status erscheinen. Wenn man den Schwimmschalter in die andere Richtung gedrückt hat und wieder im Browser die Adresse aufruft, sollte sich der Status ändern.

Jetzt kann man nach Stop in Thonny auch das Ding mal mit einem Netzteil betreiben. Sollte auch gehen und auch im Wasser.

Test im Wasserbad

Wir haben nun einen Schwimmschalter, den man über HTTP abfragen kann. Wie man das verlötet in die Regentonne hängt und für die automatische Bewässerung nutzt schreib ich beim nächsten mal.



Als erster einen Kommentar schreiben.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert