Hallo, auf cc2.tv wurde kürzlich ein Temp-Sensor mit ESP-01 uC vorgestellt (Sendung 227+228). Infolgedessen habe ich mir mal je 2 DHT11 + 2 ESP-01 bei aliexpress bestellt: Die Software habe ich 1zu1 von cc2 übernommen: http://cc2.tv/wetter.ino Bei dem Programm blicke ich nicht ganz durch: Dort gibt es keine Main-Funktion? Keine Ahnung, wie der in der Loop-Funktion landet, aber es scheint irgendwie zu funktionieren: Habe zum Testen die Timer auf 30sek reduziert: void loop() { // Lege den Sensor schlafen für 5 Minuten ESP.deepSleep(30000000, WAKE_RF_DISABLED); // entspricht 300 s // Wenn der Sensor nicht schlafen gelegt werden soll, // kann hiermit auch einfach 5 Minuten gewartet werden. delay(30000); readdht(); } Wenn ich den Deepsleep auskommentiere funktioniert alles einwandfrei! Alle 30sek bekomme ich einen Wert. Strom liegt zwischen 0,07A (sendephase) und 0,02A (delay-Funktion). Mit dem Deepsleep läuft es leider nicht. Der uC schaltet von 0,07A nach 0,00A. Nach 30sekunden erwacht er wieder und führt den Reset durch (Brücke habe ich gelötet). Jedoch blinkt die blaue LED dann munter ca. in 0,5sek Takt vor sich hin - endlos lange! Der Strom liegt bei 0,01A statt bei 0,07A. Das gleiche Verhalten tritt auch auf, wenn ich im Sleep-Mode den Reset manuell fahre (Reset-Pin kurz gegen GND brücken, bzw. Reset-Taster am DHT11-Modul betätigen). Erst ein zweiter Resetimpuls lässt den ESP wieder normal arbeiten (0,07A Strom, 4x blau Blinken und wieder Sleep). Ich hatte schon mein Labornetzteil in Verdacht. Also habe ich das ganze mal wie in der CC2-Sendung mit 3xAA Bat und einer 1N4001 in Reihe probiert: Gleiches Verhalten! Das Problem lässt sich auf beiden bestellten Modulen (von unterschiedlichen Händlern! Ich bestelle bei aliexpress Kleinkram immer doppelt, weil oft nur die Hälfte ankommt). Beim zweiten Modul habe ich die Reset-Brücke vom ESP6288 allerdings noch nicht gelötet, sondern den Reset im Sleep-Mode per Hand simuliert: Bleibt aber genauso hängen, bzw. braucht immer einen 2. Reset. Kann jemand dieses seltsame Phänomen erklären? Müssen beim ESP vielleicht noch irgendwelche Fuses gesetzt werden? Danke im Voraus
Allgemeines ESP-Troubleshooting: Reset-Pullup vergessen? CH_PD-Pullup vergessen? Kerko an der Versorgung dicht am ESP vergessen? GPIO0 und 2 dürfen beim Boot außerdem nicht low sein.
Der ESP-01 hat den GPIO16 nicht herausgeführt. Dieser wird für deep sleep benötigt, da der ESP buggy ist. Der GPIO16 muss mit dem Reset-Pin verbunden werden, so wie hier: https://hackaday.com/2015/02/08/hack-allows-esp-01-to-go-to-deep-sleep/ Das sagt der Herr cc2tv aber ja auch in seinem Video https://youtu.be/kf_0f90rJHA?t=525
:
Bearbeitet durch User
Ich habe den Pin doch mit Reset verbunden. Das schrieb ich aber bereits. Wenn ich ihn nicht verbinde, startet der ESP nach Ablauf des Zeit nicht selbst neu. Dabei bleibt er aber immer hängen. Reset und CH_PD sind auf der DHT11 Platine mit 10K gegen VCC hochgezogen. Ich habe nun erst festgestellt, dass die DHT11-Platine sogar ein Spannungsregler hat, welcher von 3,7-12V arbeitet. Insofern ist die Versorgung mit 3AA Batterie und Diode Unsinn. Ich habe die DHT-Platine jetzt einfach mal mit 5V USB betrieben. Leider tritt der Fehler auch auf. GPIO2 ist ja der Datenpin zum DHT. Wie GPIO0 beschaltet ist, weiß ich nicht. Das Datenblatt von der DHT11-Platine ist leider offline. Ich vermute diese DHT11 Modul-Platine ist gar nicht für Deep-Standby ausgelegt. Ein Wunder, dass es beim cc2 funktioniert, obwohl ich mir da auch nicht sicher bin, ob die da nicht flunkern.
wenn der Sketch wirklich so wie im O.P. angegeben publiziert wurde, lege ich den Herren vom CC2 nahe, endlich in den (verdienten) Ruhestand zu gehen. nach deepsleep macht der ESP einen Reset und fängt wieder mit setup() an. Wenn dann in loop das erste ist, ihn wieder in deepsleep zu schicken, wo bitte soll dann jemals gemessen werden ? mit delay funzt es natürlich ... also: in loop() zuerst messen, dann deepsleep oder delay, so wird ein Schuh draus.
Danke, noch ein Indiz mehr, dass die bei cc2.tv bezüglich des deepstandby geflunkert haben. Verstehe nicht, warum trotz aktivierten deepstandby dann trotzdem mal ein Wert an mein Webserver durchkam?!? Jetzt mal zum Verständnis eines arduino Anfängers: Also zuerst wird bei arduino immer setup() aufgerufen und dann loop()? Eine main(), die beide Routinen aufruft ist nicht erforderlich?
das main() das die beiden Hauptroutinen setup() und loop() aufruft ist vor dem Benutzer verborgen im Arduino Framework realisiert.
ok, verstehe. Ich habe die Loop jetzt mal umgedreht: void loop() { readdht(); // Lege den Sensor schlafen für 5 Minuten ESP.deepSleep(30000000, WAKE_RF_DISABLED); // entspricht 300 s // Wenn der Sensor nicht schlafen gelegt werden soll, // kann hiermit auch einfach 5 Minuten gewartet werden. delay(30000); } Seltsamerweise bekommt mein Webserver nun zwei Werte direkt hintereinander, beim 2. aber mit timeout! Irgendwie scheint readht() nun doch 2mal aufgerufen zu werden? 2018-06-9 19:49:33 2 29.00 64.00 OK 31.67 2018-06-9 19:49:34 2 nan nan TIMEOUT nan Ich habe GPIO 0+2 nun jeweils mit 10K gegen VCC hochgezogen. Leider hat das am Problem nichts verändert, dass er nach dem ersten Reset aus dem Deepsleep nicht richtig hochkommt :(
Guck dir mal an was an der seriellen Schnittstelle rauskommt,ich vermute mal dass er zwei mal nen reset macht weil deine Spannungsversorgung nicht ganz sauber ist (Kondensator vergessen?)
Hallo, Dominik schrieb: > ESP.deepSleep(30000000, WAKE_RF_DISABLED); Mit WAKE_RF_DISABLED startet der ESP nach Reset mit komplett abgeschaltetem WLAN, ist das Absicht? Aus diesem Zustand ist er nur durch Reset wieder rauszuholen, das ist Dein 2. nötiger Reset... Wenn WLAN aktiv sein soll ist der Paramter WAKE_RF_DEFAULT. ESP.deepSleep(30000000); müßte auch gehen. Bach dem Sleep-Kommando ist ein delay(100); zwingend nötig, das ist ja durch das delay(30000); bei Dir ok. Gruß aus Berlin Michael
Danke Timmo H. und Michael U., jetzt kommen ich der Sache näher: Im Serial log sehe ich, dass der ESP aufwacht und versucht eine WLAN-Verbindung aufzubauen (alle 0,5 Sekunden ein Punkt im Log). Laut wireshark kommt an meinen Rechner aber nichts an. Ich hatte jetzt schon ein delay(1000); vor WiFi.begin(ssid, pwd); gesetzt, weil ich dachte, dass der ESP vielleicht ein bisschen Zeit zum Aufwachen braucht, bevor er loslegen kann. Jetzt kommt der Tipp von Michael U. ins Spiel, der passen würde. Verstehe nur nicht, warum WLAN nach dem ersten Reset nicht schon zurückgesetzt wird.
Danke, das war es! ESP.deepSleep(30000000); und es funktioniert einwandfrei! Mein Labornetzteil zeigt 30Sekunden 0,00A und dann für jeweils knapp 2sek 0,07A und der Wert erscheint. Jetzt noch die LED vom ESP und vom DHT11 Modul auslöten und mit einem genaueren Amperemeter mal nachmessen. Eventuell muss der Spannungsregler dann auch noch raus.
Hallo, Dominik schrieb: > Verstehe nur nicht, warum WLAN nach dem ersten Reset nicht schon > zurückgesetzt wird. weil WAKE_RF_DISABLED ihm sagt, daß er beim nächsten Reset mit abgeschaltetem Funkmodul starten soll... Ist auch die einzige Möglichkeit, das komplett abzuschalten. Macht u.U. Sinn, wenn man längere Meßaktionen, hat bevor man das wegschickt. Ohne WLAN braucht der ESP nur ca. 15mA. Man muß die MEßwerte dann natürlich zwischenspeichern (EPROM oder RTC-Ram) und macht dann ein ESP.deepSleep(1, WAKE_RF_DEFAULT); Schickt ihn also für 1µs schalfen und weckt ihn sofort wieder mit WLAN aktiv. Gruß aus Berlin Michael
da wäre ich vorsichtig. das mit 1µs funktioniert etwa bis core 2.3 danach sind es so ca. ab 100 wo es funktioniert. Gab mal ein issue dazu auf github; k.A. wie das ausging.
Hallo, muß ich direkt mal testen mit der 2.4.1. Gruß aus Berlin Michael
Hallo zusammen! Also ich habe mir vor einiger Zeit die DHT Module bestellt. Die wurden ja in cc2 vorgestellt. Also ich muss nach einigen Versuchen sagen das die Vorstellung in cc2 nicht ganz ausgereift waren. Die Module haben ja ein 3.3 Volt Regler drauf. Betreibt man die mit der Diode und 3 Zellen macht der Regler nicht auf. Habe hier 4 AAA Zellen in Betrieb. Was ich am Programm umgestellt habe kann ich hier gar nicht alles im einzelnen aufzählen. Ich betreibe die Module aber mit DHT22 und 4.7K Widerstand zwischen 3.3 Volt und GPIO2.
Hallo zusammen! Habe das Programm vergessen dranzuhängen ...
Ich bin schon öfters auf fehlerhafte Anleitungen bei Youtube gestoßen, habe die Fehler gemeldet und dann passierte nicht weiter. Vermutlich scheuen sich deren Autoren, die erfolgreichen Videos durch neue zu ersetzen, da diese dann möglicherweise weniger Klicks bekommen. Oder sie scheuen den Aufwand. Mein Tipp: Anleitungen sucht man normalerweise nicht bei Youtube. Außer vielleicht Sachen wie: "Wie öffne ich mein Notebook?" oder "Wie knetet man einen Pizza-Teig?".
Da kann ich dir den Kanal von der bitbastelei empfehlen. Er geht auf Fehler ein und zieht in den Kommentaren viele mit, die sich auch auskennen und Fehler bemerken. Er hat übrigens genau das gleiche Projekt aber mit ausgereifter Software umgesetzt. Hab es gegengetestet und läuft prima.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.