Im folgenden Projekt habe ich einen Sensor für Luftfeuchtigkeit und Temperatur mit einem ESP8266 zusammengebaut. Herausgekommen ist ein WLAN-basierter Temperatur und Feuchtesensor, der ein Logfunktion für 24 Stunden mitbringt und eine grafische Darstellung realisiert. Für die aktuelle Zeit ist eine Abfrage des NIST Zeitservers per NTP integriert. Es werden keine Cloud-Dienste verwendet. Alle Daten bleiben lokal.
Das Ziel des Projekts war weiterhin, eine grafische Darstellung zu realisieren ohne einen cloudbasierten Dienst wie thingspeak o.ä. zu nutzen. Die Daten bleiben komplett im lokalen Netz. Es muss auch nicht jeder Nutzer einen eignen Accounts o.ä. anlegen. Für die grafische Darstellung werden die Google Chart APIs verwendet. Damit lassen sich sehr effizient ansprechende Grafiken und Graphen erzeugen – obwohl man eine vergleichsweise kurze html Seite verwendet. Dieses Vorgehen habe ich bisher noch nicht für den ESP8266 gesehen – deshalb der explizite Hinweis darauf.
Selbst Nachbauen:
Ihr braucht nur einen ESP8266 und einen Temperatur und Luftfeuchtesensor AM2301 (auch als DHT21 bekannt). Beides gibt es für jeweils unter 3€ bei ebay aus China. Die Schaltung ist so trivial, dass ich sie erst gar nicht aufmale. Der GPIO2 des ESP8266 wird mit dem gelben Datenkabel des AM2301 verbunden. Rot geht an 3,3V, schwarz an Masse.
Für die Programmierung des ESP8266 und die entsprechende Erweiterung der Arduino Entwicklungsumgebung für den ESP findet Ihr hier Hinweise (klick).
Den Sourcecode für den Temperatur und Feuchter Logger habe ich hier hinterlegt; inkl. verbesserter NTP Abfrage (11/2015): ESP_TH_Logger_V2
(erste Version hier, falls sie jemand sucht: ESP_TH_Logger)
In der ESP_TH_Logger.ino müsst Ihr noch den Namen Eures WIFIs und das Passwort eintragen. Das war es auch schon. Danach solltet Ihr nach ca. 20-30 Sekunden auf per Browser auf den ESP zugreifen können. Nach ca. 1. Minute sollte auch die erste Messung vorliegen. Einfach per Browser auf http://IP-DIE-DER-ESP-IM-NETZ-HAT (also z.B. http://192.168.178.41) zugreifen.
In der ESP_TH_Logger.ino kann man auch noch den Zeitraum einstellen, der geloggt werden soll. Der Code ist auf 24h eingestellt. Das RAM des ESP8266 erlaubt uns ca. 1800 Logeinträge zu halten. Es wird also alle ca. 50 Sekunden eine Messung durchgeführt und gespeichert. Wer den Zeitraum ändern möchte, muss den #define MEAS_SPAN_H suchen. Der Speicher wird rolierend adressiert, so dass immer die letzten 24h (oder was auch immer definiert ist) vorliegen.
Von der Hautpseite kommt man per Link auf die Unterseiten mit einer grafischen Darstellung des Temperatur- und Feuchteverklaufs (Bilder s.o.). Weiterhin ist eine tabellarischen Darstellung verfügbar.
Diese Unterseiten haben eine längere Ladezeit von ca. 10 Sekunden. Das liegt daran, dass bis zu 100kB übertragen werden müssen und der ESP8266 mit 10-20kB pro Sekunde nicht der schnellste Renner ist.
Ihr bekommt Fehlermeldungen beim Übersetzen oder die Zeit wird über NTP nicht erfasst? – Macht gegebenenfalls ein Update Eurer ESP/Arduino Erweiterung.
Ergänzung (09.06.2015):
Aufgrund eines Hinweises von Nick (siehe Kommentare) konnten wir Meßfehler nachweisen, wenn DHT11 oder DH21 (vermutlich auch DHT21) zu nahe am ESP8266 liegen. Vermutlich koppeln HF Felder des ESP8266 in den analogen Meßteil des DHT ein. Bei einem DHT21 konnte ich eine systematische Abweichtung von +1,5 Grad Celsius und -3% rel. Feuchte nachweisen. Eine Distanz von ca. 10cm scheint auszureichen, um das Problem zu vermeiden. Die Messwerte meines DHT21 stimmen dann mit den Werten meiner Wetterstation (WH3080) überein.
Der Code:
Der Code ist zwar lang aber an sich nicht kompliziert. Der AM2301 läuft über die Standard DHT Bibliothek, die man auch über die IDE herunterladen und einbinden kann (Adafruit DHT sensor library Version 1.0.0). Man muss nur einen Timingparameter (Parameter 3) passend einstellen. Die Routinen für NTP und die Erzeugung eines lesbaren Strings aus dem NTP Timestamp sind in den Dateien time_ntp.cpp/.h zu finden.
Wie schon erwähnt wird für die Darstellung der Grafiken die Google Chart API genutzt. Die Dokumentation von Google dazu ist sehr gut. Ich habe die Google Beispiele etwas angepasst und dann in den C++ Code eingebaut.
Dazu noch ein kleiner Tipp. Man muss längere html Code-Fragmente in C++ kompatible Strings verwandeln. Das kann man manuell machen; das ist aber fehleranfällig und nervig. Hier gibt es einen kleinen, aber feinen Online Konvertierungsdienst (Haken bei „split output into multiple lines“ wegnehmen):
http://tomeko.net/online_tools/cpp_text_escape.php?lang=en
Es gibt weiterhin eigentlich nur zu beachten, dass der cpp-Präprozessor bei zu langen Zeilen irgendwann streikt und Fehler wirft. Dann muss man die Zeile eben etwas kürzen und auf mehrere Zeilen verteilen.
Weiterhin ist bei der Programmierung zu beachten, dass man nicht beliebig lange Strings zusammenbauen kann. Das RAM des ESP8266 im im Vergleich zu einem Arduino zwar groß (ca. 30kB frei), aber für eine größere Website viel zu klein. Deshalb werden die langen Tabellen für die Unterseiten in 1kB Blöcken übertragen. Auf diese Weise muss die Website nie vollständig im RAM des ESP8266 liegen.
Dieser Streaming-„Trick“ hat aber einen Nachteil. Es soll ein gültiger HTTP 1.1 Header erzeugt werden. Dieser Header muss die Länge der folgenden Website exakt enthalten. Deshalb erzeugt der Code die langen Tabellen zweimal. Beim ersten Mal wird die Länge ausgerechnet und der String verworfen. Nachdem der Header übertragen wurde, wird die Tabelle dann ein zweites Mal erzeugt und gestreamt. Da der ESP8266 mit 80MHz läuft, ist das aber kein Problem.
Erwähnenswert ist sonst noch, dass man nicht den kompletten Speicher mit Arrays belegen darf. Man muss ca. 8-10kB frei lassen, damit für Stack und die Low-Level Wifi Funktionen noch genügend Speicher frei ist. Der Wert von 10kB im Code ist experimentell ermittelt.
Ansonsten hoffe ich, dass der Code selbsterklärend ist. Falls Ihr Fragen habt, hinterlasst einfach einen Kommentar.
Ergänzung 10.08.2017:
Auf vielfache Nachfrage hier ein Demoprogramm für die lokale Uhrzeit auf Basis einer NTP Abfrage mit automatischer Sommer- & Winterzeitumstellung: https://blog.thesen.eu/lokale-uhrzeit-mit-dem-esp8266-und-einem-ntp-zeitserver-inklusive-sommerwinterzeit/
Hello ,
I got an error by compile the program
Arduino: 1.6.5 Hourly Build 2015/05/24 09:48 (Windows 8.1), Board: „Arduino Nano, ATmega328“
ESP_TH_Logger.ino:54:28: fatal error: user_interface.h: No such file or directory
compilation terminated.
Error compiling.
This report would have more information with
„Show verbose output during compilation“
enabled in File > Preferences.
Can you tell me what I am doing wrong?
Regrads,
Henk
I am wondering about the Board: Arduino Nano. The code is made for the ESP8266.
Please install the extension for ESP8266 for the IDE and set the board to ESP8266.
The user_interface.h should exist within the SDK files for the ESP8266
C:\Users\User\Documents\Arduino\hardware\arduino-esp8266-master\tools\sdk\include
Hi,
vielen Dank für die schöne Umsetzung. Ich habe mit meinem Nachbau nur ein Problem: Ich bekomme nur ganzzahlige Werte (ohne Nachkommastellen) für Temperatur und Feuchtigkeit und kann den Fehler nicht finden. Den Code habe ich unverändert verwendet, nur die Angaben für mein WLAN eingetragen.
Meine Konfiguration:
ESP8266-01 mit DHT11 und der DHT-Bibliothek von Adafruit.
Eventuell ist ja die Lib verkehrt, welche hast Du genommen?
Für Hilfe wäre ich echt dankbar,
Gruß, MacSteven
OK, Problem gefunden: Der DHT11 liefert keine Nachkommastellen. Muss ich mir doch einen DHT22 kaufen…
Danke für den Hinweis. Jetzt wissen wir, dass es auch mit dem DHT11 läuft und DHT21 (s.o.) Nachkommastellen liefert. Damit dürfte auch der DHT22 mit Nachkommastellen laufen; vielleicht kann das ja noch ein Leser bestätigen.
Hallo, heute habe ich diese Software noch einmal angepackt, weil ich mir ein Aussenthermometer plus Feuchtigkeitsmesser auf den Balkon setzen möchte. Nun habe ich es nach einigem Probieren geschafft, einen DHT22 (durch den DHT-Tester im Arduino Bereich! ermittelt) Allerdings habe ich 2 ‚krumme‘ Effekte gefunden. Zum ersten benutze ich Google Chrome, welcher irgendwie Probleme mit fehlender Javascript Unterstützung mitbringt. Da ist wohl der automatische Refresh gestört, so dass ich die HTML Seite unter 192.168.x.x von Hand refreshen muss. Das ist das kleine Übel. Bei den Werten lagen Temperatur und Feuchtigkeit b6ei etwas über 700 ° C und die Feuchtigkeit bei über 800 Prozent. Allerdings liegt es nicht am Sensor – den habe ich mit einem kleinen Arduino sketch einzeln getestet, auch mit dem ESP8266, so dass ich Typ und den SDA Anschluss herausbekommen habe. Der DHT22 liefert also korrekte Werte . Ich habe mir geholfen, indem ich einen Divisor in die Zeilen … if (millis()>=ulNextMeas_ms)
{
ulNextMeas_ms = millis()+ulMeasDelta_ms;
pfHum[ulMeasCount%ulNoMeasValues] = (dht.readHumidity()/18);
pfTemp[ulMeasCount%ulNoMeasValues] = (dht.readTemperature()/25);
pulTime[ulMeasCount%ulNoMeasValues] = millis()/1000+ulSecs2000_timer;
…. eingefügt habe. Nun stimmt es in etwa…… Aber was läuft hier schief …. Die Zeit arbeitet korrekt….. Google Gauges kommen korrekt, es muss im Code-ESP8266 oder an meinem WEMOS D1 Board liegen. Gibt es dafür irgendeine Erklärung? Für Hinweise wäre ich sehr dankbar. LG Peter
Der DHT22 kommt am Mittwoch, vielleicht kann dann am Wochenende danach etwas dazu sagen.
BTW: Hast Du schon einmal den ESP8266 ohne Umweg über LUA mit Prowl eingesetzt (Push-Benachrichtigungsdienst)?
Erfolgreich eingesetzt habe ich Pushbullet. Pushbullet läßt sich über pushingbox.com nutzen. Da kann man mittels http mittels GET eine Push Nachricht auf dem Mobiltelefon auslösen. Man muss also auf dem ESP nur eine http Seite mit Pfad anfordern. Fertig.
Prowl habe ich nie probiert.
OK, der DHT22 liefert Nachkommastellen (genauer gesagt: 1 Nachkommastelle sowohl bei Temperatur als auch bei Feuchtigkeit),ausprobiert mit der Standardbibliothek für den DHT.
Wärest Du eventuell bereit, Deine Sketche mit Pushbullet online zu stellen? Ich habe bisher keinen Erfolg gehabt und würde gerne einen Push-Dienst einsetzen. Unser Wäschetrockner steht im Keller und soll seine „Fertig!“-Meldung per Push liefern. Vielen Dank schon einmal!
Ich schreibe mal was zu Pushbullet zusammen, wenn ich dazu komme. Die Konfiguration von pushingbox ist ein wenig trickreich. Der ESP Sketch ist nichts weiter als die Sketche, die eine HTTP Seite öffnen (GET).
Noch eine Frage: Der ESP8266 stürtzt immer nach ca. 1 Stunde ab und fängt von vorne an. Möglicherweise ein Speicherproblem: Mein ESP8266-01 hat „nur“ 512k RAM. Wieviel RAM hattest Du zur Verfügung? Ich habe gelesen, dass einige OLIMEX-Boards mit deutlich größerem RAM ausgestattet sind.
Kann ich Dir gar nicht sagen. Ich habe immer ESP-01 Boards bei dem nächst besten China Lieferanten auf ebay bestellt. Bisher waren die alle gleich. Der Sketch läuft jedenfalls bei mir bisher stabil. Er zeigt im Webinterface immer so ca. 7-8kB freies RAM an und ca. 1800 Datenpunkte. Wie sieht das bei Dir aus?
Danke erst einmal im Voraus für Pushbullet!
Zum RAM: Ich bekomme zunächst ca. „18k frei“ angezeigt, was sich mit jedem Aufruf der Seite ändert (meist verringert). Die Zahl der Datenpunkte ist meist so um die 1800, ich meine aber, die Zahl würde sich auch ändern.
Zum Testen habe ich mal die Größe des freizuhaltenden RAMs im Sketch auf ca. 20000 verdoppelt und die Stunden auf 12 halbiert. Damit ist es die Nacht durch stabil gelaufen.
Aber auch externe Störungen durch Spikes auf der Versorgung mag ich nicht ausschließen. Ich werde daher am WE den Steckbrettaufbau mal in etwas Solides umbauen (Lochrasterplatine) und dann wieder berichten.
Es könnte sein, dass wir unterschiedliche SDK Versionen verwenden. Da scheint ja ein Memory Leak vorzuliegen.
Das SDK ist das Kit, das Espressif herausgibt, um den ESP zu programmieren. Das SDK wird von der Arduino IDE Erweiterung genutzt. Schau bitte mal nach, welche SDK Version Du nutzt. Die Versionsinfo liegt in dieser Datei:
C:\Users\User\Documents\Arduino\hardware\esp8266-Arduino-master\esp8266\sdk\version
Dort steht bei mir: 1.0.1_15_05_04_p1
Ergo verwende ich die SDK Version 1.0.1
Danke füe den Hinweis! Ich gabe die Info heute morgen nicht so schnell gefunden – ich habe einen Mac und da ist der Pfad anders.
Zusätzlich habe ich den Reseteingang mal direkt auf + gelegt und die Versorgungsspannung dicht am ESP mit einem 270uF-Elko zusätzlich gepuffert. Mal sehen, was dabei herauskommt.
Eine Korrektur noch: Die Anzeige der Zahl der Datenpunkte ist konstant.
Die Hardwaremassnahmen scheinen sich positiv ausgewirkt zu haben. Die Speicheranzeige bleibt nahezu bei 18k, das „Rollen“ der Daten und Anzeige funktioniert auch.
Trotzdem werde ich noch die Version der SDK prüfen.
Hallo Stefan,
erstmal vorweg, tolles Projekt! Ich hab Dein Projekt nachgebaut, allerdings mit einem DHT11. Funktioniert auf den ersten Blick, aber manche Werte reißen regelmäßig aus. Hast Du nen Tipp wo ich mit der Suche anfangen sollte?
Hier ein Screenshot vom Chart, da sieht man recht gut was ich meine.
herzliche Grüße, Nick
Hmm, irgendwie hab ich was mit dem Link verhauen, einfach auf „herzliche grüße, Nick“ klicken 😉
Hallo Nick,
diesen Effekt habe ich noch nicht gesehen – und ich verwende keinen DHT11. Da ist ja auch eine deutlich erkennbare Periodizität in den Messwerten – und der Fehler erzeugt massive Änderungen der Messwerte.
Also kann ich auch nur vermuten:
Da die Kommunikation zwischen DHT und ESP mit Onewire läuft und eine Checksumme bei Onewire im Spiel ist, schließe ich einen Fehler in der Übertragung mal aus.
1. Ist die Spannung am DHT stabil? – Ist das verwendete Netzteil stabil? – Probiere es mal mit einer anderen Spannungsversorgung.
2. Hast Du einen Arduino zur Hand? – Tritt das Problem dort auch auf, wenn Du mit dem Arduino den DHT regelmäßig abfragst? – Z.B. mit dem Beispiel das bei der DHT Lib dabei ist.
3. Hast Du eventuell einen zweiten DHT11 zur Hand; so könnten wir einen Fehler im Sensor ausschließen.
Gruss Stefan
Hallo Stefan,
hab Deine Tipps befolgt, Netzteil tausch, hab auch nen Pufferkondensator reingehangen, keine Änderung. Der DHT läuft am Arduino ohne Probleme. Ich hab dann mal den Oszi an die Stromversorgung vom DHT gehangen, hin und wieder konnte man einen Spannungsabfall von etwa 0,1V sehen, aber ziemlich zufällig. Sowas hab ich mal bei Lautsprechern in der Nähe von Handies beobachtet. Ich hab dann einfach mal den DHT auf dem Steckbrett 6-7cm weiter entfernt vom ESP platziert und siehe da – alles gut!
Also hackt das WLAN dem DHT ins Gedärm bevor der ne Checksumme berechnet.
Ich konnt leider nichts darüber finden mit wieviel Milliwatt der ESP sendet, aber ich vermute nicht mit den in Deutschland üblichen 100mW sondern eher mit 1000mW wie es in anderen Ländern üblich ist.
grüße, Nick
Das ist eine interessante Beobachtung. Ich tippe mal darauf, dass der ESP in den analogen Messteil reinfunkt. Was zu Deiner Beobachtung passt: In dem Projekt zur Markisensteuerung musste ich den Abstand zwischen ESP und einem 433Mhz Empfänger maximieren.
Bei dem von mir verwendeten DHT21 muss ich das mal nachprüfen; ich habe da ein relativ langes Kabel zwischen ESP und DHT. Ich melde mich dazu nochmal.
P.S.: Die Sendeleistung dürfte eher 100mW sein. Der ESP nimmt für 1W Sendeleistung nicht genug Strom auf – und es gibt meines Wissens kein Land, in dem 1W bei 2,4GHz im WLAN erlaubt sind. In den USA dürfen es 125mW sein – und die erlauben meines Wissens die höchste Sendeleistung.
Ich habe das mal mit dem DHT21 nachgestellt. Der Effekt scheint in ähnlicher Form aufzutreten. Ich habe die Distanz zwischen DHT21 und ESP8266 verringert und den ESP auf den DHT gelegt. Sofort steigt die Temperatur um ca. 1,5 Grad an und die Feuchtigkeit fällt um 3%. Die Messwerte sind jetzt konstant auf anderem Niveau. Vergrößere ich die Distanz dann wieder auf ca. 10cm fallen die Messwerte sofort wieder auf die vorherigen Werte zurück.
–> Danke Dir für den Hinweis. Ich nehme das in dem obigen Beitrag als Info auf.
Ich glaube, ich habe -neben Schwankungen in der Versorgungsspannung – noch einen weiteren Grund für die Abstürze gefunden: Greift man innerhalb kurzer Zeit sehr oft auf das Gerät zu, sinkt der freie Speicher rasant. Lässt man dann eine größere Pause, erhöht sich der freie Speicher wieder. Offensichtlich wird von den FW-Routinen beim Zugriff benötigter temporärer Speicher zu langsam wieder freigegeben. Seitdem ich die Zugriffe reduziert habe, läuft due Kuste stabil.
BTW: Meine SDK hat die Version 1.0.1 . Ich weiss noch nicht, wie ich die 1.1. installieren kann.
Den Effekt mit den schnellen Zugriffen kann ich auch nachvollziehen. Ich hatte experimentell 10k als freien Speicher ermittelt (#define KEEP_MEM_FREE 10240). Damit konnte ich den ESP bei mir nicht mehr destabilisieren (Win7 + Chrome); da ist aber jeder Browser etwas anders.
SDK 1.1 –> selbst integrieren oder warten, bis ein neues Paket für die ESP-Unterstützung in der Arduino IDE released wird.
Hallo Stefan,
da steckt sichtbar jede menge Arbeit drin, Respekt! Dein Projekt hat mir ein gutes Stück weiter geholfen. Vielen Dank!
Ich war am Anfang etwas erschrocken, das es nur möglich sein sollte 1800 Datenpunkte zu speichern, was für meine Anwendung zu wenig wäre. Nach dem überfliegen deines Codes ist mir aufgefallen das du pro Datenpunkt 96 bit verwendest (gesamt 168k bit) aber ohne Abstriche machen zu müssen mit 32 bit auskommen könntest. Für die Darstellung von Temperatur und Luftfeuchte reichen je 16 bit und deine Zeitintervalle sind regelmäßig, so das die Zeit rekonstruiert werden kann. Somit währe die dreifache Aufzeichnungszeit möglich (bei minütlichen Intervallen fast vier Tage).
Reduziert man die Auflösung auf 0,5 Grad bzw. Prozent (8 bit) und geht auf 5 min Intervalle (variablen Zeitraum hast du ja schon eingebaut) kann man 37 Tage speichern ohne das die Diagramme auf einem Handydisplay wesentlich an Detail verlieren. Die Genauigkeit der Sensoren gibt eh nicht mehr her 😀
Bitte nicht als Kritik auffassen sondern als konstruktiver Beitrag. 😉
Gruß Martin
Hallo Martin,
stimmt – die Datenhaltung kann man definitiv optimieren. Für die meisten Leute sollten ca. 1800 Datenpunkte ausreichen und daher habe ich das nicht weiter getrieben. Außerdem werden die Ladezeiten für die Webseiten dann nochmals deutlich länger.
Für die Darstellung der Temperatur gibt es die Werte von -40,0 bis 80,0 Grad Celsius. Macht 1200 Möglichkeiten. Für die Feuchtigkeit sind es 1000 Werte. Ohne jegliche Einbuße in der Genauigkeit sollte das mit 21 Bit (–> ln2(1200*1000) ) machbar sein. Weiterhin müsste man auch nicht unbedingt den exakten Zeitpunkt der Werterfassung mitloggen. Ich mache das eigentlich nur, weil ich nicht exakt garantieren kann, dass die Messwerte komplett äquidistant sind, weil Abfragen der Webseiten das Logging verzögern können.
Nimmt man diese Optimierungen (21 Bit vs 96 Bit) zusammen, sollte sogar mehr als das 4,5-fache an Zeitpunkten drin sein.
Wenn man es dann noch weiter treiben wollte, könnte man die Differenz zwischen den Messungen ablegen und nicht den Absolutwert. Damit sind die meisten Einträge fast Null, weil sich meistens nur wenig ändert. Diesen Array müsste man sehr effizient mit einer einfachen Kompression wie heatshrink o.ä. packen können. Damit sollte nochmal ein Faktor 2-3 drin sein.
Gruss Stefan
Es gibt noch die Möglichkeit, den Olimex MOD-WIFI-ESP8266-DEV (siehe Ama***) zu verwenden. Dort sind satte 2MB Speicher eingebaut, 4x so viel wie im Basismodell, außerdem sind mehr Ports verfügbar. Kostet derzeit 6,95€.
Hallo MacSteven,
du meinst das SPI-Flash? Dafür müsste man aber z.B. das SPIFFS nutzen (Über die EEPROM Implementierung sind nur 4kB Flash verfügbar). Dort sollte auch im Moment noch mehr Platz sein als die ca. 21kB RAM welche momentan belegt werden. Die Olimex Module sind keine Option für mich, da eine Lieferung ESP-03 und ESP-07 aus China unterwegs ist :D. Stefans Vorschlag der Komprimierung hört sich momentan verlockend an, vor allem wenn man im Browser per JS dekomprimiert. Er hat schon recht, das es nichts bringt mehr Daten zu sammeln, wenn man sie nicht vernünftig ausliefern kann. Komfortabel wär das SPIFFS um die Daten z.B. im JSON-Format in eine Datei abzulegen. Eventuell ist es ja bald einsatzbereit.
Hier gibt es eventuell einen kleinen Hack: SPIFFS
Gruß Martin
Hallo Martin,
dass nur 4k verfügbar sind wusste ich nicht. Aber es gibt wohl I2C-Treiber, wie wäre es dann mit einem 64k-I2C SRAM oder FRAM? Meinst Du, das wäre realisierbar? Optimal wäre eine SD-Karte (weil entnehmbar und am PC auslesbar), aber da habe ich noch keinen Treiber gefunden.
Hier gibt es mehr Infos zur Aufteilung des Flash:
Flash Split for 512K chips
Da werden auch 20k für EEPROM reserviert obwohl nur 4k verwendet werden. Wenn man den reduziert und dann noch etwas vom Platz für die Sketches abzweigt bekommt man schnell >100kB :D. Der Platz ist da, kann aber momentan nicht verwendet werden.
Aktuell finde ich es schon Interessant bei meiner Wetterstation die Daten von letztem Jahr als Vergleich zu sehen. Das man diese Funktion komplett für kleinstes Geld embedded haben könnte hat für mich schon großen Reitz. Bei solch alten Daten muss dann die Auflösung nicht so hoch sein, halbstündlich reicht locker. Das sind dann etwa 4-6kB pro Monat…
Oh je, schon wieder ein Projekt.
Gruß Martin
SD Unterstützung ist übrigens eingebaut, siehe hier. Das ist aber z.B. für ESP-01 keine Option.
Sorry, Link verhauen.
https://github.com/esp8266/Arduino/tree/esp8266-sdk-1.0/libraries/SD
Die richtige Lösung für eine größere Datenmenge ist sicherlich die SD Karte. Insbesondere wenn der Wunsch in Richtung einer Wetterstation geht. Die typischen Wetterstationen können allerdings auch nicht sehr viele Daten halten.
Ich habe eine Wetterstation online (https://thesen.eu/wetter). Da ist aber ein Raspberry Pi dahinter, um die Messwerte zu verwalten und die html Seiten zu erzeugen. Wenn so etwas das Ziel ist, sprengt es m.E den Rahmen eines ESP8266 in Bezug auf RAM als auch CPU.
Den ESP sehe ich da eher als Enabler für einen Wireless Sensor mit etwas Cache für die Messungen.
Hi, schönes Beispielprojekt !
Werd mich wohl auch mal mit dem ESP beschäftigen, scheint mir doch ganz interessant zu sein das Bauteil.
Frage: Wo hast du die beiden Anzeige Instrumente für die Webseite her, selbst gemacht ? Wenn die mit einer freien Lizenz sind, würd ich sie gerne auch verwenden.
Gruß Paul
Die Anzeigen sind wie oben erwähnt Google Chart Objects. Das bedeutet, dass die vom ESP erzeugte Website ziemlich simpel ist. Die nötigen Daten werden als Javascript Array erzeugt. Der Java Code für die grafischen Elemente wird dann von google aus dem Internet in den Browser geladen. Dieser rendert wiederum die Grafiken.
Auf diese Weise haben wir die Möglichkeit komplexe Objekte im Browser zu rendern und der ESP muss nur einige Bytes schicken. Weiterer Vorteil: Die Daten bleiben lokal – nichts geht in irgendeine Cloud.
Das Copyright der Google Chart Objects liegt bei Google 🙂 – sie dürfen kostenfrei eingesetzt werden.
Gruss Stefan
Hey,
Danke für die schnelle Antwort.
PS: werde sicher öfter bei dir reinschauen. ?
Grüße Paul
( noch in Urlaub)?
Tolles Projekt, leider fehlt die „user_interface.h“. Wo kann man die denn finden ?
ESP8266 lib. ist installiert, „…hardware\esp8266-Arduino-master\esp8266\sdk\version“ gibt es jedoch nicht.
Gruß + Dank, Greece2001
Hast Du die Erweiterung für den ESP8266 für die Arduino IDE installiert?
Schau mal hier: https://blog.thesen.eu/esp8266-wlan-microcontroller-mit-der-arduino-ide-programmieren/
Da kommen dann die fraglichen Dateien mit. Und bitte vor dem compilieren den Boardtyp auf „generic ESP8266“ stellen.
Hab’s entspr. der Anleitung
„Auf https://github.com/esp8266/arduino die arduino-esp8266-master.zip herunterladen. Das im Zip enhaltene Verzeichnis arduino-esp8266-master im Windows Dokumenten Verzeichnis unter Arduno\hardware (typischerweise C:\Users\User\Documents\Arduino\hardware) ablegen. Damit nix schief geht: Das Verzeichnis arduino-esp8266-master liegt dann in Arduino\hardware“
versucht.
Das Zip-File heisst aber nicht „arduino-esp8266-master.zip“ sondern „Arduino-esp8266.zip“, das Verzeichnis „arduino-esp8266-master“ gibt es darin auch nicht. Habe aber alles enstpr. umbenannt.
Nach Start gibt es den o.g. Board-Typ „generic ESP8266“ nicht in der Auswahlliste.
Im Verzeichnis „hardware“ gibt es nun das Verzeichnis „arduino-esp8266-master“ (weil entspr. umbenannt), darin wieder das Verzeichnis „hardware“ sowie „libraries“, „docs“, „build“, „arduino-core“, „arduino-builder“, „app“ und „.settings“.
Entweder bin ich zu blöd oder es sind unterschiedliche Versionen von der Erweiterung ?
Gibt es noch ein paar Tips dazu ?
Gruß + Dank, Greece2001
Es kann sein, dass in dem Github.com Projekt der Name der zip Datei geändert wurde. Die Installation ist auch dort beschrieben.
Die zip Datei herunterladen und so auspacken, dass das Verzeichnis Hardware in Documents im Arduino Verzeichnis liegt. Dann die Arduino IDE neu starten. Es muss eine halbwegs aktuelle Version der IDE sein (1.6.x vermutlich).
Ich habe das auf 3 Rechnern mit Windows 7 und 8.1 so gemacht und es hat jedes Mal geklappt.
Ich hoffe es klappt auch bei Dir so.
So, habe nach Anleitung über den Boardmanager installiert:
Start Arduino and open Perferences window.
Enter http://arduino.esp8266.com/package_esp8266com_index.json into Additional Board Manager URLs field. You can add multiple URLs, separating them with commas.
Open Boards Manager from Tools > Board menu and install esp8266 platform (and don’t forget to select your ESP8266 board from Tools > Board menu after installation).
Das hat auch funktioniert, jetzt kann ich das generic ESP8266 auswählen.
Habe dann aus der ZIP-Datei den Inhalt us dem Verzeichnis „Hardware“ in das Verzeichnis „Hardware“
unter documents… (s.u.) kopiert.
C:\Users\XX\Documents\Arduino\hardware
Dann IDE neu gestartet.
Nun aber gibt’s gleich ’ne neue Fehlermeldung:
„C:\Users\XX\Documents\Arduino\libraries\ESP8266wifi-master/ESP8266wifi.h:23:26: fatal error: avr/pgmspace.h: No such file or directory
#include “
Was mache ich nun wieder falsch ?!
Keine Ahnung. Bei mir klappt es auf 3 Rechnern. Such doch mal die fehlenden Includes im Dateisystem. Vermutlich ist irgendwas mit den Pfaden falsch.
Ich habe das Ganze jetzt nochmal mit der Arduino IDE 1.6.5 und dem Boardmanageransatz nachvollzogen. Ich kann den Code problemlos übersetzen.
Die alte ESP Erweiterung habe ich vorher entfernt: Das hardware Verzeichnis im Arduino Verzeichnis löschen.
Ich habs versucht nach zubauen bekomme aber nur Utopische Werte. Uhrzeit stimmt auch nicht.
Was mache ich verkehrt.
https://www.dropbox.com/s/gnynxnrdeohmh7t/dht.png?dl=0
Da scheinen zwei Probleme vorzuliegen:
1. Uhrzeit – das könnte an der SDK Version liegen. Espressif hat da herumgefixt. Oder aber der ESP kommt einfach nicht ins Internet. Von letzerem gehe ich mal aus. Also SDK Version. Der Pfad hängt von Deine PC ab; sollte ab in etwa so sein:
C:\Users\Stefan\AppData\Roaming\Arduino15\packages\esp8266\hardware\esp8266\1.6.4-673-g8cd3697\tools\sdk
Darin ist eine Datei „version“. Was steht da drin? – 1.0.1…? – Wenn es älter ist, wird die Abfrage des Zeitservers nicht klappen.
2. DHT Sensor. Hast Du den selben DHT Sensor genommen oder einen anderen? – Ggf musst Du einen anderen DHT im Code entsprechend eintragen. Es könnte auch sein, dass Du mit der Einstellung 160MHz übersetzt hast. Nimm mal 80MHz.
Gruss Stefan
SDK Version 1.2.0_15_07_03
Sensor AM2301 DHT21
Hatte schon 80MHz verwendet 🙁
Dann haben wir ja schon mal einen Unterschied identifiziert. Du hast die neuere SDK Version von Espressif genommen. Ich würde mal stark darauf tippen, dass die Probleme daher kommen. Der schnellste Fix für Dich dürfte ein Downgrade der SDK Version sein.
Generell sollten wir aber versuchen die Unterschiede zu kapieren. Laut Changelog hat Espressif auch mit dem SDK 1.2 wieder an UDP gedreht. Das könnte die NTP/Zeitprobleme erklären. Das sollten wir aber kurz bei Seite legen.
Zu den Temperaturmessungen. Du könntest probieren mit dem Parameter 3 in den folgenden Zeilen zu spielen:
// init DHT; 3rd parameter = 16 works for ESP8266@80MHz
DHT dht(DHTPIN, DHTTYPE,16);
Der Parameter definiert Wartezeiten in der DHT Library; ggf mal mit einen anderen Wert. Versuch mal eine 20.
Wenn ich dazu komme, werde ich auch mal auf die neuere SDK Version gehen und sehen, ob ich das nachvollziehen kann.
Gruss Stefan
Danke für deine Tips 🙂 Bis auf die Uhrzeit hauts schonmal hin. Sind aber exakt 2 Stunden, kann man bestimmt noch wo einstellen.
Durch meine x Versuche kann ich gar nicht sagen was nun den Erfolg brachte.
Wenn ich es nachvollziehen kann, werde ich es hier mal schreiben.
Dann hast Du alles ans laufen bekommen. Prima. Die Uhrzeit ist UTC (steht auch dran ;-)) und damit by design im Sommer 2h hinter der Uhrzeit. Ich habe mir die Umrechnung in die deutsche Zeit erspart, weil ich kein Codesniplet für eine Sommer-/Winterzeitumrechnung hatte.
Ich habe heute auf die SDK Version 1.2 upgedated. Der Code läuft (mit dem Wert 16 oder 20 auf dem dritten Parameter – egal).
Mit dem SDK 1.2 steht etwas weniger RAM zur Verfügung. Und unter allen SDK Versionen gilt: Bis zur Erfassung des ersten Messwerts wird als Temperatur / Feuchtigkeit / Uhrzeit Unsinn angezeigt. Es kann also bis zu 5 Min dauern, bis etwas Sinnvolles im Webinterface steht.
Ggf einfach den Messzeitraum in den #defines von 168 (Stunden) auf 6 reduzieren. Dann wird ca. alle 15 Sekunden ein Wert erfasst.
Paar Zeilen davon benutzt
http://forum.arduino.cc/index.php?topic=172044.msg1278536#msg1278536
bis jetzt gehts, mal sehen wie es zur Winterzeit noch läuft 🙂
Danke für die Rückmeldung. Den Code kapiert wohl keiner. Mal schauen, ob er klappt 🙂
Ein wirklich tolles Projekt und eine super Arbeit!
Habe nur ein Problem. Wenn man auf der html-Seite die Grafik auswählt erscheint nur der Text und keine Grafik. Die Tabelle und die Starseite werden richtig ausgegeben.
VG Martin
Sind in der Tabelle sinnvolle Zahlenwerte drin? – Wenn die Verbindung zum Sensor wackelig ist, steht teilweise NaN (not a number) drin. Damit kann das Google Script nix anfangen.
Ansonsten schau mal den Quellcode der html Seite an, der auf der Grafikseite erzeugt wird.
Vielen Dank für die schnelle Antwort!
Ja es sind NaN Werte noch vorhanden. Der Fühler ist wohl zu nah am WLan Modul!
OK. Danke für die Rückmeldung. Eigentlich müßte ich mal eine Abfrage einbauen, welche die NaNs abfängt und dafür auf der Seriellen etwas „meckert“ 🙂
Gutentag, ich haette das gleiche Problem. Ich habe im Sketch Wifi-Mode von Wifi-STA in Wifi-AP geaendert und das wirkt . Ich weiss noch nicht ob das andere konzequenzen hat…
Hallo,
tolles Projekt!
Dummereweise habe ich mein Arduino Plugin auf die Version 2.0.0 upgeradet.
Seit dem bekomme ich keine Antwort mehr vom NTP.
Ist das Problem bekannt, bzw. gibt es sogar eine Lösung?
Besten Dank
Die 2.0.0 hat ads SDK 1.3.0 an Board. Ich habe das damit nachvollzogen. NTP geht, ist aber offenbar nicht mehr so zuverlässig beim ersten Aufruf. Das hier fixt das Problem; ist auch oben als V2 eingestellt:
Suche diese Zeile: sendNTPpacket(timeServer); // send an NTP packet to a time server
Den folgenden Code ersetzen bis zu dieser Zeile hier; diese Zeile bleibt erhalten: if(!cb)
int cb, count=0;
do
{
sendNTPpacket(timeServer); // send an NTP packet to a time server
delay(1000);
cb = udp.parsePacket();
count++;
}while (!cb || count>10);
Dadurch wird der NTP Request bis zu 10 Mal wiederholt. Da UDP Pakete auch verloren gehen können, macht das auch durchaus Sinn.
Hallo
Herzlichen Dank, dass Du deinen Code zur Verfügung stellst.
Das ist wirklich clever gemacht und läuft stabil
Ist es sehr aufwendig noch ein Barometer (BMP 180) hinzuzufügen ? Das wäre natürlich noch perfekt
Ich freue mich auf weitere tolle Projekte
Gruss Markus
Prima, dass es klappt. Freut mich. Ein BMP180 sollte kein Problem sein. Läuft mit 3.3V und es gibt Berichte über eine prinzipielle Funktion mit der Nodemcu Firmware. Es sollte also auch mit der Arduino IDE Variante gehen.
Auf Aliexpress gibt es den zum Bmp180 kompatiblen GY68 für unter einen Euro. Ich hab mal welche bestellt.
Hallo
Den BMP 180 läuft problemlos am ESP 12E
#include
#include
Adafruit_BMP085 bmp;
void setup() {
Serial.begin(9600);
if (!bmp.begin()) {
Serial.println(„Could not find a valid BMP085 sensor, check wiring!“);
while (1) {}
}
}
void loop() {
Serial.print(„Temperature = „);
Serial.print(bmp.readTemperature());
Serial.println(“ *C“);
Serial.print(„Pressure = „);
Serial.print(bmp.readPressure());
Serial.println(“ Pa“);
Serial.print(„Pressure at sealevel = „);
Serial.print(bmp.readSealevelPressure(440)/100.00);
Serial.println(“ hPa“);
Serial.println();
delay(1000);
}
Toll wäre auch noch eine 3h Tendenzanzeige
Gruss Markus
Danke für den Hinweis. Ich habe mal welche bestellt.
Hallo
wollte mal die verbesserte Version ausprobieren und diese gleichzeitig ohne Router betreiben (Access Point).
Ein tausch von
// WiFi.begin(ssid, password);
WiFi.softAP(ssid, password);
scheint aber nicht zulangen 🙁
Ich bin gerade rechnerlos unterwegs. Deshalb kann ich nicht in die Codes schauen.
Sieh Dir mal das Code Beispiel für den HTTP Webserver an und vergleiche ihn mit dem geänderten Beispiel für den Access Point.
Hallo
Gibt es auch eine Möglichkeit von „extern“ die Daten abzurufen ?
Gruss Markus
Was meinst Du genau? – Infos von einer Webseite im Internet dazu nehmen?
Nein, damit ich auch von unterwegs auf meine Wetterdaten zugreifen kann.
Ich hätte da noch ein HP welche ich ev verwenden kann
Gruss Markus
Wenn der ESP8266 an einem normalen DSL Anschluss hängt, gibt es mehrere Möglichkeiten.
Per Portforwarding Port 80 auf Port 80 des Esp. Oder falls Dein Router das kann per VPN.
Hallo zusammen.
Bin heute zufällig euren Blog gefunden. Ich programmiere den ESP8266 unter LUA das hier ja nicht
verwendet wird. Aber ich denke ich habe trotzdem eine gute Info für euch bezüglich Flash-Speicher.
Meine ESP-03 Module die ich vor einem Jahr gekauft habe hatten einen 4Mbit Flash Speicher, ergo 512 Kbyte Flash Speicher.
ESP-03 Module die ich vor 8 Wochen in China bestellt habe zeigen mir jetzt einen 8Mbit Flash Speicher. Hier wären ca. 500Kbyte Speicher für eure Daten zum Aufzeichnen vorhanden.
Vor 4 Wochen habe ich einen ESP-12e bestellt und dieser hat einen 4Mbyte Flash Speicher verbaut.
Keine dieser Speichergrößen hat der China Händler in seiner Beschreibung angegeben. Die handeln einfach damit ohne zu wissen was sie verkaufen.
Wie auch immer, neuere Module scheinen mehr Flash Speicher zu haben.
Derzeit läuft bei mir eine Bestellung über 8Mbit Flash Module von Winbond. Ich werde versuchen ob ich diese auf meinen ESP-03 Modulen zum laufen bringen kann. Dadurch hätte ich auch mehr Speicher.
LG Lorenz
Gute Idee. Berichte bitte, was bei der Operation Flash – Tausch heraus gekommen ist.
Hallo zusammen,
hat funktioniert.
Kleines Problem war dass meine bestellten Flash Bausteine etwas breiter
in der Abmessung sind. Nach etwas kürzen der Beine und umbiegen habe ich es dann aber doch geschafft dass der Flash Baustein passt. Jetzt läuft mein ESP-03 „old version“ mit einem 8Mbit Flash. Das bedeutet für euch dass ihr etwa 500kbyte Flash Speicher für die erfassten Daten habt.
Wenn ich jedoch den Aufwand vom Bestellen bis zum Umlöten ansehe so denke ich dass ein bestellen von einem neuen ESP-03 mit mehr Speicher einfacher ist. Bei den Preisen in China von ca. 2 -3 Euro pro ESP-03 ist das zu verkraften.
Das ist mal wieder ein tolles Projekt. Ich habe es mit einem ESP-01 aufgebaut, dessen Speicher mit einem winbond 25Q32FV auf 4MB erweitert wurde. Alles funktioniert soweit. Was mich wundert, ist, dass trotz des üppigen Speichers die Anzahl der maximalen Datenpunkte „nur“ mit 2848 angegeben wird. Muss vielleicht noch irgend eine Einstellung verändert werden? Die Einstellungen der Arduino IDE habe ich so vorgenommen: https://www.dropbox.com/s/w7nkr8njfqm3cbl/ESP%20Einstellungen%20in%20IDE.jpg?dl=0
Frank
Die Sache ist ganz einfach: Der Code legt nichts im Flash ab, sondern behält alles im RAM. Es macht absolut Sinn, das Flash als Speicher für solche Zwecke zu nehmen. Müsste man aber mal reinkodieren…
Gruss Stefan
Hallo,
habe immer noch Probleme mit dem NTP.
Mit der neuen SDK kann ich beliebig oft Pakete schicken –> keine Antwort.
Mit der alten SDK klappt’s auf Anhieb.
Übrigens: Die Durchführung von max. 10 Abfragen in der V2 müsste folgendermaßen lauten:
}while (!cb && count<10);
Gruß
Roland
Die while Sache stimmt natürlich. Muss ich fixen.
Warum es bei Dir nicht geht, ist mir nicht klar. Bei mir klappt es bei 10 Tests auch 10 Mal.
Gruss Stefan
Hallo!
Hat sich geklärt.
Scheinbar gab’s eine Mischung verschiedener Bibliotheken.
Habe die komplette ESP Hardware entfernt und anschließend neu installiert.
Jetzt klappt’s auch mit dem NTP.
Beste Grüße
Roland
Hat jemand das Projekt auf einem ESP8266-12E laufen? Ich habe es auf dem ESP-01 installiert und alles läuft wie gewünscht. Installiere ich es auf einem ESP-12E, dann loggt sich dieser nicht in das Wlan ein. (Die Hardware ansich läuft mit anderen Beispielsketchen, wie Blink und Server) Die Vorgehensweise ist identisch und der Sketch ebenso. An einem Dreher im Passwort oder SSID kann es also nicht liegen. Gibt es evtl. Probleme mit der Version der Firmware? Welche nutzt ihr? Ich habe es mit der IDE 1.6.4 und 1.6.5 probiert. Gemäß der Versionsdatei lautet diese bei der IDE 1.65 „1.3.0_15_08_10_p1“.
Frank
Hallo Frank,
ich habe den 12E schon erfolgreich genutzt; schau mal hier:
https://blog.thesen.eu/esp-12-esp8266-12-12e-programmieren-und-mit-der-arduino-ide-nutzen/
Hast Du GPIO15 auf Masse und EN auf 3.3V? – Das wäre meine erste Vermutung.
Ich nehme die IDE 1.6.5. Es gab schon Berichte über Probleme mit alten Installationen der ESP Erweiterung. Mach ggf mal unter AppData sauber und installiere neu.
Viel Erfolg
Stefan
Da die Beispielsketche funktionieren, schließe ich ein Hardwareproblem aus. Ich nutze zum Flashen des ESP diesen Programmierer: http://www.forum-raspberrypi.de/Thread-projekt-esp8266-programmierer-version-2-0
Der ESP-12E sitzt auf dieser Platine (leicht modifizierte Version 2.0B mit SPX): http://www.forum-raspberrypi.de/Thread-projekt-esp8266-adapter-mit-on-board-spannungsversorgung-zum-einbau-in-projekt?pid=183387#pid183387
Das sieht dann so aus: https://www.dropbox.com/s/3agjum33bpzcfnt/ESP%20Board%20unten.jpg?dl=0
https://www.dropbox.com/s/2rf60fa5p5x53fb/ESP%20Board%20oben.jpg?dl=0
Sollte jemand Interesse daran haben, bitte melden. Ich habe noch verschiedene Platinen hier liegen.
Nach stundenlanger Suche ist das Problem inzwischen gelöst. Ich habe den ältesten aller Tricks angewendet. Strom aus / Strom an (an der FritzBox) und schon lief alles…
Frank
Frohes Neues Jahr!
@Deine Antwort vom 03.06.15: Hattest Du schon Gelegenheit, etwas über pushbullet zusammen zu schreiben? Ich krieg’s nicht hin…
Gruß Stephan
Hallo Stephan,
Du hast Recht. Ich habe das immer noch nicht zusammen geschrieben. Die Zeit…
Ich habe eine ESP Steckdose gebaut, die mit einem MiniPro und einem ACS712 den Stromverbrauch einer Waschmaschine analyisert und mit eine Pushnachricht schickt, wenn der Waschvorgang beendet ist.
In aller Kürze – und wenn Du nicht weiter kommst, melde Dich.
Gruss Stefan
Account bei Pushingbox anlegen.
Bei Pushingbox den API Code von Pushbullet hinterlegen.
Mit dem Code von Pushingbox das hier nutzen; dabei sind für den Titel und die Nachricht jeweils Variablen hinterlegt:
void sendToPushingBox(const char *pcID,const char *pcTitle, const char *pcMessage)
{
//http://api.pushingbox.com/pushingbox?devid=YOUR_SCENARIO_ID&title=Waschmaschine%20fertig&message=Laufzeit%20107%20Minuten
char serverName[] = „api.pushingbox.com“;
client.stop();
if (client.connect(serverName,80))
{
client.print(„GET /pushingbox?devid=“);
client.print(pcID);
client.print(„&title=“);
client.print(pcTitle);
client.print(„&message=“);
client.print(pcMessage);
client.print(“ HTTP/1.1\r\nHost: „);
client.print(serverName);
client.print(„\r\nAccept: */*\r\nUser-Agent: Mozilla/4.0 (compatible; esp8266; Windows NT 5.1)\r\n\r\n“);
}
}
Ein frohes neues Jahr allen Bastlern und denen, die diese „ertragen“ müssen 😉
Inzwischen habe ich einen weiteren ESP mit dem Sensor ausgestattet und in meinem Büro installiert. Dort wird außerhalb der Arbeitszeit das Wlan abgestellt. Ich war sehr erstaunt, dass das deaktivierte Wlan dazu führt, dass auch keine Daten mehr aufgezeichnet werden. Ist das so gewollt oder eher ein Bug?
Frank
Hallo Frank,
der Effekt kommt aus dem Design des Codes. Er ist einfach nicht dafür gedacht, dass jemand das WLAN ausmacht. Wenn die WiFi Verbindung abreisst, versucht der Code die WiFi Verbindung wieder herzustellen. Der ESP hängt dann in der while() Schleife in der Funktion WiFiStart fest, bis das WLAN wieder angeht. Dann wird auch nix geloggt.
Du müsstest Du Deinen Usecase den Code umbauen. Nehmen wir mal an. dass Du alle 10 Sekunden einen Datenpunkt aufnimmst. Dann müsstest Du die while() Schleife nach 5-7 Sekunden verlassen und den darauf folgenden Code überspringen. Damit wird die main() Funktion wieder regelmäßig aufgerufen und es sollte klappen.
Gruss Stefan
Hallo alle miteinander!
Als Erstes möchte ich ein GROSSES Lob an den Autor aussprechen! Dieses Projekt ist echt toll.
Ich habe bereits einige Kommentare usw. verfolgt und frage mich, ob dieses Projekt vielleicht auch auf dem „Pretzelboard“ http://iot.fkainka.de/technische-daten funktionieren könnte, da dieses ja auch einen ESP8266 besitzt. Habe aber bisher immer Probleme mit den libraries beim compilieren.
„…fatal error: ESP8266WiFi.h: No such file or directory“
Ich möchte auch noch anmerken, dass ich in der µC-Welt noch eher zu den Einsteigern zähle, würde mich aber über Eure Hilfestellungen sehr freuen!
Danke im Voraus!
Hi,
das Pretzelboard ist eine Kombination aus ESP und Arduino. Ähnlich wie in vielen anderen Projekten und auch einem Projekt hier:
https://blog.thesen.eu/funk-wlan-markisensteuerung-mit-esp8266-und-arduino/
Aus meiner Sicht ist es nicht sehr sinnvoll, den ESP mit der AT Firmware an den Arduino anzubinden. Das ist wenig elegant und auch extrem nervig zu programmieren (man parst sich zu Tode). Ich würde deshalb eher dazu raten, beide Bausteine mit der Arduino IDE zu programmieren. Eine serielle Kommunikation ist dann einfacher und zielgerichteter. Vermutlich ist es auch wesentlich billiger (ESP ca 3€ + Nano ca. 2,5€ + 1€ für LM1117 und zwei Widerstände).
Wenn Du die hier publizierten Codes verwenden willst, dann musst Du den ESP umflashen (Dein Programmierversuch geht auf den Arduino und da gibt es die ESP Libs natürlich nicht). Wenn ich das richtig sehe, ist das PrezelBoard mit einem nicht bestückten Anschluss ausgerüstet, der dem ESP8266-01 Layout entspricht. Bestückt man diesen Anschluss mit Stiftreihen, so sollte ich die ESP Firmware umflashen lassen. Und das geht dann vermutlich auch mit dem Arduino IDE Ansatz. Die normalen Pretzelcodes laufen dann nicht mehr, bis Du wieder die AT Firmware flashst. Dazu gibt es Codes und Anleitungen im Netz.
Gruss Stefan
Hallo,
finde dein Projekt echt super.
Leider schaffe ich es als Anfänger nicht, deinen Code so umzuschreiben, dass der ESP als Server (Acces Point) funktioniert.
Nun hoffe ich einfach mal auf deine Hilfe. Das die Google Charts dann nicht funktionieren, ist verständlich. Mir würden auch die Tabellen reichen.
Hallo Markus,
schau Dir mal dieses Beispiel hier an:
https://blog.thesen.eu/http-1-1-webserver-fuer-esp8266-als-accesspoint/
Da sind alle Änderungen drin, die Du brauchst. Es ist wirklich nicht sehr schwer. Aktuell bin ich nicht in Reichweite einer passenden Programmierumgebung.
Gruss Stefan
Hallo Stefan,
auch von mir vielen Dank für dieses tolle Projekt und der, wie ich finde, passenden Implementierung einer funktionstüchtigen Server-Variante! Dein Projekt hat mir bei meiner Realisierung meines Projektes sehr geholfen!
Für dich noch ein kleiner Hinweis auf einen tollen Absolutdruck-Sensor, passend zu den Wetterdaten, die du sammelst: Der Sensor MS5803. Diesen gibt es in verschiedensten Auflösungen und passende Bibliotheken gibt es bereits im Netz (http://github.com/millerlp/MS5803_01). Wenn du ihn dir direkt aus China kommen lässt, ist er auch bezahlbar (ca. 20€). Klar, der BMP085 ist viel billiger, aber ich war davon auch eher weniger überzeugt…
Vielleicht hast du ja Lust, deine Wetterstation etwas zu erweitern…
Grüße
Stephan
Danke für die Infos. Mir ist nach Datenblattlage nicht klar, warum der MS5803-01 besser sein sollte als der GY68/BMP180/BMP085 den man für unter 2€ bekommt. Was waren denn Deine praktischen Erfahrungen mit dem BMP vs MS?
Gruss Stefan
P.S.: Wg Wetterstation: Die Fineoffset WH3080 hat den Geist aufgegeben. Der Plan ist schon länger mit einem ESP und dem BMP was zu machen. Wenn da nur genug Zeit wäre 🙂
Vielen Dank für das sehr interessante Projekt.
Zu erst habe ich den Sketch auf ein ESP8260 devkit gespielt. Auf diesem wurden aber keine Werte vom DHT gelesen. Ich vermute, dass das am GPIO Mapping liegt. GPIO 2 = D4 ging nicht. Dieser Baustein wird auch mit der NodeMCU 1.0 in der Arduino SDK geflasht.
Mit einem ESP8266-1 lief es dann auf Anhieb. Was ich beobachten konnte und nicht ganz verstehe ist, dass mit dem ESP8266 devkit die Webpage Tabelle laufend aktualisiert wurde. Beim ESP8266-01 geschieht das nicht. Liegt das vielleicht an der Geschwindigkeit?
Eine Frage habe ich noch: Ist es möglich die ausgelesenen Werte an ein Home Automation System zu senden? FHEM soll wohl gehen, ich benutze aber den SHC (Smart Home Control).
An welcher Stelle müsste das im Sketch eingebaut werden? Beispiel Sketche gibt es.
Vielen Dank
Hallo Ronald,
ich habe offen gesagt eine Ahnung, was die Unterschiede zum Devkit verursacht. Die Webpage mit der Tabelle sollte sich auch nur bei einem Refresh per Browser aktualisieren. Jedenfalls ist es so implementiert.
Wegen FHEM/SHC: SHC nutze ich nicht. Wenn Du etwas absenden willst, dann such im dem Logger Code bitte die Stelle mit dem Kommentar „do data logging“. Am Ende der folgenden Klammerung ist der Messwert erfasst. Wenn Du vor die Inkrementierung von ulMeasCount Deinen Code einführst, kannst Du problemlos auf die Werte zugreifen. Das geht dann genau so wie in den darüber stehenden seriellen Outputs.
Gruss Stefan
Hallo
Das hier ist wirklich ein tolles Projekt. Ich habe das Script installiert und leichte Anpassungen vorgenommen und lese die aktuellen Werte mit meiner Wago SPS und dem HttpGet Befehl aus.
Jetzt stehe ich aber vor dem Problem das ich an einem ESP vier Onewire Temperatursensoren Ds18b20 auslesen möchte. Deshalb habe ich schon viel im Netz gestöbert, aber irgendwie komme ich nicht weiter,vielleicht auch weil ich eigentlich Anfänger bin.
Es gibt Scripte mit denen ich die Sensoren auslesen kann und per serieller Schnittstelle ausgeben kann, aber dann bekomme ich die Webserverfunktion nicht hin, oder ich finde Webserver und scheitere an den Onewire Sensoren.
Kannst du mir vielleicht eine Hilfestellung geben wie dein Script anstatt mit dem DHT22 auf 4 Onewire Sensoren ausgeweitet werden kann. Du scheinst dich ja sehr gut mit der Materie auszudenken.
Gruß Uwe
Hab ich auch noch nicht gemacht. Ich vermute mal, dass Du die 4 Onewire Sensoren analog der folgenden Anleitung auf einem GPIO betreiben kannst:
http://arduino-info.wikispaces.com/Brick-Temperature-DS18B20#mult
Für den Rest brauchst Du ziemlich viele Änderungen. Das ist eine größere Operation.
Zuerst in der Speicherverwaltung. Statt pfTemp und pfHum musst Du pfTemp1, 2, 3, 4 anlegen (oder einen 2 dim. Array). Die Rechnung zur möglichen Arraygröße ist ebenso anzupassen (2* float auf 4* float).
Die Funktion Maketable muss so umgebaut werden, dass statt Temp & Humidity die 4 Temperaturen abgelegt werden. Ebenso muss Makelist umgebaut werden.
In loop() müssen im Datalogging die 4 Temperaturen abgelegt werden.
In loop() müssen die html Codes für das Google Chart Objekt für die 4 Temperaturen angepasst werden. Selbiges für die Anzeige der Tabelle sowie für die Grafik.
Gruss Stefan
Hallo
Danke für deine Antwort. Dann scheint es ja doch eine größere Baustelle zu werden. Da ich Anfänger bin glaube das ist für mich dann doch etwas zu viel ist.
Aber trotzdem Danke für deine Bemühungen.
Hallo,
Erstmal Danke für die Bereitstellung und die vielen Infos!
Ich habe das Projekt als Ausgangsbasis benutzt, im Laufe der Zeit hat sich aber einiges geändert. Zum Beispiel nutze ich die ESP8266WebServer Funktionen und splitte die Tabelle nicht auf.
Das verwendete Modul ist ein ESP-ADC von InCircuit. SDK 1.5.1_16_01_08
Das funktioniert auch alles wunderbar bis auf eine „Kleinigkeit“:
Ich lade die Seite per Browser refresh automatisch neu. Dazu die Zeile
im Html-header hinzufügen.
Das klappt etliche Male ganz gut bis die Seite „hängt“.
Am debug Ausgang habe ich dann die Meldungen
:wr
:sent 117
:ww
:wr
:sent 1460
:ww
:wr
:sent 1460
:ww
:wr
:er -8 1460 1
:ww
:ur 1
WS:dis
:del
Ich konnte das soweit verfolgen dass es mit der lib-Funktion tcp_output() zu tun hat, mehr leider nicht.
Tiefer in die libs komme ich auch nicht zum debuggen :/
Verschiedene sketches, verschiedene sdk, dieses Problem blieb immer 🙁
Auto-Refresh per Javascript führt zum exakt gleichen Verhalten.
Hat das mit dem Auto-Refresh schon jemand probiert?
Kann es an dem verwendeten Modul liegen?
Gibt es da andere Möglichkeiten?
Eine Seite zum Browser zu senden wäre für mein Projekt das Beste, aber das ist im http-Protokoll meines Wissens ja nicht vorgesehen/möglich.
Viele Grüße,
Bob
Hallo Freunde,
ich habe mit sehr großem Interrese das Thema angeschaut:
Habe aber eine andere Frage, es betrifft aber den selben DHT22 Sensor. Der Sensor nach der Zeitumstellung zeigt bei mir -2 Stunden.
Nach langer Suche im Internet hab ich aber keine passende Lösung gefunden. Habe schon den Zeitserver umgestält… hat nicht geholfen…
Hat jemand vielleicht eine Lösung, wie kann man die Zeit richtig anpassen?
Danke voraus
Die Zeit im Code ist UTC. Wenn Du die mitteleuropäische Zeit willst, schau einfach mal nach C++ Code Beispielen, die von UTC auf MEZ/MESZ umrechnen oder nimm 2h im Sommer und 1h im Winter.
Gruss Stefan
Was genau macht die F()-Funktion?
–> sResponse = F(“ call Navigation use counter=“);
F() ist ein Makro in der Arduino IDE. Damit liegt der String im Flash Speicher und nicht im RAM.
http://playground.arduino.cc/Learning/Memory
Ah okay ! Danke, hab nichts dazu gefunden.. Ziemlich schwer bei so einem Makronamen die google Suche ordentlich zu füttern 🙂
Der Makroname ist wirklich etwas blöd gewählt.
Hallo Stefan,
beim kompilieren deines Codes, taucht bei mir folgende Fehlermeldung auf :
ESP_TH_Logger.ino : 12:22; fatal error: time_ntp.h : No such file or Directory
compilation terminated.
Fehler beim Kompilieren
Da ich absoluter Neuling bin, kann ich mit der Fehlermeldung nicht viel anfangen…was mache ich falsch?
Gruß Willi
Hallo Willi,
ich vermute, dass Du entweder die Boarderweiterung für den ESP8266 nicht installierst hast oder das Board nicht auf ESP8266 umgestellt hast. Bitte prüfe mal hier nach:
https://blog.thesen.eu/esp8266-wlan-microcontroller-mit-der-arduino-ide-programmieren/
Wenn es damit noch nicht klappt, müssen wir nochmal suchen.
Gruss Stefan
Hallo Stefan,
ich habe alles richtig installiert und überprüft. Ich habe mal den Webserver als Accesspoint, die Funk und WLAN-Markisensteuerung und Stabiler HTTP 1.1 WLAN Webserver runtergeladen und kompiliert…alles ohne Fehlermeldung und es funktioniert einwandfrei!
Gruß Willi
Hallo Willi,
gut, dann können wir das ausschließen. Hast Du denn alle im heruntergeladenen Archiv vorhandenen Dateien inklusive time_ntp.h sowie time_ntp.cpp zusammen mit der ESP_TH_Logger.ino in ein gemeinsames Verzeichnis gepackt? – Wenn Du dann die .ino öffnest, sollten 3 Dateien als Tabs in der Arduino IDE angezeigt werden.
Gruss Stefan
Hallo Stefan,
ich hatte nicht alles im gemeinsamen Verzeichnis gepackt, das war der Fehler! Ich bedanke mich recht herzlich…und vielen Dank für deine Mühe!
Gruß Willi
Freut mich, dass wir das Problem gefunden haben.
Gruss Stefan
Hallo Stefan,
vielen Dank für Deine Arbeit.
Ich hatte ein Problem beim compileren
Es kam die Fehlermeldung
WiFStart not defined.
Ich habe dann die void WiFiStart() über WiFiStart kopiert und dann ging alles.
Arduino 1.6.7 war der compiler.
Normal so?
Gruß und vielen Dank,
Peppi
Hi Peppi,
eigentlich sollten Prädeklarationen bei der Arduino IDE nicht nötig sein. In C/C++ braucht man sie hingegen. Das dürfte ein Bug in der Arduino IDE, genauer im Präprozessor sein. Den Bugfix hast Du jedenfalls richtig umgesetzt.
Gruss Stefan
Hallo Stefan,
erstmal ein riesen Lob für den tollen sketch.
Jetzt habe ich auch nur wie peppi das Problem mit dem WiFStart not defined. beim compileren.
An welcher stelle genau muss ich was anpassen?
Ich verwende auch den Arduino 1.6.7
Vielen Dank und Grüße aus dem Schwarzwald
Daniel
Muss ich raten. Die Arduino IDE versucht die sogenannte Prädeklaration vor dem Nutzer zu verstecken, die bei C/C++ eigentlich nötig ist. Das scheint nicht immer robust zu funktionieren. Versuch mal vor der ersten Funktion WifiStart zu deklarieren:
Du könntest auch WifiStart
Gruss Stefan
Guten Abend Stefan,
ich verzweifle 🙁
Ich habe es in Zeile 76 vor der ersten Funktion eingefügt.
Leider kommt der Fehler
exit status 1
expected initializer before ‚WiFiStart‘
Kannst du mir nochmal bitte helfen?
Danke und schönen Abend noch 😉
Daniel
Hallo Daniel,
im Arduino Editor ist Zeile 76 in der ESP_TH_Logger.ino mitten in der setup Routine. Da sollte die Zeile auch nicht hin.
Ich kann das Fehlerbild generell nicht nachvollziehen. Bei mir übersetzt er das auch ohne Prädeklaration. Setz die Prädeklaration komplett wie gezeigt inklusive Semikolon bitte mal hinter die 4 includes am Anfang.
Gruss Stefan
P.S.: ich bin auf der 1.8.1. Keine Probleme damit. Upgrade der IDE?
Ach, und nochwas,
der WLAN Logger für Lufttemperatur und Feuchtigkeit geht nur füe Sekunden,
dann bekomme ich nur „leere“ angezeigt.
Es liegt an einen verlorenem Signal des DHT. Wenn in der Tabellenansicht ein „non“ auftaucht, geht die Grafik nicht mehr.
Der Code fängt Übertragungsfehler nicht ab. Da kommt dann ein NaN Eintrag. Ggf mal die Verkabelung prüfen oder den NaN String rausfiltern.
Gruss Stefan
Hallo Stefan,
vielen Dank für die tolle Arbeit. Ich habe einen DHT22 verwendet und nichts geändert. Die Grafik wird manchmal kurz angezeigt und gefällt mir sehr. Könntest du wenn die Zeit es dir erlaubt einen nan Filter einbauen?
Gruß Rainer
Hallo Rainer,
prima dass es Dir gefällt. Prüfe mal Deine Verkabelung. Die NaNs kommen eigentlich von Wackelkontakten. Ein NaN Filter sollte eigentlich mit einem Stringvergleich machbar sein. Wenn ich mal dazu komme, poste ich eine Lösung.
Gruss Stefan
Hallo,
hatte auch das Problem ab und zu nan, habe es so gelöst:
float hum_ = 0.0;
float temp_ = 0.0;
byte retry = 3;
// Retry to get valid Data
do{
hum_ = dht.readHumidity();
temp_ = dht.readTemperature();
retry–;
} while( ((isnan(hum_))||(isnan(temp_)) && (retry > 0)) );
pfHum[ulMeasCount%ulNoMeasValues] = hum_; // dht.readHumidity();
pfTemp[ulMeasCount%ulNoMeasValues] = temp_ ; //dht.readTemperature();
VG Jim
bei retry–; wurde aus dem — beim Kopieren ein -, es muss natürlich — sein
So kann man die NaNs abfangen. Das ist gut. Allerdings sind die NaNs auch ein Hinweis auf ein Kontaktproblem auf der Datenleitung.
Gruss Stefan
Entweder verstehe ich etwas nicht, oder mein Monitor gibt etwas undeutlich wider:
„bei retry–; wurde aus dem — beim Kopieren ein -, es muss natürlich — sein“
Ich gehe davon aus, dass es sich um ein decrement handelt, also 2 x minus, oder?
Yes.
Hallo Stefan,
ich bin begeistert von diesem Programm, man kann sehr viel davon lernen! Ich hatte es schonmal vor einiger Zeit mit einem NodeMCU und DHT11 ausprobiert und gelegentlich nan Werte bekommen, das war nicht weiter schlimm.
Jetzt habe ich mich nochmal damit beschäftigt und es auf einen ESP-12 mit DHT11 aufgespielt und bekomme ausschließlich nan Werte (Den NodeMCU habe ich leider nicht mehr da sonst würde ich natürlich schauen ob es dort noch geht). An der Verkabelung kann es meiner Meinung nicht liegen da der Beispiel Sketch von Adafruit problemlos läuft und bei jeder Messung einen Wert liefert (ich habe gerade wild hin und her geflasht ohne die Verkabelung auch nur zu berühren).
Ich habe am Sketch nichts verändert ausser den Zugangsdaten und gerade eben auch nochmal frisch runtergeladen um ganz sicher zu gehen.
Hast du eine Idee warum es nicht mehr funktioniert? Wurde an der Adafruit DHT library etwas geändert, so dass der Code nicht mehr kompatibel ist? Vielen Dank!
Achso, natürlich habe ich auch geändert dass ich den DHT11 nutze und nicht DHT21 😉
Hallo Stefan,
das ist echt eine klasse Arbeit.
Leider habe ich ein Problem und eine Frage.
Zuerst zum Problem, ich habe bereits mehrere NTP getestet aber ich habe immer zwei Stunden Zeitversatz also wenn es 9:00Uhr ist zeigt das Programm 7:00Uhr.
Und die Frage ist ob es die Möglichkeit gibt die Daten weiter zu vearbeiten und in eine Datei auf meinen Server zu legen zu Langzeitarchivierung?
Mfg
Andre
Hallo Andre,
es ist auch völlig korrekt, dass Du diese 2h Differenz siehst. Die NTP Server liefern UTC und nicht die mitteleuropäische Sommerzeit. Man kann das umrechnen. Es gibt dazu auch eine fertige Lib:
https://github.com/JChristensen/Timezone
Du musst allerdings beachten, dass diese Lib die vergangenen Sekunden seit dem 1.1.1970 rechnet und der Code hier vom 1.1.2000 ausgeht. Im NTP Code findest Du die entsprechende Differenz. Es wird auch bald ein Projekt geben, das diese Umrechnung enthält (dauert aber noch 6 Wo).
Bzgl Daten auf Server: Du könntest von dem Server aus per chron-Job einfach einmal am Tag die html Seite mit den Werten per wget ziehen.
Gruss Stefan
Hallo Andre,
um die MESZ zu erhalten habe ich einfach die +2h zur aktuellen Zeit hin zugezählt.
in time_ntp.h:
//// you may change here
#define TIME_ZONE MESZ // Set TimeZone (Offset to UTC)
//// do NOT change below
#define MESZ H2MS(2) // UTC +2h
#define MEZ H2MS(1) // UTC +1h
#define H2MS(x) (x*3600UL) // Hour to seconds
in time_ntp.cpp in Funktion unsigned long getNTPTimestamp() die letzte Zeile hinzugefügt:
// combine the four bytes (two words) into a long integer
// this is NTP time (seconds since Jan 1 1900):
ulSecs2000 = highWord << 16 | lowWord;
ulSecs2000 -= 2208988800UL; // go from 1900 to 1970
ulSecs2000 -= 946684800UL; // go from 1970 to 2000
/* ADDED*/ ulSecs2000 += TIME_ZONE; // TimeZone Offset to UTC
Nachteil: Du musst selbst zw. Sommer- und Winterzeit umschalten ;(
Man kann das auch mit der timezone Lib lösen: https://github.com/JChristensen/Timezone
#include
TimeChangeRule CEST = {„CEST“, Last, Sun, Mar, 2, 120}; //Central European Summer Time
TimeChangeRule CET = {„CET „, Last, Sun, Oct, 3, 60}; //Central European Standard Time
Timezone CE(CEST, CET);
Auf die NTP Zeit 946684800UL addieren, damit sie auf 1970 referenziert (und nicht auf 2000):
CE.toLocal(t+946684800UL)
Gruss Stefan
Hallo Stefan,
Tolles Projekt, Danke, habe fast alles sofort hinbekommen, etwas modifiziert aber
komme jetzt nicht mehr mit, kannst du den Sourcecode mit der timezone Lib zur Verfügung stellen, wo müssen diese Zeilen eingefügt werden ?
Gruss Lui
Hallo Stefan,
super Projekt! Vielen Dank!
Mein erstes PJ mit ESP8266. Ich habe schon einige Änderungen (und Bugfixes) vorgenommen, von denen ich gesondert noch berichten werde. Aber ich habe das Problem, dass der Graph nach einigen Stunden Laufzeit nicht mehr angezeigt wird. Die Startseite und Tabelle sind ok. Um auszuschließen, dass ich den Fehler selbst eingebaut habe, teste ich gerade dein original-Code, aber das Problem ist weiterhin da.
Hast Du dass auch bei Dir beobachtet oder woran könnte es liegen?
Schöne Grüße
Jim
(PS: Liste und Code mit Änderungen und BugFixes folgt)
Hallo Stefan,
vielen, vielen Dank für dieses Projekt.
Wenn ich bedenke wieviel Zeit und Geld ich verschwendet habe um was in der Art aufzuziehen.
Ich habe erst mit einem Ethernet shield enc28j60 das ich nicht ans laufen bekommen habe.
Irgendwann habe ich herausgefunden dass der verwendete Arduino nicht genügend Strom liefert.
Dann habe ich ein Ethernet Shield mit Wiznet Chip genommen, der ist genügsamer. Dann nächstes Problem, ich wollte die Temperatur und Luftfeuchtigkeit im Keller messen da wir da Wäsche Trocknen und ich überwachen wollte wann das Klime Schimmelfreundlich wird. Aber kein Netzwerkkabel im Keller.
Also das Ethernet Shield auf einen WLAN Repeater mit Netzwerkdose geschliffen. Läuft, aber riese Apperatur, viel Lehrgeld bezahlt, und jetzt kommst Du und zeigst mir dass man alles das für ca. 3 Euro in Miniatutur aufbauen kann. Spitzenklasse, Danke 🙂
Gruß
Thomas
Super Sketch ! 😉
Probleme mit DHT11 regelmässige Daten kommen immer wieder NAN Daten
auch so ! 🙁
do{
delay(3000);
pfHum[ulMeasCount%ulNoMeasValues] = dht.readHumidity();
delay(3000);
pfTemp[ulMeasCount%ulNoMeasValues] = dht.readTemperature();
retry– ;
} while( ((isnan(pfTemp[ulMeasCount%ulNoMeasValues]))||(isnan(pfHum[ulMeasCount%ulNoMeasValues])) && (retry > 0)) );
Hostname setzen
wifi_station_set_hostname( „wetterstation“ );
vor der Zeile
WiFi.begin(ssid, password);
Hallo und besten Dank für diese sehr übersichtliche und informative Arbeit.
Ich habe versucht (und letztlich ist es mir auch gelungen) den Sketch mit WeMos D1 R2 und DHT22 auszuführen.
Lange Zeit konnte ich zwar über die IP das Projekt aufrufen, aber ich bekam keine Messwerte! Auch mit dem Oszi war nichts zu sehen.
Mit Arduino UNO und entsprechendem Sketch habe ich nachgewiesen, dass der Sensor in Ordnung ist.
Lange Rede kurzer Sinn, eine „Kleinigkeit“ hat das Problem gelöst:
WeMos D1 R2 akzeptiert die Pinbezeichnung „2“ nicht, es muss heissen: „D2“!
Friedhelm
Hi Friedhelm,
D2 ist irgendwo per #define auf 5 gelegt. Vermutlich ist bei dem Wemos die GPIO Bezeichnung anders.
Gruss Stefan
Nach einem Tag Erfahrung:
# Anzeige funktioniert auch über Stunden
# Liste funktioniert auch über Stunden
# Grafk bricht nach Stunden ab.
Info:
D2 = GPIO4
Du hast vermutlich NaN Einträge in der Liste. Dort bricht dann die Grafik ab. Verlöte mal die Kontakte oder versuche die NaN (=Lesefehler) rauszufiltern.
Danke, die Antwort hat mir geholfen. Ich habe „NaN“ ausgefiltert.
Hallo Stefan
Alles läuft bestens.
Die NAN Einträge verändern sich bei mir sporadisch, wenn der code geändert wird. Deswegen filtere ich sie heraus.
Ich würde gerne die gespeicherten Daten, aus der Tabelle, am PC in einer Grafik anzeigen. Die neuen Werte sollten automatisiert beim Starten des PC übernommen werden.
Welche Möglichkeiten bestehen da?
Gruß
Peter
Hallo Stefan,
in erster Linie: Ich ziehe den Hut vor deiner Leistung. Wahnsinn, was du mit dem kleinen ESP alles anstellst.
Die Verwendung von JavaScript ist genial, da der Code ja m.W. nur im Browser ausgeführt wird, also vom Endgerät abhängig ist, das in 99,9% der Fälle leistungstechnisch besser dasteht als der ESP.
In deinem Code sehe ich, das du die Grafikbibliothek bei jedem Websiteaufruf direkt von Google herunterlädst. Wäre es denn grundsätzlich auch möglich, das JavaScript im Programmspeicher abzulegen?
Ich bin in Sachen HTML&Co. leider nicht im Thema, weiß aber, das es diverse kleine und große Helferlein gibt, welche eine Website um tolle Funktionen ergänzen können.
Gruß,
Robin
Hallo Robin,
Besten Dank. Du kannst natürlich den Javacode auch direkt auf dem Esp hinterlegen. Das kannst Du so realisieren wie hier gezeigt, aber irgendwann wird das so unübersichtlich. Es gibt auch eine rudimentäre Datenverwaltung für den Flash Speicher. Damit könnte man prinzipiell auch Esp Programmcode vom html / Java trennen. Es gibt auch Versuche auf github.com einen klassischen Webserver zu realisieren, der genau das tut.
Letztlich musst Du den Ansatz daran orientieren, was Du erreichen willst.
Gruss Stefan
Meine Idee wäre diese gewesen:
– JS-Quellcode in eine externe Datei und diese, ähnlich einer Bibliothek, inkludieren
– Quellcode ähnlich gestalten, wie dein HTML- Aufbau (String +=Qullcode, für jede Zeile)
-String im Anschluss in den HTML-Teil übergeben. ( String )
Könnte das klappen? Idee dahinter ist, das nicht jeder JavaScript Quellcode überall und immer Online abrufbar ist.
Kannst Du machen. Es gibt Seiten im Netz, mit denen Du Dir automatisch eine Datei als c-Code Escape Sequenz umsetzen lassen kannst. Das geht natürlich auch per Hand, ist aber sehr nervig. Das Ergebnis bindest Du ein. Und schon hast Du den benötigten Java Code als Array vorliegen. Musst dann nur noch bei der passenden URL (=Zugriff auf den Java Code) den Array ausgeben.
Gruss Stefan
Funktioniert Super.
Aber ist es normal das nach einiger Zeit die Grafik nicht mehr angezeigt wird ?
Hallo Lars,
Schau mal die vorhergehenden Kommentare an. Wenn Du NaNs in der Liste hast, dann bricht die Grafik ab. NaNs kommen meistens von Verkabelung mit Wackelkontakt. Manche Sensoren scheinen es auch hervorzurufen. In diesem Fall die NaNs herausfiltern.
Gruss Stefan
Hallo.
Ich bin aus Bulgarien.
Ich verstehe nicht Deutsch und daher mit diesem Beitrag wird dazu beitragen mit Google Übersetzer helfen.
Der Code funktioniert auf NodeMCU ESP8266 12E Version 1.0.
Ich brauche 3 Fragen helfen:
1. Wie die Zeit einzustellen für Bulgarien gültig sein (UTC+3 Uhr)?
2. Wie gebe ich Daten konsistent für Zeit, Temperatur und Luftfeuchtigkeit in der MySQL-Datenbank, die auf einem anderen Computer auf dem gleichen lokalen Netzwerk befindet?
3. Was und wo Code Messwerte hinzugefügt werden sollte zu ermöglichen (keine Zeit) auf dem LCD-Display angezeigt werden – Modell: DF Robot 0009 – Key Pad Shield für Arduino?
Es wird kein Problem sein, wenn ich in Englisch, Russisch oder Deutsch antworten. Ihrer Wahl.
Ich hoffe, dass Sie nicht zu viel belästigt werden, und ich bin sehr dankbar für ihre Hilfe und Unterstützung.
Bitte informieren Sie mich auch eine E-Mail, die Sie die Möglichkeit, die Zeit zu meinem Problem zu nehmen.
Mit freundlichen Grüßen und Grüße: Veselin Angelov
Hi Veselin,
hope you can do English because the auto-translations make it more difficult. To your questions:
1. The clock is UTC. To get to local time, have a look at the following lib: https://github.com/JChristensen/Timezone
Keep in mind that this lib relates seconds elapsed from 1.1.1970 whereas the NTP code here references to 1.1.2000. The NTP code contains the respective delta seconds. I have used that successfully on a ESP8266. In case you fail, I can send you code that I want to publish in a few weeks.
2. MySQL – have never tried that practically, but it should not be more than calling a correctly formatted URL in the local net. There is some sample-code above for creating a message via pushingbox. That is exactly the code your need. Look up for my post that contains the sendToPushingBox method.
3. Display – never used that board ut similar ones on Arduino. They take a lot of GPIOs to run. Would not try that. Consider an adapted version that works via I2C. Google e.g. for „hitachi 44780 i2c“. There are samples on the web for adding such a display to an ESP8266.
Good luck
Stefan
Sehr gutes Projekt, toll gemacht. Danke dafür.
Was mich reizen würde, wenn die „Gauge“ Live-Werte anzeigen würde. Den Code dafür könnte man
Spifffs mäßig im Filesystem ablegen. Dazu ist so eine Anzeige ja eig. da.
Mit freundlichen Grüßen, und weiter so…
Um die NAN Werte auszufiltern, reicht es die gelesenen Werte auf NAN zu testen.
Sofern ein NAN aufrtitt schreibt mein Code den vorherigen gültigen Wert ins Array.
Als globale Variablen:
float dhth_old, dhtt_old;
in void loop():
…..
float dhth = dht.readHumidity();
if (isnan(dhth))
{
pfHum[ulMeasCount % ulNoMeasValues] = dhth_old;
Serial.print(„DHTH Error „);
}
else
{
dhth_old = dhth;
pfHum[ulMeasCount % ulNoMeasValues] = dhth;
}
float dhtt = dht.readTemperature();
if (isnan(dhtt))
{
pfTemp[ulMeasCount % ulNoMeasValues] = dhtt_old;
Serial.print(„DHTT Error „);
}
else
{
dhtt_old = dhtt;
pfTemp[ulMeasCount % ulNoMeasValues] = dhtt;
}
…..
Danke für die tolle Vorlage.
Drei Tips wie die Grafik schneller lädt:
1. immer ca. 1400 Zeichen schicken (payload des TCP Packets = 1460) Damit werden es weniger Packete.
2. client.setTimeout(0); zu Beginn der Übertragung der Daten. Dann schickt der ESP die Packete direkt raus ohne 200-400 ms auf ein ACK zu warten das nie kommt.
3. Nicht mehr Daten schicken als die Grafik breit ist. Bei 600px Bildbreite macht es keinen Sinn 1000 Werte zu schicken.
Allein mit den Punkten 1 & 2 habe ich die Ladezeit auf ca. 4 Sekunden bekommen.
Hi.
Kannst Du ev. angeben, wo und wie die Anpassungen hingehören? Wäre super 😉
Nachtrag:
die Abweichungen der Feuchtemessungen bei meinem SHT25 Sensor waren auch zeimlich groß. Die Messerte waren nicht konstant, sondern rauschten um ca. 2%. Der Abstand zum ESP von 15cm reichte nicht.
Abhilfe: Messen wenn nicht gesendet wird.
Was passiert? Entweder der Sensor wandelt asynchron und übermittelt bei Abfrage den letzten Wert oder der ESP überträgt bei der Abfrage des Sensors im Hintergrund noch ein WLAN Paket.
Lösung: 50ms Delay direkt vor der Abfrage des Sensors. Jetzt habe ich eine super reproduzierbare Messung und kann den Sensor auch direkt auf dem ESP platzieren. (Sollte man nicht machen wegen der Abwärme 🙂
Jetzt kann ich die Dinger endlich in meine Unterputz Dosen einbauen :-)))
Hallo,
kann jemand den Sourcecode mit den hier geposteten Verbesserungen noch mal hochladen?
mfg
hallo, der webserver läuft ja auf port 80,
meine frage ist kann ich auch einen anderen nehmen z.bsp. 95 oder geht das nicht ?
MFG
Hallo Heiko,
klar kannst Du das ändern.
WiFiServer server(80);
Ändern auf
WiFiServer server(95);
Gruss Stefan
Ein super Projekt.
Hätte da nur 2 Fragen dazu:
1.) Ist es möglich eine Statische IP zu vergeben? Wenn ja wie mache ich das?
2.) Das Ändern der Messzeiten verstehe ich nicht ganz. Ich würde gerne über 30 Tage alle 30 Minuten
messen. Mit den Messungen die gespeichert werden können müsste es sich ausgehen. Nur kapiere ich
irgendwie das ganze nicht. Bis jetzt nur soviel verstanden das man bei der Variable MEAS_SPAN_H die Stunden angibt. Bei 30 Tagen wären es 720 Stunden. Nur den Abstand zwischen den Messungen.
Grüße
Boris
Hallo Boris,
zu Deinen Fragen:
1. Eine statische IP ist möglich; das musst Du aber über Deinen Router steuern. Wie das geht, hängt von Deinem Router ab. Bei den Fritzboxen kann man bei einem Netzwerkgerät unter den Details „immer die gleiche IP Adresse zuweisen“ auswählen.
Ich tippe mal darauf, dass Du einfach eine Möglichkeit suchst, auf den ESP zuzugreifen ohne immer mit einer anderen IP rechnen zu müssen. Man kann dem ESP auch sagen, dass er unter einem bestimmten Netzwerknamen erreichbar sein soll; ergänze einfach den Code wie folgt:
Im Browser sollte jetzt unter temphum/ die Seite des ESP kommen.
Zu 2.: Genau, 720h wären 30 Tage. Die Messungen würden dann ca. alle 25 Minuten erfolgen. Wenn es Dir wichtig ist, viele Daten abzulegen, nimm einen ESP12 und klemme eine SD Karte dran. Dann hast Du Speicher ohne Ende 😉 Der Seitenaufbau wird dann aber etwas komplexer.
Gruss Stefan
Ich habe dies gemacht:
IPAddress ip(192, 168, 0, 56);//statische ip
IPAddress gateway(192, 168, 0, 1);
IPAddress subnet(255, 255, 255, 0);
und dann:
// Connect to WiFi network
Serial.println();
Serial.println();
Serial.print(„Connecting to „);
Serial.println(ssid);
WiFi.config(ip, gateway, subnet);//statische ip machen
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED)
arbeitet nett…
Hallo Harry,
danke für den Code. Das geht aber nur, wenn Du am Router kein DHCP aktiviert hast. Für den geneigten Leser: Die Router kommen heutzutage alle mit DHCP als Standard und ich würde das auch empfehlen. Man kann DHCP ausschalten (und den Code so nehmen), muss dann aber für alle Netzwerkgeräte die IPs selbst zuweisen und verwalten.
Einfacher ist es eigentlich DHCP anzulassen und nur die Geräte zu fixieren, die man unbedingt festlegen will. Das geht dann über das Menü des Routers.
Gruss Stefan
P.S.: Statische IP a la oben bei DHCP kann klappen. Wird aber irgendwann schief gehen. Spätestens dann, wenn der Router die IP schon vergeben hat und der ESP sie dann statisch nehmen will…
Meine Router ist auf DHCP. Das erste Mal lass ich ihn sagen was das IP sein kann. Danach mache ich das im Sketch als festes IP. Und wenn der Router wieder eine IP benoetigt, weiss er dass diese belegt ist..
hallo,
schönes projekt, aber wohl zu kompliziert für mich. Die Rundinstrumente haben mir so gut gefallen…….
Die Anzeige funktioniert! aber laut „Tabelle“ sind ca 2/3 der Messungen fehlerhaft was zu diesem NAN führt…. damit geht dann natürlich die „Grafik“ nicht…. und die Zeit ist auch falsch.
das Filtern von diesem NAN funktioniert leider auch nicht, weil dann praktisch nichts gelogt wird. Scheitert bei mir wohl daran “ stray ‚\342‘ in program“ wenn ich diesen Filter mit dem“ retry-“ einfüge
ich benutze den DHT11, hab ich auch so eingestellt
Hallo Paul,
wenn Du dauernd NaNs bekommst bzw das Filtern zu dauerndem Filtern führt, dann hast Du vermutlich ein Kontaktproblem. Das stray Problem entsteht, wenn Du teils auch nicht sichtbare Sonderzeichen mit rein-paste-st. Versuche dann den Code selbst einzutippen.
Gruss Stefan
Hallo
bei mir hat es auf Anhieb geklappt mit den scatch.
Nur habe ich ein Problem meine feuchte hat immer 1 Prozent.
Habe auch einen zweiten Sensor getestet. Das gleiche Problem.
dth21 habe ich am laufen.
Mag ronny
Hallo Ronny,
keine Ahnung, woher die 1% Werte kommen. Ich würde folgendes probieren:
– Sensor als Vergleich an einem Arduino betreiben
– Den #define für den Sensor Typ verändern.
– In der Arduino IDE prüfen, ob es ein Update für die Sensor Lib gibt.
Gruss Stefan
Hallo gestern Abend habe ich nochmal getestet mit ein Nano das gleiche. Habe mal ein anderen bestellt.
Dht11 der geht.
Da hat wer was von ein Delay vor den erfassen der Werte geschrieben. Blicke da noch nicht ganz durch.
Kannst du mir mal nennen kleinen Tipp geben wo das ungefähr liegt.
Ich versuche auch die Daten in einer mysql Datenbank zu schreiben.
https://glaskugelsehen.wordpress.com/2014/05/15/tutorial-speicherung-von-arduino-messdaten-auf-webserver-und-deren-darstellung-teil-3/
Mfg ronny
PS. Super tutorial hier.
Lieber Stefan,
vorweg vielen Dank für deine Großzügigkeit, mit der du dein Können und Wissen zur Verfügung stellst.
Sowohl „ESP_TH_LOGGER V2“ als auch „Accesspoint“ laufen schon über Tage. Nun habe ich versucht den „LOGGER“ als Accesspoint umbzubauen. Das läuft zwar, aber die NTP_zeit funktioniert nicht mehr.
Meine Frage (Bitte): Kann der ESP als Accesspoint die NTP-Zeit beziehen?
Vielen Dank
Jürgen
Hallo Hr. Thesen,
schönes Projekt.
Läuft bei mir auch Problemlos, verwende jedoch keinen entsprechenden Sensor (DummyWerte).
Es sollen drei DS18B20 zum Einsatz kommen, also 3x diese schöne Grafik,muss ich entsprechend umbasteln.
Mal sehen ob ich das schaffe (absoluter Anfänger :-))
Meine Werte RAM-7472, Datenpunkte-3031, ist das gut oder schlecht?
Was ich jedoch fragen möchte, bekommt man die Uhrzeit auf deutsche Zeit (Sommer/Winter)?
Irgendwie paßt es aktuell im Winter nicht um eine Stunde, was bei UTC ja klar ist.
Danke, weiter so 🙂
Hallo Hr. Thesen,
das funktioniert so weit.
Ist eine automatische Umstellung Sommer/Winter auch möglich?
Danke.
///////////////////////////////
// connect to NTP and get time
///////////////////////////////
ulSecs2000_timer=getNTPTimestamp();
ulSecs2000_timer += 3600; // Winterzeit
//ulSecs2000_timer += 3600*2; // Sommerzeit
Serial.print(„Current Time UTC from NTP server: “ );
Serial.println(epoch_to_string(ulSecs2000_timer).c_str());
ulSecs2000_timer -= millis()/1000; // keep distance to millis() counter
Hallo Herr Stangl,
die automatische Umstellung geht. Habe ich auch praktisch laufen – das Projekt ist aber noch nicht publiziert. Ich schicke den Code per Mail.
Als Lösung habe ich diese Lib verwendet: https://github.com/JChristensen/Timezone
Gruss Stefan
Hallo Stefan,
kannst Du mir bitte auch den Code mit autom. Winter/Sommerzeit schicken?
Vielen Dank
Gruß Boris
Hallo
bei mir hat es auf Anhieb geklappt mit den scatch.
Nur habe ich ein Problem meine feuchte hat immer 1 Prozent.
Habe auch einen zweiten Sensor getestet. Das gleiche Problem.
dth21 habe ich am laufen.
Mag ronny
Tolles Projekt, sehr schoen.. Habe schon das ganze Haus mit Sensors belegt…
Hallo,
erstmal danke für diesen Hilfe.
Allerdings habe ich das Problem, ich kann mit dem Browser nicht verbinden.
Vom Router wird das ESP angezeigt, aber ich bekomme immer eine Zeitüberschreitung…
Kann wer was dazu sagen?
Grüße.
Tolles Projekt und gut beschrieben. Leider bekomme ich auch keine Werte. Deshalb die Fragen:
Datenleitung an D4 = GPIO2 richtig (nodemcu 1.0)?
Die tollen Rundinstrumente verschwinden nach dem ersten Aufruf- hängt das mit den Null-Werten zusammen?
Danke und mach weiter so!
Grüße
Harald
Jetzt geht’s. Wackler in der Stromversorgung, und bei nan-Werten will die Grafik dann auch nicht mehr. Danke noch einmal für die Anleitung!
Gruß
Harald
Hallo Stefan,
klasse Implementierung von dem Sensor und auch die Umsetzung mit den google api’s!
Ich würde gerne die Daten in excel weiterverarbeiten, siehst du da eine möglichkeit die Daten als Tabelle zu ziehen/bereitzustellen?
Gruß
Hendrik
Hallo Hendrik, du kann die Daten auch als Tabelle darstellen. Dann copy/paste in Excel.
Gruss Stefan
Super Projekt, sauber programmiert!
Eine simple (Behelfs-)Lösung für das Update der 1. Website mit den Anzeigen könnte auch ein
……
sein, der Wert ’29‘ wird dann anhand
sResponse +=ulMeasDelta_ms/1000
in den Html-Code generiert: Ohne zusätzliche URL wird damit die aktuelle Website periodisch neu geladen.
Habe ich geklaut bei: http://esp8266.fancon.cz/esp8266-web-hygrometer-dht11-arduino/esp8266-web-hygrometer-dht11-arduino.html
Siehe auch: https://en.wikipedia.org/wiki/Meta_refresh
Dies ist allerdings kein Ersatz für ein gezieltes Update, da die Zeiten (Update des Servers und Update der Website) auseinanderlaufen, aber es erfüllt seinen Zweck.
Gruß Tom
Super Projekt, sauber programmiert!
Eine simple (Behelfs-)Lösung für das Update der 1. Website mit den Anzeigen könnte auch ein
…<head><meta http-equiv=“refresh“ content=“29″><title>…
sein, der Wert ’29‘ wird dann anhand
sResponse +=ulMeasDelta_ms/1000
in den Html-Code generiert: Ohne zusätzliche URL wird damit die aktuelle Website periodisch neu geladen.
Habe ich geklaut bei: http://esp8266.fancon.cz/esp8266-web-hygrometer-dht11-arduino/esp8266-web-hygrometer-dht11-arduino.html
Siehe auch: https://en.wikipedia.org/wiki/Meta_refresh
Dies ist allerdings kein Ersatz für ein gezieltes Update, da die Zeiten (Update des Servers und Update der Website) auseinanderlaufen, aber es erfüllt seinen Zweck.
Gruß Tom
(Korrigierte Fassung)
Ich habe 2 Messungen mit je ESP8266-01 und DS18B20 in Betrieb.
1. Messung läuft seit x Monaten
2. Messung läuft seit x Wochen
Die 1. Messung zeigt jetzt (seit wann?) ein total falsches Datum und eine verkehrte Zeit an.
Die 2. Messung zeigt korrektes Datum und korrekte Zeit an.
Wer kennt dieses Verhalten?
Hallo
ich bin sehr traurig. Nach 7 Wochen warten auf den DHT22 liefert dieser falsche Hygrometer-Werte. Sie sind um runde 50% zu niedrig. Ebenfalls unter reinen Arduino Uno und anderen DHT22 Bibliotheken.
@Friedhelm
Lade doch mal deinen Code auf PasteBin dann kann ich es auch ausprobieren. DS18B20 habe ich welche hier.
Liebe Grüße
Petra
Hallo Petra,
ich habe noch keine Erfahrung mit PasteBin.
Gruß
Friedhelm
Wenn man alle Serial Print und das Serial Beginn auskommentiert, gibt es ein klein wenig mehr freien RAM für mehr Daten.
Diese Zeile enthält einen Bug
sResponse = F(„Aufrufzähler=“);
Muss heißen
sResponse = F(„Aufrufzähler=“);
Das integrieren von Timezone ist mir zu kompliziert. Das Beispielscript hat keine Ähnlichkeit mit der Zeitfunktion beim Temp-Feuchte Sensor-Script. Gibt es vielleicht einen fertigen Internet Timeserver der nur die Deutsche Zeit ausgibt und nicht diesen UTC Müll?
Hallo Petra,
die beiden von Dir angegebenen Codezeilen sind gleich. Im Code steht:
Scheint korrekt zu sein.
Mit den Serial.print Kommandos kannst Du etwas RAM sparen. Auch hier könnte man das F Macro nutzen, um die RAM Belastung zu senken.
Timeserver mit deutscher Zeit gibt es meines Wissens nicht. Die Dinger sind per Standard auf UTC definiert.
Gruss Stefan
Das minus 2 bei Fontsize ist falsch. Ohne das Minus wird es korrekt angezeigt.
Hallo Petra,
die FONT SIZE -2 macht den Footer kleiner (vgl. Screenshots oben). Wenn Du das Minus wegläßt, wird er größer. Ich wollte den Footer klein haben, daher mit Minus.
Gruss Stefan
Super, ich habe das Script etwas umgeschrieben damit es mit HTU21D I²C Sensoren arbeitet und dazu noch eine kleine Sommer- Winterzeit Regel damit die Uhrzeit stimmt. Läuft prima auf einem ESP-01
Interesse das Script per Email zu erhalten und als zusätzliche Variante hier zu veröffentlichen?
Bekommst einen Ping per Mail.
Hallo Stefan,
Danke für das zur Verfügung stellen all dieser Beispiele. Ich hatte bisher nur mit einer Sache Probleme: das mit dem WiFi.hostname(„myHostName“) will nicht funktionieren. Die Seite mittels IP-Adresse aufzurufen funktioniert bestens. Aber mit dem Hostname komme ich nicht weiter. Wenn ich im Firefox-Browser z.B. http://myHostName/ eingebe, dann kommt nicht die Seite des Webservers, sondern es wird eine Internetsuche gestartet für diesen Begriff.
Muss man da sonst noch was beachten?
Gruss,
Daniel
Hallo Daniel,
Da es bei mir wunderbar klappt, lass uns mal jenseits des Esp suchen. Klappt es, andere Netzwerkgeräte mit dem Netzwerknamen zu erreichen?
Es könnte auch am Router liegen. Ich hatte mal eine Easybox, die diesbezüglich eine wahre Katastrophe war.
Gruss Stefan
Hallo Stefan,
das ging ja schnell, so spät am Abend!
Also den Drucker kann ich z.B. Problemlos ansprechen. Der ist allerdings verkabelt, und nicht Wireless mit dem Router verbunden. Hier kommt möglicherweise meine etwas seltsame Routerkonfiguration ins Spiel: Ich habe zuerst einen Router vom ISP an der Adresse 192.168.1.1. Danach einen Wirelessrouter von D-Link (DIR-605L, an der Adresse 192.168.0.1) mit welchem ich mein WiFi-Netz erzeuge, in welches sich auch der ESP einlogt. Der ESP erhält per DHCP die Adresse 192.168.0.102. Meine Kenntnisse sind da leider sehr gering. Kann es sein, dass nur Adressen des ersten Routers erkannt werden? Aber dann würde das ja mit der IP-Adresse auch nicht klappen?
Vielen Dank für Deine Hilfe!
Daniel
Hallo Stefan,
am 02.03.2017 berichtete ich, dass eine Messung mit dem ESP8266-01 (Temperatur_aussen) seit einiger Zeit falsches Datum und falsche Uhrzeit liefert. Nun ist die Messung komplett ausgefallen.
Interessant ist, dass auch die 2. Messung (Temperatur_innen), die bislang korrekte Werte lieferte, ebenfalls ausgefallen ist.
Haben Sie irgendeine Idee / Vermutung?
Gruß
Friedhelm
Hallo Friedhelm,
Ist der Esp defekt oder der Sensor? Hast Du saubere 3.3V Spannung zur Versorgung genommen?
Gruss Stefan
Einer der beiden ESP arbeitet nach einem neuen Upload wieder einwandfrei. Den anderen habe ich ohne weitere Kontrolle ersetzt. Beide Sensoren sind ok. Ich denke, dass die 3,3 Volt sauber sind; sie werden aus 5 Volt mittels Step-Down Wandler gebildet.
Ich kann aber einmal ein Oszi anschließen.
Besten Dank, Gruß
Friedhelm
Hi Friedhelm,
das Problem kenne ich nicht. Ich habe ESPs, die seit über einem Jahr laufen. Das Problem, dass sich ESPs im Betrieb selbst dauerhaft „erlegen“, hatte ich nur mit der lua Firmware (NodeMCU).
Gruss Stefan
Hallo Stefan,
zur Info:
# Ich arbeite mit der Arduino IDE
# Ihre Frage zur Qualität der Spannungsversorgung:
> 5 V mit Voltkraft USPS 600
> 3,3 V mit AMS 1117 (Linear Regulators lt. Datenblatt, StepDown lt. Verkäufer)
> Wechselspannungsanteil, sowohl bei 5 V wie auch bei 3,3 V,
Sprung auf ca. 20 bis 25 mV, Sprung zurück auf ca. 10 mV,
linear in ca. 0,9 ms auf 0.
Messungen unbelastet, 22 Ohm, 10 Ohm.
Also, Temperaturmessungen weiterlaufen lassen, abwarten und Tee trinken!
Besten Dank, viele Grüße
Friedhelm
Dann liegt es wohl nicht an der Spannung. Komisch.
Der AMS1117 ist übrigens definitiv ein linearer Regler.
Könnte es sich um ein millis Rollover Problem handeln? – sind die Dinger zufällig immer nach 42 Tagen off? – Dann sollten sie allerdings auch nach einem Reset / Powercycle wieder laufen.
Gruss Stefan
Hallo Stefan,
zunächst vielen Dank für dieses wunderbare Projekt! Da ich seit zig Jahren nicht mehr programmiert habe, ist das ein toller Einstig in die Sprache und ich kann ständig neue Tricks entdecken.
Ich habe einige Umstellungen vorgenommen (Sommerzeit, Byte für Feuchte für mehr Datenpunkte, 4 Tage Messzeit). Läuft alles. Jetzt sieht nach allerhand Tagen Laufzeit die Startseite allerdings seltsam aus:
„Temperatur & Feuchtigkeitsverlauf – Seiten laden länger:
Grafik Tabelle
Aufrufzähler=50 – Verbindungszähler=1 – Freies RAM=3160 – Max. Datenpunkte=4029
Stefan Thesen 05/2015“
Die beiden Grafiken fehlen, Überschrift und Hintergrundfarbe auch. Die links zur Grafik und Tabelle gehen aber.
Bei einem externen Aufruf (Handy) geht die Seite gar nicht mehr.
Woran kann das liegen?
Andere Frage: woher kommen die leeren Aufrufe die mit stopping Client beendet werden? Für einen Bug im System sind die eigentlich zu sporadisch.
Viele Grüße
Gerald
Hallo Gerald,
vermutlich hast Du das NaN Problem, das weiter oben beschrieben ist. Kontakte können ein Thema sein. ggf NaNs im Code rausfiltern.
Wenn Du die Seite von außerhalb des Hausnetzes sehen möchtest, müßtest Du Dich in die Theman DynDNS Services und Portforwarding einlesen. Generell sind Netzwerkgeräte im Hausnetz aus Sicherheitsgründen nicht aus dem Internet erreichbar. Das ist eine Basiseigenschaft aller Router.
Gruss Stefan
Hallo Stefan,
vielen Dank soweit.
Sorry, das hatte ich nicht erwähnt. Das NaN Filter hatte ich gleich zum Anfang eingebaut, da ich ohne Sensor gestartet habe. Wie hier oben beschrieben mit Nutzung der jeweils letzten vorhanden Daten bzw. 0 als ersten Wert.
Der Zugriff von außen an sich ist über die Fritzbox geklärt. Wie gesagt, das Diagramm und die Tabelle kamen auch weiterhin, auch von außen, nur bei der Startseite gab es Probleme. Der ESP hatte sich auch nicht aufgehängt o.ä. Nach einem Reboot geht jetzt alles wieder ohne irgendeine Änderung. Ich würde das System aber gern für stabile Langzeitanwendungen einsetzen.
Kann es sein, dass der Speicher bei vielen Aufrufen nicht sauber aufgeräumt wird? Damit habe ich keinerlei Erfahrung. Einige wenige Änderungen hatte ich ja vorgenommen.
Viele Grüße
Gerald
Hallo Gerald,
prima, dass es voran geht. Der Beitrag ist schon ein paar Tage her… Ich hatte nach Memory Leaks gesucht und würde das beim geposteten Code nicht als Ursache vermuten (ausschließen würde der geneigte Programmierer diese wohl nie 😉 ). Der Code bestimmt am Anfang das freie RAM, hält etwas frei und schnappt sich den Rest. Lass doch testweise einfach mal mehr frei.
Am ESP selbst sollte es nicht liegen. Ich habe ESPs mit einer Laufzeit bis zu 200 Tagen; danach musste ich an die Sicherung. Der ESP ist auf der Reset Leitung empfindlich. Da kann auch eine Ursache liegen, wenn in unmittelbarer Umgebung stärkere Ströme geschaltet werden.
Gruss Stefan
Hallo Stefan,
vielen Dank für deine Geduld!
Ich hatte ja vor dem Reboot nichts geändert, also mal schauen ob der Fehler wieder auftritt. Selbstheilung ist selten. Im Moment läuft alles. Ein ungewollter Reset kann es nicht sein. Der ESP lief und die Daten waren im Diagramm und in der Tabelle alle noch da.
Bis später! Viele Grüße
Gerald
Hallo,
erst einmal ein Lob für dieses schöne Projekt. Ich habe das Ganze mal mit Nan-Filter nachgebaut und es funktioniert eigentlich auch alles wunderbar. Da ich ein etwas älteres Modell des ESP8266-01 (v3.0) verwende, habe ich das Problem mit dem ungewollten Reset des ESP. Mal nach 20 Minuten und mal erst nach ner Stunde. Ich habe auch schon die Tipps aus einem anderen Beitrag dieser Seite ausprobiert. Reset mit 10kOhm auf VCC plus 100nF Kerko Pufferkondensator von Reset nach GND. An Spannungsversorgung von ESP und DHT22 jeweils einen 100µF Elko. Auch diverse Spannungsquellen habe ich versucht. Das hat aber leider alles nicht geholfen. Gibt es vielleicht noch eine andere Schraube an der man drehen könnte um das Problem zu lösen? Zum Beispiel den freizuhaltenden Speicher vergrößern?
Gruß
Herby
Hallo Herby,
ich habe den Code aktuell nicht in Betrieb, aber diverse andere ESP Codes, die wochenlang stabil laufen. Der freie Speicher ist in gewisser Weise eine experimentelle Sache und hängt ggf auch mit der SDK Version zusammen. Im Code gibt es folgende Zeile:
#define KEEP_MEM_FREE 8192
Hier wird definiert, wieviel Speicher frei bleibt. Erhöhe mal testweise auf 16384. Dann bleiben 16kB frei.
Gruss Stefan
Hallo Stefan,
danke für die Antwort. Ich hatte in der Zeile #define KEEP_MEM_FREE 8192 (bei mir stand allerdings ein Wert von 10xxx) schon mal verschiedene andere Werte getestet, aber ohne Auswirkung auf die schlechte Laufzeit.
Mit dem Wert 16384 den du mir genannt hast, hält der ESP bisher am Längsten durch. Mindestens einen Reset gab es hier aber auch schon.
Das gibt wieder Hoffnung das es doch noch mit meinem v3.0 ESP geht. Ansonsten muss ich es mal mit einem aktuelleren ESP versuchen.
Gruss
Herby
Welche Sdk Version nimmst Du? Ich habe bei meinen Anwendungen kein beobachtbares Memory Leak aus dem aktuellen Sdk.
Auf dem ESP ist die v0.9.2.2 AT Firmware. Zur Zeit teste ich mit einem v2.1 ESP8266-01 mit gleicher Firmware und der hält mit 16384 freiem RAM und eingestellten 96 Stunden Aufzeichnung (bisher) gut durch. Eine andere Firmware werde ich bei Gelegenheit auch mal testen. Meinen gesteckten Versuchsaufbau möchte ich auch nicht mehr ausschliessen, obwohl ich diesen mehrfach geprüft habe. Mit gelöteten Verbindungen gibt es eine Fehlerquelle weniger.
Hallo Herbert,
Sie AT Firmware ist nicht mehr drauf, wenn Du mit der Arduino IDE ein Programm aufspielst. Du verwendest dann die Arduino IDE und diese verwendet das Espressif Sdk. Die Version des Espressif Sdk ist hier wichtig. Das sollte nicht zu alt sein. Schau mal in der Arduino IDE. Dort kannst Du im Boardmanager die Version nachsehen und ggf auch ein Update machen.
Gruss Stefan
Hallo,
ja, ich nutze die Arduino-IDE und die SDK ist die aktuelle 2.3.0.
Mit meinem v2.1 ESP scheint es zu funktionieren. Der läuft jetzt schon über 1,5 Tage ohne Reset auf meinem gesteckten Versuchsaufbau. Meine beiden v3.0 ESP halten meistens keine 2 Stunden durch. In der Arduino-IDE muss ich bei v2.1 und v3.0 auch den Flash-Mode von DIO auf DOUT setzen um erfolgreich was hoch zu laden. Das ist ja eigentlich nicht nötig.
Gruss
Herby
Hallo,
hier noch mal eine kleine Rückmeldung. Ich habe jetzt alles mal auf Platine gelötet, aber das brachte keine Besserung. Beide v3.0 halten immer noch keine 2 Stunden durch und der v2.1 schafft es auch nur maximal 2 Tage. Ich hatte noch einen vierten ESP, auf dem aber keine Version aufgedruckt ist. Dieser läuft bisher ohne Probleme.
Mir kommt es fast so vor, als seien v3.0 und v2.1 mit dem Sketch etwas überfordert. Mit Deinem Webserver-Sketch laufen die Dinger wunderbar und ohne Ausfälle.
Gruss
Herby
Hallo Herby,
Die Version sind Nodemcu Versionen? – ich hatte bisher keine Stabilitätsunterschiede zwischen den Esps. Ich haber aber auch noch nie Nodemcus genutzt.
Gruss Stefan
Hallo,
Es sind ganz normale ESP8266-01. Auf einem ist v2.1 und auf zweien v3.0 aufgedruckt. Auf dem vierten ist keine Version aufgedruckt, aber dafür die Pinbezeichnungen. Auf Bildern im Netz sieht man auch oft den Aufdruck AI-Cloud Inside. Dieser fehlt bei meinen ESPs komplett. Der mit v2.1 hat sogar eine schwarze Antenne. Ich habe jetzt noch ein paar ESPs bei einem anderen Händler bestellt. Mal sehen ob die sich „normal“ verhalten.
Gruss
Herby
Hallo Stefan,
hab von diesem tollen Projekt die ESP_TH_Logger.zip sowie ESP_TH_Logger_V2.zip heruntergeladen, wobei die V2 nur mit rechtsklick zu laden war, aber unbrauchbar, weil nicht zu öffnen.
Kannst du mir einen anderen link oder Senden per PM bieten?
Gruss Michel
Ups – kümmere ich mich drum.
Gruss Stefan
Hallo Stefan,
Genial der Feuchtigkeits-und Temperatur Logger.
Was mich ein wenig daran stört, ist die UTC Zeit, die ja 2 Stunden nachgeht.
Kann man das in dem Sketch irgendwo ändern ??
Ebenso diese Ellenlange LOG Datei.
Unter welcher Variable kann ich die kürzen ??
Sonst kann ich nur sagen, Super Programm.
Werde mich als nächstes an die Sonoff’s wagen
ESP_TH_Logger_V2.zip lässt sich immer noch nicht laden, wann kann man damit rechnen ??
MfG
Erni
Hallo Stefan hab da ein paar Fragen…
Hab Aktuell ein Bodenfeuchte Messung mit einem Esp8266 laufen. Unswar den hier.
http://www.instructables.com/id/ESP8266-Soil-Moisture-Sensor-With-Arduino-IDE/
1. Ist es möglich beide Projekte miteinander zu betreiben? Ich meine beide auf einem NodeMCU..
2. Wie lange darf das Kabel vom DHT21 zum NodeMCU sein??
Gruß
Hallo Orhan,
Die beiden Sensoren sollten problemlos parallel an einem Esp laufen. Der Bodenfeuchte Sensor geht über den Adc; Luftfeuchtigkeit und Temperatur über die digitalen Pins.
Ich kann Dir auch keine Erfahrung geben, wie lang das Kabel zum DHT maximal sein kann. Das Signal wird auf einen hochohmigen PIN übertragen. Insofern hast Du wohl eher keine Probleme, solange Du das Kabel ausreichend abschirmst. Evtl die Versorgungsspannung sensorseitig mit einem Elko abstützen.
Gruss Stefan
Hallo ja ich weiß das der ESP mehrere Sensoren auf einmal packt.
Meine Frage war ob ich beide Sketchs zusammenfügen kann?? Und natürlich wie?
Mir geht es nicht um den ESP. Ich will nur nicht für jeden Sensor ein ESP der Funkt.. : )
Hier eine Photomontage
https://www.dropbox.com/s/t65poqm6p97gpbu/TH_log_Screenshot_Main-624×1109.png?dl=0
Gruß
🙂 da wirst Du wohl beide Codes verstehen und programmieren müssen. Ernsthaft: ohne Kapieren ineinander Kopieren geht nicht.
Hallo Stefan
Hab den ESP TH logger Alte Version runtergeladen. Die Neue existiert leider nicht.
Hab noch über Bibliotheken Verwalten DHT Sensor Library installiert.
Sketch kann nicht kompiliert werden.
Hier die Fehlermeldung:
C:\Users\Viper\AppData\Local\Temp\arduino_build_657436\preproc\ctags_target_for_gcc_minus_e.cpp“
In file included from D:\Eigene Dateien\Dokumente\Arduino\libraries\DHT_sensor_library\DHT_U.cpp:22:0:
D:\Eigene Dateien\Dokumente\Arduino\libraries\DHT_sensor_library\DHT_U.h:25:29: fatal error: Adafruit_Sensor.h: No such file or directory
#include
^
compilation terminated.
Bibliothek ESP8266WiFi in Version 1.0 im Ordner: C:\Users\Viper\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.3.0\libraries\ESP8266WiFi wird verwendet
Bibliothek DHT_sensor_library in Version 1.3.0 im Ordner: D:\Eigene Dateien\Dokumente\Arduino\libraries\DHT_sensor_library wird verwendet
exit status 1
Fehler beim Kompilieren für das Board NodeMCU 1.0 (ESP-12E Module).
Kannst du das Problem erkennen?
Versuch mal die Beispiele der Bibliothek zu übersetzen. Der findet includes nicht.
Das Problem hatte ich gerade auch, Adafruit hat ihre die Librarys neu organisiert. In einen Sensorspezifischen Teil (hier DHT) und einen allgemeinen Teil, die „Adafruit Unified Sensor“-Library die bei vielen Sensoren die Basis bildet.
Die muss man jetzt einfach auch installieren und schon ist dieser Fehler weg.
Hallo,
mit dem ESP8266-01 wollte ich mich einarbeiten.
Das Programm WLAN Lufttemperatur und -feuchte Logger mit grafischer Darstellung für ESP8266 habe ich mit Arduino Kompiliert und Erfolgreich auf den ESP8266-01 geladen.
Leider bleibt das Programm in der while (WiFi.status() != WL_CONNECTED) hängen.
Muß ich noch etwas in der Fritz-Box einstell?
Warum Connected er nicht?
Für eine Antwort wär ich sehr dankbar
Gruß
Karl-Heinz
Es war mein Fehler.
Ich hatte noch einen Schreibfehler im Passwort.
Jetzt ist alles OK.
Gruß
Karl-Heinz
Hello, Stefan!
After a long period of stagnation, it is time again to start dealing with your software for „HTTP 1.1 Temperature & Humidity Webserver for ESP8266 for ESP8266 adapted Arduino IDE“.
We commented in part on these questions in your blog on 27.August 2016.(Your post)
Again I encountered two problems I can not solve.
1. What code should be entered in the UTC module to get a time that is the same as the local one Time for Bulgaria – Time zone – Bulgaria, Greece, Romania и т.н. – EET;EEST).
Definitely, I did not manage. 🙁 And I need help!
2. How can I convert the value of Relative Humidity to Absolute Humidity?
I’ve made some unsuccessful attempts to use the following conversion form but I can not integrate it into your code.
I think the formula works properly. If there is a program line – float h = dht.readHumidity(); And introduce the following
conversion – float AH = (6.112*2.71828*((17.67*t)/(t+243.5))*h*2.1674)/(273.15+t); – I get the requested value of
Absolute humidity in %.
How can it integrate into your code?
This way of transformation I found here: https://carnotcycle.wordpress.com/2012/08/04/how-to-convert-relative-humidity-to-absolute-humidity/
With respect: Veselin Angelov
Hallo, ich nutze ein NodeMCU ESP8266 mit einem DHT22, leider meckert er mit dem Code beim Kompilieren immer:
D:\Downloads\ESP_TH_Logger_V2\ESP_TH_Logger\ESP_TH_Logger.ino:12:22: fatal error: time_ntp.h: No such file or directory
#include „time_ntp.h“
^
compilation terminated.
exit status 1
Fehler beim Kompilieren für das Board NodeMCU 1.0 (ESP-12E Module).
Das Board geht aber mit einem anderen Code, dieser ist allerdings nicht grafisch…
Eine Idee woran das liegen könnte?
Vielen Dank
Hast Du alle Dateien ausgepackt? Klingt so, als ob Du nur die Ino Datei ausgepackt hast.
Gruss Stefan
Ja ich habe alle ausgepackt in ein Ordner und die Info dann über Arduino 1.6.3 geöffnet und versucht dann hochzuladen.
Dann kam dieser Fehler.
Hallo Christian,
die Fehlermeldung sagt: Ich finde die Datei time_ntp.h nicht. Diese ist im zip-Paket mit dabei. Der (jeder) Compiler sucht erst mal im Verzeichnes des Quellcodes und danach im Include Pfad. Ersters langt, wenn Du alles in ein Verzeichnis packst.
Gruss Stefan
Dann verstehe ich es nicht. Ich habe alles in ein Verzeichnis entpackt….
Okay, jetzt geht es. Hatte nicht gesehen, dass er immer die Ino in einen extra Ordner kopiert.
Nun habe ich einen DHT22 Sensor und habe auch schon alles angepasst, er spuckt mir aber keine Daten aus 🙁 Die Systemzeit ist auch falsch . Eine Idee?
Also nun geht alles. Vielen Dank für den Code! Wurde eigentlich das Problem mit der Sommerzeit gelöst? Wäre jetzt das einzige Problem, läuft sonst!
🙂 Das ist kein Problem. NTP besorgt die UTC. Und genau die wird angezeigt (siehe Text).
Man kann UTC natürlich auch in die lokale Zeit umrechnen. Gibt es auch als Lib https://github.com/JChristensen/Timezone
Ich macht mal ein Tutorial fertig, wenn ich dazu komme.
Gruss Stefan
Endlich mal ein geniales, sofort funktionierendes Projekt! Danke dafür!
Ich nutze einen NodeMCU ESP8266 mit einem DHT22. Code geladen, die Bauteile verbunden und nach 10 Minuten lief bereits alles stabil. Einfach genial!
Jetzt noch ein Update für die lokale Zeit, dann sind hier wohl alle glücklich.
Nochmal Danke!
Beispielcode für pure Sommer/Winterzeitfeststellung
Hallo Petra,
ich habe deinen Sketch ausprobiert mit der Ergänzung #include „time_ntp.h“
Im setup geändert: setTime(0, 59, 50, 24, 10, 2017);
Im loop geändert:
utc = now();
utc -= 946684800UL; // go from 1970 to 2000
Serial.println(epoch_to_string(utc).c_str()); //dafür time_ntp.h nötig
somwin = myTZ.utcIsDST(utc) + 1; // myTZ.utcIsDST(utc) liefert 0 oder 1
Serial.println(somwin);
Ausgabe:
0:59:59 – 24.10.2017
2
1:00:00 – 24.10.2017
1
1:00:01 – 24.10.2017
1
Die Sommerzeit springt also schon am 24.10. auf Winterzeit und nicht am 29.10.
Wo ist der Fehler?
setTime(0, 59, 58, 29, 10, 2017); // UTC Zeit mit zwei Sekunden später ist Winterzeit Deutschland
Der Sprung klappt. 2 2 1 1 im Timezone Beispielcode
Die time_ntp.h ist bei mir unberührt. Ich habe alles nur in der time_ntp.cpp stehen.
Die utc = now sowie das settime stehen bei mir in der „String epoch_to_string(unsigned int epoch)“ Funktion
In der Loop habe ich das um eine Zeitkorrektur bei Start zu erzwingen.
if (firststart == 1) { // NEU
firststart = 0;
epoch_to_string(ulSecs2000_timer).c_str();
ulSecs2000_timer=getNTPTimestamp();
ulSecs2000_timer -= millis()/1000; // keep distance to millis() counter
}
Ich bin keine Programmiererin und wurste irgendwie etwas zusammen, hauptsache es geht irgendwie. Vielleicht hilft es als Anregung für etwas eleganteres.
Hallo Stefan,‘
ich bin geradezu euphorisch, Deinen Blog hier gefunden zu haben. Ich werkele schon eine ganze Weilse an diesem ESP8266 herum, mit Mehr oder weniger Erfolg. Vor ein paar Wochen bin ich dann auf das WEMOS board gestossen und ’schwupps ‚, waren alle diese Initialisierungs-Riten hinweg und es gelang mir, fast jedes Programm zu laden, nachdem ich die ai-thinker-v1.1.1.bin mit dem nodemcu–flasher-master ESP8266Flasher.exe Programm in den WEMOS D2 geladen habe. Ich konnte auch Dein Programm auf Anhieb laden und es läuft. (allerdings noch ohne DHT, den ich morgen mal anschliessen werde). Vor allem gefällt mir die standalone version mit der Verwendung von google-Grafik Möglichkeiten, also ohne cloud oder Bezahldienste. Grosses Lob von meiner Seite. Ich bin ein Fossil und versuche mich mit 72 Jahren noch ab und an, um fit zu bleiben und will ein System für eine kleine Bastelei im Funkamateur-Sektor verwenden. Dieses Projekt ist sehr gut dokumentiert und bietet eine hervorragende Basis zum weiterentwickeln.
LIebe Grüße aus Stassfurt
Hallo – Nachtrag – ich habe einen DHT11 zum Laufen bekommen. Durch Trial&Error habe ich herausgefunden, dass es von den 3 Typen der genannte ist. Tolles Programm. Ich werde es weiterempfehlen 🙂
Hallo,
erstmal vielen Dank für die tolle Anleitung!
Ich versuche damit den Einstieg in die Materie zu finden.
Ich habe dieses Board:
https://www.amazon.de/AZDelivery-NodeMCU-ESP8266-ESP-12E-Development/dp/B06Y1ZPNMS/
(Eingestellt in der IDE 1.8.5 als NodeMCU 1.0 (ESP-12 E Module)
Blinkaufgabe klappt sehr gut.
Nun zu dem Nachbau deines Pogrammes:
Er meckert sofort, dass Dateien fehlen (u.a. DHT.h). Diese habe ich im Internet gesucht und in das Verzeichnis gepackt. So auch mit der Datei „Adafruit_Sensor.h“ – trotzdem meckert er weiter.
„In file included from sketch\DHT_U.cpp:22:0:
sketch\DHT_U.h:25:29: fatal error: Adafruit_Sensor.h: No such file or directory
#include
compilation terminated.
exit status 1
Fehler beim Kompilieren für das Board NodeMCU 1.0 (ESP-12E Module).“
Mache ich was falsch? Müssen die Dateien eigentlich von sich aus da sein?
VIELEN DANK FÜR DEINE HILFE!
hab es nun hinbekommen – habe die Bibliotheken nun manuell hinzugefügt und es klappt! TOP!
Hallo Stefan,
danke erstmal für dein tolles Projekt.
ich hab eine Frage. Bei mir ich hab kein DHT verwendet sondern ein Max30100 und ein ESP8266.Aber das Problem ist dass ich keine grafische Darstellung bekomme.Woran könnte das Problem denn liegen?
Hallo Nelly,
Ich kenne den Sensor nicht. Schau mal in die Rohdaten rein. Kann es sein, dass da NaN Einträge drin sind oder falsch formatierte Zahlen? Der Google Code ist recht schnell beleidigt, wenn ein einziger fehlerhafter Eintrag drin ist.
Gruss Stefan
Hallo Stefan,
ich habe deinen Sketch für den 1Wire-Sensor (Dallas DS18B20) erweitert.
Die NaNs vom DHT werden abgefangen, damit die Grafik klappt.
Bildschirmfotos und Sketch findet man in http://www.rsindermann.de/tmp.
Gruß Rainer
Hallo Rainer,
zunächst mal vielen Dank für euren Code!
Ich konnte den Code von dir mit zwei DS18b20 an einem ESP8266-01 problemlos zum laufen bringen, wollte allerdings die Gauges und Tabellespalten für den DHT ausblenden.
Leider hab wich wohl zuviel auskommentiert oder es muss noch was ergänzt werden, Grafik und Gauges werden gar nicht mehr angezeigt, die Tabelle ist auch nicht os wie sie sein sollte.
Nun bin ich leider absoluter C++ Neuling, hätte daher vieleicht jemand Lust und Zeit sich das mal anzuschauen? Ich komm irgendwie nicht weiter…
https://ghostbin.com/paste/m6z6d
Vielen Dank und Viele Grüße
Juri
Vielen Dank für die tolle Anleitung!!!
Es ist mein erstes Projekt als Einsteiger.
Gestolpert bin ich über die PIN Belegung, der beschriftete Pin D2 ist bei mir in Wirklichkeit 4. Muss man erstmal wissen…
Nun klappt eigentlich fast alles. Nur leider hat mein DHT22 immer mal wieder zwischendurch einen Wert, den er nicht liefert. Dadurch ist dann die Zeitreihe grafisch nicht mehr sichtbar.
Wäre es nicht besser, wenn der Code es abfängt?
Beispiel:
Wenn der Wert „nan“ ist, dann messe nochmal (max 3x), wenn er immer noch falsch ist, dann nehme den letzten gültigen Wert + 0,01 Grad.
Dies als Feedback.
DANKE nochmals!
Des weiteren hat er nach Neustart oft die Uhrzeit nicht – und bekommt sie dann auch nicht mehr.
Ich habe den NTP Code in diversen Projekten drin und bei mir uns Bekannten keine Probleme. Generell ist NTP fehleranfällig, weil ein UDP Paket rausgesendet wird und man auf Antwort hofft. Der Code wartet vergleichsweise lange. Hast Du eine spezielle Netzwerksituation? – sehr lange Roundtrip Times o. ä?
Vielen Dank für Deine schnelle Antwort!
Eigentlich nicht. Ich habe eine Fritzbox (16 Tausender Leitung), 5 Meter entfernt, vollen Empfang. Hier war es selten, dass die Uhrzeit fehlte. Jetzt habe ich den Sensor draußen und von 10 mal neu starten 10 mal keine Uhrzeit (Firtzbox zeigt 40% Empfangssignal an). Aufruf der Seite kein Problem.
Es gibt so diverse Beschriftung an den Esp Modulen. Leider haben sich nicht alle an die originalen Bezeichnungen des Herstellers gehalten.
Die NaNs deuten eigentlich auf ein Problem hin. Meist ist es eine unsaubere Verkabelung oder mangelnde Spannungstabilität. Code zum Abfangen der NaNs ist in den Kommentaren. Ist auch eine Lösung, wenn es anders nicht stabil wird.
Gruss Stefan
Danke, will nicht ausschließen, dass es an mir liegt. Bin Anfänger. Jeder ca. 20 Wert ist NaN.
Habe 3 Netzteile probiert. Keine Änderung. Ich habe als Board ESP8266 NodeNCU V3.0
DHT22 habe ich als Board mit fertigen Kondensator und Widerstand (5100). Verkabelung 5 cm mit Kabel, die beim DHT22 Board dabei waren.
In den Kommentaren kommt es sehr häufig vor mit den fehlerhaften Daten. Eine Schleife zur Korrektur dürfte für Dich doch ein Einzeler sein, oder? Ich selber bin noch nicht so weit, den ganzen Code zu verstehen/die Stelle zu finden und zu ändern. Vielleicht findest Du ja die Zeit dafür.
So oder so auf jeden Fall danke!
Hallo Eckhard,
wenn die Fehler sehr oft kommen, würde ich vorschlagen nochmal in eine Ursachensuche zu gehen. Die NaNs zu fischen oder NTP zu optimieren wäre danach dran.
Wenn jeder 20. Wert ein NaN ist, dann ist irgendwas an der Kommunikation faul. Probiere den Sensor mal an einem normalen Arduino. Alternativ versuche mal die 16 in den folgenden Zeile zu ändern (15, 17 etc):
Mit der Zahl wird in der Lib eine Adaptierung auf die Performance des Mikrocontrollers vorgenommen. Ich hoffe mal, dass Du damit die Fehlerzahl massiv senken kannst.
Gruss Stefan
Hallo Stefan,
wirklich eine Super Sache dein Logger, dadurch habe ich es selbst innerhalb kürzester Zeit zum laufen bekommen. Vielen Dank
Ich habe für meinen Fall den BME280 als Sensor genommen und diesen implementiert, da der BME auch noch den Luftdruck misst wollte ich Ihn auch über einen Google chart zur Anzeige bringen. Einen zweiten chart mit fixen werten habe ich auch eingebaut bekommen, jedoch scheitere ich immer daran eine zusätzliche dynamische Liste zu implementieren.
Ich habe verstanden, dass fuer den google chart extra eine Liste erstellt wird die die nötigen Werte enthält. Ich habe eine zweite liste erstellt, die nur den Zeitstempel und den Druck enthält wie nun aber an die google chart übergeben? ich habe dieselbe Methode angewandt wie für den ersten chart., also: unsigned long ulSizeList = MakeList(&client,false); // get size of list first Temperature and Humidity
aber irgendwie klappt das nicht. Kannst Du mir einen Tip geben?
Wenn Du Interesse ander der BME integration hast kann ich den Code gerne zur Verfügung stellen.
Vielen Dank
Gruss
Hallo Daniel,
hier eine BME280 Version mit paar Extras
https://www.file-upload.net/download-12912651/BME280_Logger.zip.html
P.S. Ich würde gerne deine Programmcodevariante sehen
Hallo Petra,
sorry für die späte Antwort ich war unterwegs. Ich habe es nun hinbekommen, ich hatte meinen String fuer die Webseite falsch aufgebaut gehabt, dadurch wurde meine Webseite falsch aufgebaut. :(.
Ich habe auch noch eine Integration zu Emoncms und WifiManager integriert sowie ein OLED Display angebaut.
schreib mir bitte eine mail schnatte(at)gmx.net dann sende ich Dir den Code zu, Dein link was leider nicht mehr aktiv.
Gruss
Daniel
Hallo Petra,
leider hatte ich keinen AM2301, weshalb ich sehr an deinem Code interessiert war/bin.
Zuerst mal „Hut ab“ für diese Leistung und Dank, dass Du den Code veröffentlichst. Sieht gut aus und wenn es dann mal läuft kann man sich die eigene Wetterstation sparen. Doch da ist das Problem – es läuft nicht! Wemos und verschiedene BME’s finden nicht zusammen. Mit EasyESP läuft alles, also Verkabelung kann es nicht sein. Trotzallem bekomme ich keine Ergebnisse angezeigt. Temp und Hum == 0, Druck == 14,13; Uhrzeit wird korrekt angezeigt.
Kannst Du mir vielleicht sagen, wo da der Wurm ist? Ich verwende V4.3 deines Codes.
Vielen Dank im Vorraus
Grüße
Ralf
Hallo Petra,
kurze Rückmeldung zu meiner Anfrage – Dein Sketch ist doch in Ordnung, hatte noch einen NodeMCU32 dranhängen und versucht den zu flashen – doof nur dass der nicht mal einen Sensor dranhatte…
@Stefan:
Ich wollte keineswegs Deine Leistung hier unterschlagen – mein AM2301 kam leider erst gestern und auch hier lief alles wie am Schnürchen…
Grüße Ralf
Hallo,
0 bei allen Werten erhalte ich wenn der Sensor nicht gefunden wurde.
Bei der BME280 Version verwende ich diese Bibliothek https://github.com/BlueDot-Arduino/BlueDot_BME280 Wenn der Sensor nichts liefert, am besten die Verkabelung überprüfen, fehlen die Pullup Widerstände verwendet, Kabel zu lang? SDA/SCL vertauscht? Hat man vielleicht einen BMP280 statt BME280? Stimmt die WireBeginn initialisierung? Findet der I2C Scanner den Sensor? Funktioniert das einfache Beispiel der Bibliothek? Ich habe einen WeMosD1 (Baugröße wie ein Uno). Das SDA/SCL unten rechts bei dem AnalogPin ist ohne Funktion und man muss die oben neben dem Reset Taster verwenden. Der i2C Scanner liefert für den BMW280 normalerweise 118 (0x76)
Hallo zusammen,
ist es möglich die gemessenen Werte an eine Webseite zu übergeben? Meine Versuche scheitern leider immer an meinem Unvermögen. In dem Sketch habe ich zwar inzwischen die Stelle gefunden an der ich die Werte zusammenstellen und im seriellen Fenster darstellen kann, aber die Übertragung will nicht funktionieren.
Aussehen sollte die Ausgabe etwa so:
Werkstatt – Zeit: 12:12:35 – 11.2.2018 – Temperatur: 23.16°C – Luftfeuchtigkeit: 35.73% – Luftdruck: 1003.77hPa
Kann mir da jemand helfend unter die Arme greifen????
Besten Dank im Vorraus
Ralf
Vielleicht über den Umweg von Diensten wie Thingspeak etc. http://www.arduinesp.com/thingspeak
Der ESP Sendet die Daten an diesen Server und von deiner Homepage rufst diese Daten ab.
Hallo Petra,
genau diesen Weg wollte ich nicht gehen, es sollte schon die Oberfläche aus diesem Blog haben und die Werte an einen schon existierenden Server übergeben. Es sollte eine „einfache“ GET-Zeile sein, die die Werte an eine „http://server/seite.php“ sendet.
Vielen Dank für die Ünterstützung
Ralf
Moin Moin,
ich habe folgendes Problem. Ich versuche die „Webseite“ des ESP8266 zu erreichen, bekomme aber die Meldung „Webseite nicht erreichbar“.
Im Seriell Monitor steht:
new client
GET / HTTP/1.1
Client disconnected
new client
empty request! – stopping client
Was habe ich falsch gemacht? Als Code nutze ich den von „Petra“.
Lg
Hallo ST,
ich versuche dein Projekt auf einer NodeMCU 1.0 (ESP-12E) zum laufen zu bekommen, scheitere aber an folgendem Fehler beim Kompilieren:
Archiving built core (caching) in: /var/folders/95/frrq2nqj3qgb_mgl01r2fjww0000gn/T/arduino_cache_866930/core/core_esp8266_esp8266_nodemcuv2_CpuFrequency_80,VTable_flash,FlashSize_4M1M,LwIPVariant_v2mss536,Debug_Disabled,DebugLevel_None____,FlashErase_none,UploadSpeed_115200_1f6946ce01827d4f27d2fc95fde3ada3.a
sketch/ESP_TH_Logger.ino.cpp.o: In function `String::operator+=(__FlashStringHelper const*)‘:
/Users/bm/Library/Arduino15/packages/esp8266/hardware/esp8266/2.4.2/cores/esp8266/WString.h:157: undefined reference to `DHT::DHT(unsigned char, unsigned char, unsigned char)‘
sketch/ESP_TH_Logger.ino.cpp.o: In function `__static_initialization_and_destruction_0′:
/Users/bm/Library/Arduino15/packages/esp8266/hardware/esp8266/2.4.2/cores/esp8266/WString.h:157: undefined reference to `DHT::DHT(unsigned char, unsigned char, unsigned char)‘
sketch/ESP_TH_Logger.ino.cpp.o:(.text.loop+0x98): undefined reference to `DHT::readHumidity(bool)‘
sketch/ESP_TH_Logger.ino.cpp.o:(.text.loop+0x9c): undefined reference to `DHT::readTemperature(bool, bool)‘
sketch/ESP_TH_Logger.ino.cpp.o:(.text.loop+0xf2): undefined reference to `DHT::readHumidity(bool)‘
sketch/ESP_TH_Logger.ino.cpp.o:(.text.loop+0x113): undefined reference to `DHT::readTemperature(bool, bool)‘
collect2: error: ld returned 1 exit status
exit status 1
Fehler beim Kompilieren für das Board NodeMCU 1.0 (ESP-12E Module).
Leider weiß ich nicht, was hier zu tun ist. Könntest du bitte helfen?
Vielen Dank 🙂
Hallo Patrick,
Mit dem Nodemcu hat die Fehlermeldung nichts zu tun. Da fehlt zunächst einmal einfach die DHT Library. Versuche diese zu installieren. Dann sollte es durchlaufen.
Gruss Stefan
Hallo Patrick,
Du hast vermutlich die DHT Library nicht installiert. Wenn Du diese nachinstallierst, sollte das Compilieren und Linken klappen.
Gruss Stefan
Hallo Stefan,
danke für deine Rückmeldung. Es gibt oft viele ähnlich benannte Bibliotheken. Für mich habe ich festgestellt, dass die genaue Benennung (Name, ggfs. Version, Autor) der benötigten Bibliotheken entscheidend ist, obwohl es für Fortgeschrittene unnötig erscheinen mag …
Nachdem ich alle in Frage kommenden Bibs parallel installiert habe, und gelernt habe, dass man die IDE danach besser neu startet, funktioniert es bei mir. Nur die NTP Abfrage nicht, leider, es kommt keine Verbindung zustande. Auch nicht mit der IP von ptbtime1.ptb.de. Hast du eine Idee, wo ich zum debuggen ansetzen könnte?
Sehr geehrter Herr Thesen,
habe schon mehrere ESP8266 Boards mit Temperatur-, Luftdruck und -Feuchtesensoren bestückt und dann kürzlich Ihren Beitrag zu dem Logger entdeckt. Habe gestern meine Platine mit den Schraubanschlüssen für 1-WireBus und (falls noch was dazu kommen sollte) I2C sowie einer externen LED zur Funktionskontrolle zusammengelötet. eine NodeMCU 12E draufgesteckt, Ihr Programm nach Anpassung an mein WLAN sowie der Blinkroutine unmittelbar hinter ‚void loop‘ auf das Modul geladen und – es lief bis auf die Zeit sofort!!!
Habe dann in der ‚time_ntp.cpp‘ eine deutsche Adresse (IPAddress timeServer(212, 112, 228, 242) – ist in Nürnberg) eingetragen und jetzt funktioniert das Modul wie gewünscht um die Temperatur und Feuchte in einem Schrank in meiner Garage (dort lagern Äpfel) zu überwachen.
Mal sehen, ob ich in den nächsten Wochen so nach und nach Ihren Code verstehe.
Viele Grüsse
Frank Martens
Berlin
Hallo Herr Thesen,
vielen Dank!
Das Projekt ist für mich optimal, da ich keinen MQTT-Broker oder ähnliches laufen lassen
möchte.
Mir reicht es, wenn ich direkt vom ESP01-Modul die Daten f. ca. 1…2 Wochen geloggt bekomme.
– Die Messintervalle habe ich entsprechend angepasst.
Der Einstieg war für mich insofern etwas schwierig, als ich es mit dem ATOM-Editor und
PlatformIO versucht hatte. (Hier bin ich bis jetzt nicht zum Erfolg gekommen.)
– Mit der Arduino-IDE funktionierte das Ganze hingegen „ad hoc“!
Ebenso von Vorteil für mich ist, dass die Arduino-IDE portabel betrieben werden kann.
Vielen Dank und viele Grüße
Helmut Esterer
Hallo,
ich habe versucht, den sketch zum laufen zu bringen.
Die Werte vom DHT habe ich per random(300) simuliert, da ich keinen DHT habe.
Die Serial Logs melden erfolgreich den ESP an einer IP, NTP geht auch, aber ich kann
nicht auf die Seite zugreifen!
Ein IP-Scanner findet den ESP jedoch!
Versuche mit dem freien Speicher haben nix geändert.
Habt ihr eine Idee warum gar keine Internetseite angezeigt wird?
Gruß,
Wolfram.
Hallo Herr Thesen,
wie am 30. Januar 2019 berichtet, lief Ihre Software in meiner Garage (für die Temperatur der Äpfel) einwandfrei.
Seit der Umstellung auf die Sommerzeit stimmte lediglich die Zeit nicht mehr. Daher habe ich das Board an den PC gehängt mit der Absicht eine manuelle Umstellung auf Sommerzeit zu versuchen, aber nach Installation der Routine vom Januar diesen Jahres zeigte das DHT22-Modul nur noch naN – Werte. Alle meine Versuche, in Ihrer Software eine Ursache zu erkennen, waren erfolglos. Nach ausgiebiger Suche im Netz, nach Einspielen verschieden alter ESP8266 Boards in die Arduino-IDE und Modifikation der Zeit in der DHT.h (z.B. void begin(uint8_t usec=40); //55);) auch andere Zeiten kleiner/grösser versucht, habe ich nun überhaupt keine Idee mehr, warum, Ihr super Programm nur noch „Mist“ anzeigt. Das Programm „DHT_Unified_Sensor.ino“ läuft mit den gleichen Bibliotheken ohne mechanische Änderungen an meinem Board sofort und anstandslos.
Hallo Herr Thesen,
habe durch den Vergleich mit dem erwähnten Programm „DHT_Unified_Sensor.ino“ mal testweise in der setup-Routine den Befehl „dht.begin();“ eingefügt, seitdem mläuft alles wieder wie gewünscht!!!
Viele Grüsse
Frank Martens
Hallo Herr Thesen , nun habe ich doch noch eine erfreulichere Mitteilung zu dieser Schaltung zu machen. Abgesehen von den bei mir aufgetretenen ’numerischen‘ Besonderheiten, die ich so einigermaßen im Griff habe, ist es mir gelungen, noch eine zusätzliche LCD Anzeige mit einer I2C Ankopplung an mein Wemos D1 R2 Board zu integrieren. Nach einigen Stunden mühevoller Versuche, die Digitalwerte für Temperatur und Feuchtigkeit auf der LCD Anzeige anzuzeigen, habe ich dann ein youtube video mit dem Titel ‚ESP8266 D1 IOT – Interfacing with I2C LCD‘ gefunden, welches mich auf die entsprechende library geführt hat. Daran war es immer gescheitert. Somit kann ich also den Webserver mit ihrem Originalcode auf dem Balkon als Temperatur und Feuchtigkeitsanzeiger installieren mit einer LCD Anzeige, die halt vor Ort gleich ablesbar ist. Alle anderen Funktionen sind wie gehabt.
Mit freundlichen Grüßen
Prima, dass es klappt. Man muss beim der Initialisierung der DHT Lib einen Parameter mitgeben, der von der Performance der MCU abhängt. Es kann sein, dass das bei dem Wemos Board anders ist als bei den Standard ESPs. Man kann zwischen 80 und 160MHz umstellen. Hier könnte eine Ursache liegen. Ich habe mit 80MHz gearbeitet.
Dear Mr. Thesen I tried to experiment (and mess up I would say) your ESP_TH_Logger program using DHT22 and nodeMCU 8266 CP2102 ESP-12E. First I had to enter dht.begin (); to initialize DHT22 otherwise enter incorrect values. As a time server I entered (193,204,114,232); // time.nist.gov NTP Italian server INRiM (National Meteorological Research Institute). Everything works. I translated parts of the interface into my language. I’m interested in making acquisitions, say every half hour for two weeks or similar times
The problem is that if the wireless connection is missing or for some unknown reason it does not acquire the NTP, everything is blocked and while maintaining the data in the table the graph is no longer visible. It is necessary to reset it. I wonder if it is not possible to acquire the time synchronism every 24 hours and keep it active without sync? Given that on long times they don’t need precision to the second. You could perhaps use the clock with external battery, but I don’t know where to start. Help me? It may be of interest to many users to have a data logger that acquires data inside and when needed you can see them on the browser without external clouds. Thank you for your attention. If you want, explain step by step, because I am a novice. Many Thanks Claudio
Dear Claudio,
I can try to provide some hints. But certainly coding needs to happen by you. First of all there is an improved version V2 in the article above. If the wifi fails, well there is no NTP. There is an error handling the the ntp code, so you can quite easily check, if ntp is not successfull. Maybe you want to use a meaningful default then.
You can also use a batter based RTC. There are a lot of tutorials out, how to use a DS3231 RTC with an arduino as well as the ESP8266. So in case you want to use that, it should be quite straigt forward. You have to think of a small function that converts the time/date into the right format.
Good luck
Stefan
Hallo Herr Thesen,
auch ich bin von dem Code begeistert. Mit kleineren Anpassungen konnte ich zwei DS19B20 Sensoren anschließen. Zudem hatte sich der ursprüngliche NTP server sehr selten verbunden. Nun geht auch das flott.
Nun habe ich folgendes Problem. Wenn ich den Router aus- und später (nach 24 Stunden) wieder einschalte, fehlen mir die Messwerte für das Zeitfenster, indem der ESP8266 nicht verbunden war. Mache ich etwas falsch? Hätten Sie einen Hinweis, wie ich auch in der Zeit ohne WLAN-Verbindung Daten loggen und diese später (bei Verbindung) anzeigen lassen kann?
Vielen Dank und Grüße
Timm
Hallo Timm,
der Logger ist letztlich ein einfach gehaltener Beispielcode. Wenn das ESP Framework nach dem Wifi Netzwerk sucht, steht der Programmcode. Irgendwann kommt ein Timeout. Der Logger Code startet dann den nächsten Verbindungsversuch. Deshalb läuft die Datenerfassung nicht, wenn man das Wifi abstellt. Die Lösung wäre, den Code für die Datenerfassung in eine separate Funktion zu packen und diesen von einem Timer Interrupt regelmäßig aufrufen zu lassen. Damit würde die Datenerfassung immer durchlaufen.
Gruss Stefan
Vielen Dank, Stefan.
Diese Antwort habe ich befürchtet. Befürchtet deshalb, weil ich die Problemlösung nicht direkt erkenne. Allerdings habe ich Spaß daran und würde mich einarbeiten.
Vielen Dank für den tollen Code!
Viele Grüße aus Nürnberg
Timm
Hallo Stefan,
nach mehreren Jahren Betriebszeit von 3 Messungen mit DS18B20 und fallweise Aussetzern (bereits früher darüber berichtet) komme ich auf folgende Frage:
KEEP_MEM_FREE wird nur im „setup“ kontrolliert, im „loop“ nicht mehr. Was passiert wenn während des „loop“ der Grenzwert überschritten wird? Macht es Sinn, diese Abfrage auch im „loop“ einzubauen? Eventuell auch mit einer „if“ Abfrage?
Danke für den Sketch und Deiner Hilfe.
Friedhelm
Hallo Friedhelm,
die Laufzeitumgebung des ESP allokiert auch RAM und so ändert sich der verfügbare Speicher zur Laufzeit. Der gepostete Code schaut im Setup wieviel Speicher frei ist und nimmt sich dann bewusst nicht alles. Was er frei läßt ist letztlich ein educated guess aus mehreren Experimenten, die ich gemacht habe. Oder anders formuliert: wir lassen etwas frei in der Hoffnung, dass es reicht. Ich habe keine Dokumentation gefunden, die eine klare Aussage zum RAM Bedarf der Laufzeitumgebung im Betrieb macht.
Jetzt kannst Du natürlich auch im loop() kontinuierlich nach freiem Speicher fragen. Aber was dann? – Du merkst, dass der Speicher knapp wird und willst etwas freigeben. Also Speicher auf neue Größe umsortieren, die ältesten Werte nach „hinten“ und den Speicher mit realloc() verkleinern. Geht prinzipiell. Ist aufwändig.
Wenn Du soviel Aufwand treiben willst, würde ich eher einen SD Karten Adapter anschließen und die Daten wegschreiben. Damit hast Du dann nahezu unbegrenzten Speicher und bist auch noch gegen Stromausfälle gewappnet.
Gruss Stefan
Eine schnelle und präzise Antwort; wie immer.
Danke
Hez Stefan,
zuerst einmal tausend Dank für dieses unglaubliche Projekt! Die Implementierung hat mit einem DHT11 und esp8266 wunderbar geklappt und die Idee ist so simpel wie genial, ich hatte wirklich viel Freude! Lediglich eine Sache hat mich beinah zur Weißglut getrieben, undzwar kamen bei mir am Anfang nur sehr seltsame Messwerte heraus. Temperaturen im Minusbereich (Was der 11er ja gar nicht kann), Luftfeuchtigkeiten > 100% und reichlich reichlich „nan“!
Ich habe nun ewig in Foren und co. herumgesucht und wollte einfach nicht so recht eine Lösung finden.
Die Lösung war am Ende so einfach! Es fehlt einfach ein „dht.begin()“ am Ende der setup-Methode! In deiner Version von 2015 ist das nicht drin, ich weiß jetzt nicht, wie sich auch die Bibliothek im Laufe der Jahre verändert hat. Ich denke mal, es wird an eben jener liegen, dass über die Jahre diese neue Methode in die Bibliothek integriert wurde.
Jedenfalls wollte ich das nur schnell mit allen teilen, jeder, der das Projekt in 2020 oder später noch nachbasteln will, muss diese Methode unbedingt einfügen, damit der DHT11 (und die anderen wahrscheinlich auch) vernünftig initialisiert wird und sinnvolle Werte rauskommen!
Beste Grüße aus Dresden
Lennart
Guten Tag,
ein sehr gutes Projekt, finde ich.
Mein Nachbau hat aber nicht so funktioniert wie ich dachte.
Nach einigen nervigen Fehlversuchen konnte ich nunmehr den Sketch erfolgreich auf den ESP-01 mit einem USB Stick von Keystudio laden. Die Module habe ich von der Website https://www.ebay.de/itm/DHT22-AM2302-ESP8266-ESP-01-01S-Temperature-Humidity-Sensor-Wifi-Wireless-Module/273598617214?hash=item3fb3bf967e:m:m35EGMsr2–m3hO7jJvS6Zg
Mit einem Netzteil von einem Breadboard versorge ich die Platine mit dem DHT22 und dem aufgesteckten ESP-01 mit 3,3V .
Die Verbindung via Wlan klapt. Das Gerät wird als „temphum“ aufgelistet.
Leider bekomme ich keine Messwerte. Die UTC Zeit wird korrekt angezeigt. Alle ca. 3 min. wird in der Tabelle eine neue Zeile mit der Zeit gebildet. In den Spalten T sowie Hum wird jeweils „nan“ ausgegeben.
Die Spannung ist konstant 3,302V
Verwendet habe ich ihre ESP_TH_Logger_V2.zip.
Wo sollte ich anfangen nach dem Problem zu suchen. Programmieren kann ich nicht oder nur sehr begrenzt. Mit den nötigen Hinweisen könnte ich das Problem sicher lösen.
Mit freundlichen Grüßen
Hans-Jürgen Grigoleit
Hallo Hans-Jürgen,
ich hatte den DHT22 noch nicht in Händen. Im Code ist ein #define für die verschiedenen DHT Module. Das habe ich blind aus der entsprechenden Arduino Lib Implementierung übernommen. Hast Du den #define geändert? (also // vor die Zeile mit DHT21 und // vor der DHT22 weg). Mit Glück war es das schon. Dann gibt es noch den dritten Parameter aus der Initialisierung der DHT Klasse. Der steht auf 16. Der Parameter ist von der Performance des verwendeten Chips abhängig. Hier könnte auch noch eine Abhängigkeit bestehen.
Good luck,
Stefan
Hi,
ist ein tolles Projekt! Aber gibt es auch die Möglichkeit den Sketch für den ESP32 zu portieren?
Beim Compilen kommt es leider zu Fehlermeldungen weil lib-Dateien fehlen.
Gruß
Frank
Hallo
Danke für dieses Projekt. Prinzipiell läuft alles Super und Stabil.
Folgendes Problem: Habe beide Versionen getestet, laufen beide sehr gut, aber ich bekomme keine Grafik zu sehen. Habe alle Messwerte in der Tabelle, kein einziges nan, und trotzdem keine Tabelle zu sehen.
Getestet mit Google Chrome, Firefox, I-Explorer, und sogar mit EGDE.
Woran kann das liegen, habe im CODE nichts verändert.
Bitte um Hilfe
Helmut
Stimmt – ist seit einigen Wochen so. Da wir ein Javascript (Chartobject) von Google einbinden, ist da vermutlich was geändert worden. Muss mal bei Gelegenheit schauen, was da los ist.
Hallo
Danke für die schnelle Antwort.
Helmut
Hallo Stefan
Habe mich Heute selbst mal mit der Google API beschäftigt, und mir den CODE übersetzen lassen.
Anschliesend in der ARDUIONO IDE abgeändert, und die Grafik funktioniert jetz bei mir.
sResponse = F(„\n““\n““WLAN Logger: Grafik\n“ „WLAN Logger: Grafik\n“ „\n“);
sResponse += F(“ \n““google.charts.load(‚current‘, {‚packages‘:[‚corechart‘]});\n““google.charts.setOnLoadCallback(drawChart);\n““\n“ „function drawChart() {\n“ „var data = google.visualization.arrayToDataTable([\n“);
sResponse += F(„[‚Zeit / UTC‘, ‚Temperatur‘, ‚Volt'“);
sResponse += F(„],\n“);
Danke dir noch einmal für das tolle Projekt, und ich hoffe du kannst damit auch bei dir die Grafik wieder zum laufen bringen.
Beste Grüsse aus Linz (Österreich)
Helmut
Als Bemerkung noch, habe das ganze zum überwachen einer Batterie, die an einer kleinen Solaranlage hängt. Als Temperatursensor einen Dallas DS18B20, zum überwachen der Spannung am Esp8266 an A0 über Spannungsteiler.
Helmut
Prima. Danke. Schaue ich mir an.
Ich habe mir jetzt auch mal die Doku unter: https://developers.google.com/chart/interactive/docs/gallery/linechart angesehen. Meine Änderung für die Zeilen:
sResponse = F(„\n\nWLAN Logger für Lufttemperatur und Feuchtigkeit\n“);
sResponse += F(„\n“);
sResponse += F(„\n“);
sResponse += F(„google.charts.load(‚current‘, {‚packages‘:[‚corechart‘]});\n“);
sResponse += F(„google.charts.setOnLoadCallback(drawChart);\n“);
sResponse += F(„function drawChart() {var data = google.visualization.arrayToDataTable([\n“);
sResponse += F(„[‚Zeit/UTC‘, ‚Temperatur‘, ‚Feuchtigkeit‘],\n“);
Arduino-Code mit HTML Inhalten lässt sich als Kommentar zwar absenden, wird dann aber nicht richtig angezeigt. Der richtige Code ist zu finden unter: https://vatter.eu/charts.txt
Vielleicht kannst du ihn ja richtig in meinen vorherigen Beitrag kopieren.
Hallo,
gibt es schon eine Lösung für die Änderung der google-API bei der Grafik?
Ich wollte anhand von Helmuts code das mal umsetzen, bin aber leider kläglich gescheitert.
Bernd
Schau mal den Codechange von Uwe an.
Good luck!
Leider ist es mir nicht gelungen, den Codechange von Uwe in den Sketch zu übertragen. Welche Zeilen muss ich durch welche Zeilen ersetzen?
Kann da jemand helfen?
Friedhelm
Im Bereich
///////////////////////////////////
// format the html page for /grafik
///////////////////////////////////
nur folgende Zwei Zeilen durch die von Uwe genannten 7 Stück ersetzen:
sResponse = F(„\n\nWLAN Logger für Lufttemperatur und Feuchtigkeit\n\n“);
sResponse += F(“ google.setOnLoadCallback(drawChart);\nfunction drawChart() {var data = google.visualization.arrayToDataTable([\n[‚Zeit / UTC‘, ‚Temperatur‘, ‚Feuchtigkeit‘],\n“);
Hallo und guten Abend,
vielen Dank für das tolle Tutorial. Bei mir läuft ein wemos D1 mini mit DHT22. Leider scheitere ich noch daran, die beiden Sketche „ESP_TH_Logger“ und „ESP_NTP_LocalTime_Demo“ zusammenzuführen. Eine manuelle Umwandlung in MEZ/MESZ funktioniert bereits. Könntest du deinen Sketch ggfs. noch um diese Funktionerweitern bzw. nochmal genau erklären wie die automatische Sommer/Winterzeit-Erkennung integriert wird?
LG Mike
Hallo
ein tolles Projekt, das ich gern mal testen möchte. Leider bekomme ich diese Fehlermeldung:
In file included from D:\Program Files (x86)\Arduino\libraries\Adafruit_Circuit_Playground/Adafruit_CircuitPlayground.h:3:0,
from D:\Projekte\ESP_TH_Logger_V2\ESP_TH_Logger\ESP_TH_Logger.ino:1:
D:\Program Files (x86)\Arduino\libraries\Adafruit_Circuit_Playground/Adafruit_Circuit_Playground.h:114:3: error: ‚Adafruit_CPlay_FreeTouch‘ does not name a type
Adafruit_CPlay_FreeTouch cap[7]; ///< the array of capacitive touch sensors
^
Bibliothek Adafruit_Circuit_Playground in Version 1.10.4 im Ordner: D:\Program Files (x86)\Arduino\libraries\Adafruit_Circuit_Playground wird verwendet
Hat jemand eine Idee wie ich das lösen kann?
Gruß
Hallo,
beim Erstellen des Projekts tritt folgender Fehler auf,
Leider habe ich keine Lösung gefunden, kann mir jemand helfe?
vielen Dank
„C:\\Users\\Thomas\\AppData\\Local\\Temp\\arduino_build_960353\\sketch\\ESP_TH_Logger.ino.cpp“ -o „C:\\Users\\Thomas\\AppData\\Local\\Temp\\arduino_build_960353\\sketch\\ESP_TH_Logger.ino.cpp.o“
In file included from D:\Program Files (x86)\Arduino\libraries\Adafruit_Circuit_Playground/Adafruit_CircuitPlayground.h:3:0,
from D:\Projekte\ESP_TH_Logger_V2\ESP_TH_Logger\ESP_TH_Logger.ino:1:
D:\Program Files (x86)\Arduino\libraries\Adafruit_Circuit_Playground/Adafruit_Circuit_Playground.h:114:3: error: ‚Adafruit_CPlay_FreeTouch‘ does not name a type
Adafruit_CPlay_FreeTouch cap[7]; ///< the array of capacitive touch sensors
^
Bibliothek Adafruit_Circuit_Playground in Version 1.10.4 im Ordner: D:\Program Files (x86)\Arduino\libraries\Adafruit_Circuit_Playground wird verwendet
Hallo,
das Projekt ist wirklich klasse, läuft inzwischen auch schon ne ganze Zeit bei mir.
Aber die Geschichte mit dem Luftruck hat mich extrem angefixt.
Leider bekomme ich das nicht auf die Reihe.
Ich wäre extrem dankbar wenn jemand einen Sketch mit BME 280 hier einstellen würde.
Die Sketches die hier vorher gepostet wurden sind leider nicht mehr zum downloaden.
Gruß Martin
Hallo.
das Projekt ist absolut klasse und läuft bei mir auch schon eine ganze Zeit lang.
Allerdings schaffe ich es nicht einen BME 280 zum laufen zu bekommen.
Die Projekte die hier vorher mit BME280 gepostet wurden sind leider nicht mehr erreichbar.
Daher würde ich mich extrem freuen wenn mir einer von euch da den Anstoß geben würde.
Gruß Martin
Vielen Dank für das tolle Projekt.
Alles läuft bei mir, nur habe ich so ca. alle 10 Minuten ausreisser bei den Messwerten nach oben.
Gibt es da vielleicht einen Tipp um das zu bereinigen?
Danke und Gruss Richard
Hallo, super tolles Projekt.
Ich habe es nachgebaut und alles funktioniert bestens!
Nun wollte ich als Zusätzlichen Sensor noch einen DS18B20 einbinden, hat soweit auch funktioniert, ich kann die Temperatur auch anstelle der vom DHT22 anzeigen lassen.
In der Tabelle habe ich es hinbekommen beide Temperaturen und die Luftfeuchtigkeit anzeigen zu lassen.
Nur leider bekomme ich nicht noch einen 3. Graphen in der Graphik zum laufen und wenn ich einen Zusätzlichen Anzeiger einbinden möchte, sind die für temperatur und Luftfeuchtigkeit leider weg :(.
Hat jemand einen Tipp für mich?
Grüße,
Andreas
Hallo,
gibt es für dieses einzigartige Projekt noch Support?
Ich habe zu 90% nan Ausgabe und wenn Werte ausgegeben werden sind es falsche Werte (Temperatur ca. 10 Grad zu wenig, RLF unrealistische 3300.
Ich habe inzwischen andere Sketches versucht, die funktionieren,( leider nichts so gut passendes wie dieses dabei). Ich bin auch die Beiträge hier 3x durchgegangen, die angeführten Fallstricke sind ausgeschloßen.
Würde mich über Hilfe sehr freuen, sitze schon etliche Tage bei dem Problem fest.
Die Sache ist schon ein wenig her. Wir benutzen eine Arduino Lib, welche die Schnittstelle mit Bitbanging „emuliert“. Vermutlich kommt das Problem aus Timing Differenzen zwischen dem ESP und dem „Chinasensor“. Die Frage ist auch mit wieviel MHz der ESP läuft. Es gibt die Möglichkeit auf die Geschwindigkeit des Bitbangings einzuwirken; siehe auch den Kommentar dazu im Code: „init DHT; 3rd parameter = 16 works for ESP8266@80MHz“. Vermutlich liegt die Lösung in der geeigneten Variation des dritten Parameters. Es ist natürlich auch denkbar, dass sich etwas in der DHT Library geändert hat, seit dem ich den Code geschrieben habe.
Das Problem mit 10 Grad und 3300 RLF hatte ich auch.
Geholfen hat das Hinzufügen von „dht.begin()“ im void setup()
void setup() {
dht.begin();
Gruß
Seit geraumer Zeit bin ich bemüht ihr Projekt ESP_TH_Logger nach zu bauen. Bauen ist eigentlich nicht ganz richtig, da ich ein zwei Module mit AM2303 auf den die ESP-01 nur aufgesteckt werden verwende.(https://www.banggood.com/ESP8266-ESP-01-ESP-01S-ESP01-AM2302-DHT22-Temperature-Humidity-Sensor-Module-Wifi-Wireless-Shield-Board-p-1564241.html?cur_warehouse=CN&rmmds=search)
Ihren Sketch habe ich nur mit den Eintrag für WLAN und Passwort ergänzt und die //vor DHT22gelöscht und dafür diese vor DHT21 gesetzt.
Der Browser erkennt die Clienten.
Leider bekomme ich keine Grafik, die Anzeigen für „C“ und „%“ stehen auf 0 und in der Tabelle wird für beide Werte „nan“ angezeigt.
Mein erste Gedanke war das die AM2302 defekt sind. Daher habe ich zum Vergleich einen Sketch von „https://randomnerdtutorials.com/esp8266-dht11dht22-temperature-and-humidity-web-server-with-arduino-ide/“ geladen. Mit dem Sketch bekomme ich für“ C & %“ Werte angezeigt, die wohl annähernd zutreffen. Da ich aber an der Protokollierung der Messwerte interessiert bin möchte ich ihren Sketch benutzen.
Der Hinweis das es sich um Kontaktprobleme handelt, sollte also bei mir nicht greifen.
Ich habe die Firmware von Espressif, ESP8266 NONOS SDK-3.0.4 herrunter geladen und mit dem flash_download_tool_3.8.5 wie folgt auf die beiden ESP-01 geladen.
Datei
Adresse im Flash-Speicher
boot_v1.7.bin
0x00000
user1.1024.new.2.bin
0x10000
esp_init_data_default.bin
0xFC000
blank.bin
0xFE000
da ich nun nicht mehr weiter komme möchte ich sie um Hilfe bitten.
Mit freundlichen Grüßen
Hans-Jürgen
Hallo,
wie schon in der Antwort zuvor vermutlich ich die Ursache der NaNs in Timing Problemen (hat btw auch nichts mit der Warnung aus dem NTP Code zu tun). Bitte mal mit dem dritten Parameter der DHT Initialisierung spielen. Der Code läuft bei mir so für einen ESP@80MHz – man kann auch unterschiedliche Prozessorgeschwindigkeiten wählen.
Good Luck
Stefan
Ich kriege die Grafik immer noch nicht zum Laufen.
Bei mir sehen die 2 zu ersetzenden Zeilen etwas anders aus, sind deutlich länger.
sResponse = F(„\n\nLufttemperatur und Feuchtigkeit\n\n“);
sResponse += F(“ google.setOnLoadCallback(drawChart);\nfunction drawChart() {var data = google.visualization.arrayToDataTable([\n[‚Zeit / UTC‘, ‚Temperatur‘, ‚Feuchtigkeit‘],\n“);
Wenn ich diese zeilen durch die sieben zeilen von Uwe ersetze, bekomme ich folgende Fehlermeldung:
exit status 1
unterminated argument list invoking macro „F“
Gruß
Da muss ein Syntax Fehler bei der Verwendung des F-Macros reingerutscht sein. Auch wenn es nervig ist: Alle Escape Sequenzen und Anfühungszeichen sowie Klammern kontrollieren.
hi all ,
great job here with the code !!
but i am getting one issue i cant fix.
After load the code to esp8266 everything is working but I can’t see GRAFIC .
can someone help me pls ?
did someone else tested it ?
thank you
Hi,
habe jetzt auch schon ein „paar“ Stunden damit verbracht den Code ans laufen zu bekommen.
Bei mir bekam ich mit verschiedenen DHT`s und ESP`s immen NAN .
DHTTest in Arduino IDE 1.8.15 bracht einwandfreie Werte.
Ob alte IDE , Timing anpassung usw. Immer NAN.
Bis Ich die DHT Lib ausgetauscht habe.
Adafruit DHT lib 1.0.0 hat schlussendlich funktioniert.
https://www.arduinolibraries.info/libraries/dht-sensor-library
Kann das jemand bestätigen?
Gruß Jens
Hallo,
wollte gerne den Datenlogger nachbauen, doch leider bekomme ich untenstehende Fehlermeldung und ich weis als Anfänger leider nicht weiter und bin auf Hilfe angewiesen.
Wer weis einen Rat?
C:\Users\Raimund Stoll\Documents\Arduino\ESP_TH_LoggerV2\ESP_TH_Logger\time_ntp.cpp: In function ‚long unsigned int sendNTPpacket(IPAddress&)‘:
C:\Users\Raimund Stoll\Documents\Arduino\ESP_TH_LoggerV2\ESP_TH_Logger\time_ntp.cpp:104:1: error: no return statement in function returning non-void [-Werror=return-type]
104 | }
| ^
cc1plus.exe: some warnings being treated as errors
exit status 1
Compilation error: no return statement in function returning non-void [-Werror=return-type]
Gruß
Raimund