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.
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.
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.
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.
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.