Elektronik und Co

Der Wlan Außensensor

Der montierte Sensor

Die Vorgeschichte:

In den letzten Jahren gibt es immer mehr Artikel zum Thema Iot (Internet of things) und dies übt auch für mich einen gewissen Reiz aus. In den meisten Projektbeschreibungen der Maker Szene werde da irgendwelche Quellcodes für diverse Mikrocontroller-System herunter geladen die irgendwie Daten auf irgendwelche Websites postet die man auf seiner eigenen Seite einbinden kann … . Kann man so machen, möchte ich aber nicht. Natürlich wäre dies ein einfacher Weg gewesen, aber wo wäre da der Lerneffekt geblieben und was mache ich wenn es diese Internetplattform nicht mehr gibt. Was mich bei einigen Projekten persönlich stört ist, dass diese Endlösungen auch öfters auf Breadbords ihr Dasein fristen. Für mich ist ein solches Board super zu entwickeln oder testen von Schaltungen aber nichts für eine Endausbaustufe. Mein Ziel war es nun als “ Iot-Lehrlingsprojekt “ einen Sensor für Temperatur und Luftfeuchte zu bauen, der die Daten via WLan ins Internet stellt. Dieser sollte vom Gehäuse her auch so stabil gebaut sein damit er den Witterungseinflüssen trotzen kann, weiters sollte es auch einen modularen Aufbau haben um das Ganze auch weiter entwickeln zu können.

Die Komponentenauswahl und Herausforderungen:

Als erstes musste eine Kontrollerplattform her welche mit dem heimischen Wlan verbunden werden konnte und noch dazu möglichst klein war. Meine Wahl viel hierbei auf das ESP32-Wroom Board. Um die Sensorik einfach zu halten wählte ich den Kombisensor DHT22 aus, welcher Temperatur und Luftfeuchte messen kann. Zugegeben ist der DHT nicht unbedingt ein Präzisionssensor sonder eher ein Schätzeisen, aber ich möchte in dem Fall ja keine präzise meteorologische Datenaufzeichnung machen. Nun war noch unklar wie die Daten vom Sensor ins Internet und auf die Anzeigeseite kommen. Ich hab mit ein paar Leuten gesprochen die sich beruflich mit Software beschäftigen und ich kam zur Erkenntnis, dass es ohne Datenbank nix werden würde. Aber wie funktioniert das mit der Datenbank, wie kommen die Daten überhaupt da hin , welche Programmiersprachen brauche ich dafür …… Fragen über Fragen. Vorab sei schon mal gesagt ich bin weder ITler noch, Webdesinger oder gar Datenbankadmin und meine Lösung dafür ist für einen Fachmann werde schnell, noch gut oder schön 🙂 . Wie ich die Software-Baustelle gelöst habe erkläre ich später, denn wie alle Automatisierungstechniker so schön sagen :“ Keine Software ohne Hardware!“.

Das Gehäuse und der Hardware-Aufbau:

Da ich seit kurzem der stolze Eigentümer eines Prusa MK3s 3D Druckers bin sollte das Gehäuse auch mit diesem gefertigt werden. Ich muss sagen, dabei hab ich was die Konstruktion angeht einiges gelernt. Es ist eben keines Wegs so, dass man da einfach was zeichnet und das fällt dann einfach bei so einem Drucker unten raus. Die meisten drucken von Beginn an mit PLA (ich ebenfalls), welches aber den Nachteil hat nicht sonderlich stabil gegenüber von Witterungseinflüssen zu sein. Deswegen nahm ich für das Gehäuse PTEG, dass natürlich auch andere Druckeigenschaften hat und für mich auch Neuland war. Meine Drucktemperaturen waren 240 Grad für das Hot-End und 70 Grad für das Heizbett. PTEG „schmiert“ auch beim Drucken mehr als PLA und war interessanter Weise nicht so maßhaltig. Da die Komponenten untereinander Verschraubt werden sollten habe ich bei der Konstruktion Muttern eingelassen. In der Slicer-Software habe ich dann vor der nächsten Schicht einen Pause Befehl gesetzt um die Muttern einsetzen zu können.

Eine andere Sache die ich dabei gelernt habe ist, bereits in der Konstruktion darauf zu achten das kaum Stützstruktur notwendig ist. Leider beinhaltete dieser Lernprozess das mehrfache zeichnen und drucken mancher Teile. Das ganze wurde übrigens in Autocad 2018 gepinselt. Als erstes war die Außenhaut dran…

Danach folgte der Geräte / Sensorträger wobei ich darauf geachtet habe, dass alle Komponenten demontierbar sind. Der ESP steckt in einer Buchsenleiste und ist mit dem Träger verschraubt. An der Stelle wo die Anbauverschraubung sitzt passt auch der USB Stecker zum Programmieren durch. Ich wünschte ich könnte sagen :“ Da ich so ein toller Konstrukteur bin habe ich das genau so geplant „, doch leider war das nur ein glücklicher Zufall .

An der Unterseite befinden sich noch 3 Led´s als Statusanzeige um zu sehen, was da grad vor sich geht. Die Rote meldet eine Störung, die Blaue das die WLan-Verbindung steht und die Grüne leuchtet wenn die Daten übertragen werden.

Die Softwareherausforderungen:

