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