Titelbild für Wetterstation ⚡☃️☀️ mit Homeserver und Display 📺

Projektziel und Funktionen

Das Ziel des Projekts war weniger das Ergebniss als vielmehr der Weg dorthin. Zusammenführen der einzelnen Projektbestandteile wie Webserver, integration der Sensoren und natürlich das Programmieren des Microcontrollers. In jedem dieser Bereiche habe ich etwas neues gelernt, das wichtigste war jedoch ein Verständniss dafür zu entwickeln wie all diese Systeme zusammen arbeiten. Die Grundzüge des Projekts waren Schlussendlich also:

  • Auslesen eines Temparatursensors mittels Pi Pico W.
  • Anzeige der Werte auf Display, sowie auf einer Webseite im LAN.
  • Sensordaten sollen geloggt werden, z.B. in json, csv Datei.
  • Ausserdem ein Button zum Ein/Ausschalten des Displays.

Herangehensweise

Da es schon massig Anleitungen und Tutorials online gibt verzichte ich auf eine Schritt für Schritt Anleitung. Stattdessen einfach nur eine kurze Zusammenfassung.

Frame standing
Hier das Design der Homepage mit den Sensordaten.

Da ich schon lange mit Django arbeite entschied ich mich für MICRODOT als "Miniwebserver". Die Verfügbarkeit von Jinja als templating engine war Hauptausschlaggebend für mich. Jinja ist relativ einfach zu verstehen aber doch flexibel genug für komplexe Projekte.😉

Eines der Dinge bei welchen ich dazu tendiere es immer zu sehr zu überdenken ist das aufteilen unterschiedlicher Codestrukturen. Wenn ich den Code zu stark splitte, komme ich leicht durcheinander was die Imports betrifft, schreibe ich zuviel in main.py wird's da wieder unübersichtlich. Treestructure of project Damit die main.py so übersichtlich wie möglich bleibt habe ich z.B. das Pinlayout und andere Variablen in eine seperate setup.py gepackt, ebenso die Funktion zum aufbauen der Wifiverbindung. Die microdot und Hardwarebezogenen Dateien sind sowieso meist seperat. Dabei ist dann die treestructure wie oben zu sehen entstanden. Ich hätte gerne noch die disp_update() Funktion sowie die Sensorbezogenen Funktionen ausgegliedert, allerdings wollte ich das Projekt erstmal soweit fertigstellen das alles funktioniert.

Frame standing

Eines der seltsamsten Probleme war ein "EADDRINUSE" error welcher öfter auftrat sobald ich den PiPico neu gestartet habe. Meine Lösung war dann die WiFi Initialisierung abzuändern zu:


    wifi.active(False) # Stellt reset sicher
    time.sleep(0.3)    # Kurze sleepphase
    wifi.active(True)  # WiFi wieder aktivieren
    wifi.config(pm=0xa11140) # Schaltet die Energiesparfunktionen aus
Ein weiteres 'Problem' das während de ersten Phase der Entwicklung auftrat war eines das mich über mehrere Tage beschäftigt hatte. Manchmal wollte sich der Pico einfach nicht mit meinem WLAN verbinden. Ich kann garnicht sagen wie oft ich die hinterlegten Zugangsdaten für das WiFi überprüft habe, oder wie lange ich den Code Zeile für Zeile langsam und bedächtig immerwieder überprüft habe. Es hat nichts geholfen, mal hat die Verbindung geklappt, mal wieder nicht ohne das Änderungen vorgenommen wurden. Besonders seltsam war das sich der Pico mit meinem Handy Hotspot immer Problemlos verbunden hat, nur eben nicht mit meinem WLAN. Irgendwann kam ich dann auf die Lösung.

Da sich alle meine anderen Geräte wie Laptop oder Handy immer problemlos mit dem Heimwifi verbunden haben, war die Frage: "Gibt es einen Unterschied wie sich der Pico, und meine anderen Geräte mit dem WLAN verbinden?". Die Antwort darauf war: 2.4GHz und 5GHz. All meine anderen Geräte nutzen das 5GHz WLAN, da der Pico nur 2.4GHz beherrscht war es also das einzige Gerät welches diese Frequenz nutzte. Das war mir dann Anhaltspunkt genug um nach kurzer Recherche herauszufinden das meine FritzBox 7590 einen bekannten Defekt hat der gelegentilich auftritt. Ein Spannungswandler neigt wohl dazu nach einiger Zeit durchzubrennen. Dies führt dann dazu dass das 2.4GHz WiFi ein sehr schwaches, und manchmal auch garkein Signal sendet. Da wie gesagt alle meine anderen Geräte 5GHz nutzten, war mir das vorher einfach nicht aufgefallen.

Frame standing

Alles in allem war es ein super interessantes Projekt bei dem ich viel über Netzwerkverbindungen, das Sammeln von Echtweltdaten und vor allem darüber wie wichtig timing in der Zusammenarbeit von Hard- und Software ist. Für meine nächste Arbeit möchte ich auf jeden fall mehr Ordnung und Codestruktur von Anfang an. So sehr ich auch den Ansatz von einfach mal probieren mag, so sehr hab ich aber auch gemerkt wie wichtig klare Strukturen sind.