Als erstes galt es zu Verstehen wie man eine MySQL Datenbank erzeugt, wie sie aufgebaut ist und wie man sie mit Daten befüllen kann. Ich werde das in dem Fall nicht Vorbeten, denn es gibt da viele YouTube Tutorials die das besser vermitteln können als ich. Nun musste ich lernen wie man diese Datenbank mit werten beschicken kann. Zum Testen wollte ich das ohne den ESP machen um zu sehen ob es funktioniert oder nicht. In dem Fall war Google wieder sehr hilfreich. Ziel war es eine PHP-Seite zu kreieren die über den Get-Befehl die Zusatzinformationen welche in der Adressleiste eingetragen werden auszuwerten und an die DB zu schicken. Die Struktur der Adresseingabe sieht dann z.B. so aus www.deineurl.xy/datenseite.php?var1=nutzdaten1?var2=nutzdaten2….. . Diese Seite schreibt dann bei jedem Aufruf die Daten in die DB. Nachdem das funktionierte, erstellte ich eine Testseite welche den Inhalt der Datenbank anzeigen konnte. Auch hier führen wieder viele Wege nach Rom und Google war mein Wegweiser. Schwierig war dabei heraus zu finden welche Befehle zu meiner aktuellen Version der Datenbank passten.

Nun ging es darum dem Controller bei zu bringen wie er die Daten vom DHT22 mit über die vorher erklärte Methode an die Datenbank schickt. Grundsätzlich ist das mit der Wifi Libary der IDE ganz einfach. Diese macht Grundsätzlich einmal die Verbindung mit dem Wlan und mit dem HTTPClient kann man über den Befehlt http.beginn(url bla bla) Seiten aufrufen und zur Kontrolle mit http.get() die Antwort der Seite abrufen (z.B. 200 = alles o.k. , 404 = Seite nicht gefunden usw.) . Aber wie erzeugt man die URL die Aufgerufen wird? Ich habe aus den fixen Teilen der Adresse und der Sensorvariablen einfach einen String zusammengefügt der dann dort eingetragen wird. Um das Ganze in eine Verständliche Form zu bringen gibt es hier ein Ablaufdiagramm:

Die Probleme mit dem ESP32 Wroom Board:

Ich hab da schon sehr viel Zeit und Kopfweh in die Sache investiert, da macht es einen doch sehr grantig wenn das Teil dann oft Aussetzer hat. Aus einem nicht erkennbaren Grund verweigerte der ESP plötzlich seinen Dienst. Über Wifi.staus() habe ich herausgefunden das meine Internetverbindung instabil war. Der gelieferte Wert 3 bedeutet verbunden und 6 nicht verbunden. Das Problem habe ich dann behoben. Als Energiesparmaßnahme habe ich den Controller in den Tiefschlaf geschickt aus dem er nach viele Zyklen nicht mehr erwachte. Dies scheint ein öfters auftretendes Problem zu sein, also habe ich ihn mit einem einfachen delay() bis zum nächsten Durchlauf warten lassen. Das ging 2 Tage lang gut bis er plötzlich wieder abgestürzt ist . Die Diagnose Led´s bleiben einfach finster. Nach einem Power on reset, lief er für einige Stunden wieder normal, dann war es wieder aus. Ich dachte es würde der Puffer voll laufen deshalb habe ich alles was mit Serial.print() geschickt wurde deaktiviert. Leider ohne erfolg. Habe dann nach einer Watchdog funktion gesucht die einen Reset auslöst wenn der Zyklus hängen bleibt. Leider scheint diese Funktion in der Arduino IDE so nicht verfügbar zu sein und auf einen internen Timer will ich mich nicht verlassen da keiner sagen kann ob der in dem Fall weiter läuft. Also habe ich zuerst zu einer „rustikalen“ Reset-Variante gegriffen.

Die Zeitschaltuhr unterbrach 4 mal täglich die Stromversorgung und eliminiert so das Problem. Ich weiß das ist keine schöne Lösung. Eigentlich wollte ich einen Watchdog Timer bauen der einen Ausgang der zyklisch auf High gesetzt wird überwacht und den Timer zurück setzt. Aber ehrlich gesagt vergeht mir die Freude bei solchen Problemen daran. Ich habe dann doch noch ein paar Stunden investiert. Ich kann ehrlich gesagt nicht sagen ob es an meinem Netzwerk liegt oder an etwas im ESP. Ich habe alle nicht nötigen Unterteile der Wifi.lib entfernt. Übergebleiben sind nur Wifi.h, WifiClient.h, WifiSTAT.h und der HTTPClient.h. . Den WifiMode habe ich im Setup auf Station gestellt, also so : WiFi.mode(WIFI_STA); . Die Verbindung baue ich jedes Mal beim Durchlauf von Loop auf und trenne sie am ende der Loop wieder bevor er in die Pause läuft. Bis jetzt funktioniert es mal 😉

Wenn jemand etwas vom Quellcode haben will kann er sich gerne melden. Aber wie gesagt, das ist sicher nicht grad professionell.

Onlineanzeige der Messwerte:

Die Seite auf der die Messwerte angezeigt werden wird alle 60 Sekunden aktualisiert und ist erreichbar unter:

http://www.wurzelausdrei.at/balkonwetter.php

Fazit:

Es ist schon interessant welch für mich großer Aufwand dahintersteckt ein paar Messwerte ins Internet zu bekommen ohne vorgefertigte Tools zu verwenden. Noch dazu wenn man bedenkt dass das Ganze was ich da gebastelt hab relativ billig anmutet. Der Lerneffekt war auf jeden Fall da. Trotzdem zweifle ich dennoch daran ob Iot für alles und jeden wirklich sinn macht. Ich sehen das auch immer wieder bei uns in der Industrie wo mit dem berühmten Industrie 4.0 eigentlich mehr Datenfriedhöfe produziert werden als effektive Nutzdaten. Von der Klimaschädlichkeit durch den erhöhten Energieverbrauch wollen wir da gar nicht erst reden. Ich finde Digitalisierung macht nur dann sinn wenn man sie mit Verstand betriebt und sich gut überlegt : “ Was brauche ich wirklich?“, aber hineinschnuppern ist auf jeden Fall interessant ……

Schreibe einen Kommentar

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