Hallo Zusammen, ich habe ein Problem mit meinem ESP8266 Mini. Ich wollte ihn "einfach" mit einem Kapazitiven Sensor ausstatten zur Pflanzenbewässerung. Das Grundprogramm läuft. Jetzt war meine Idee, den ESP für X Stunden in einen Deep Sleep zu versetzen, so dass er Energie Spart. Idee war, abfrage Feuchte Boden ... zu gering, Pumpe an ... Ok, Pumpe aus ... Deep Sleep. Nur leider funktioniert es nicht. Der Wert wird gelesen, die Pumpe angeschaltet bei zu trocken... und dann geht er in den deep Sleep bei angeschalteter Pumpe. Eigentlich sollte er ja noch abwarten, bis er den Wert zum ausschalten erreicht hat. Wo ist mein Fehler? Kann mir jemand hier mal auf die Sprünge helfen. (Und vorab, ich bin totaler anfänger, seid also etwas rücksichtsvoll :) ) Hier mein Programm: #include <Arduino.h> #include <ESP8266WiFi.h> void setup() { // put your setup code here, to run once: Serial.begin(9600); digitalWrite(0,1); WiFi.mode(WIFI_OFF); //Output Pin wird als output definiert pinMode (2, OUTPUT); //Relais wird ausgeschaltet digitalWrite(2,LOW); } void loop() { int sensorValue = analogRead(A0); Serial.println(sensorValue); delay(400); //Pumpe an bei Wert über if (sensorValue > 850) { //Relais einschalten digitalWrite(2,HIGH); Serial.println("Pumpe An"); } //Pumpe aus bei Wert unter XX else if (sensorValue < 820) { //Relais ausschalten digitalWrite(2,LOW); Serial.println("Pumpe Aus"); } ESP.deepSleep(30e6); }
so müsste es gehen: void loop() { int sensorValue = analogRead(A0); Serial.println(sensorValue); delay(400); //Pumpe an bei Wert über if (sensorValue > 850) { //Relais einschalten digitalWrite(2,HIGH); Serial.println("Pumpe An"); } //Pumpe aus bei Wert unter XX else if (sensorValue < 820) { //Relais ausschalten digitalWrite(2,LOW); Serial.println("Pumpe Aus"); ESP.deepSleep(30e6); // <-- deep sleep wenn genug wasser da ist } // <-- ansonsten kein deep sleep }
ich kenn das - manchmal sitzt man stundenlang an so einem Problem und merkt nicht, dass der wirkliche Fehler eigentlich zwischen den Ohren steckt... ;-)
Öhm, noch mal eine Frage...., bzw. 2 1. Kann ich über die 71 Minuten DeepSleep Zeit gehen? Wenn ja, wie muß ich das bewerkstelligen? 2. Bei jedem Aufwachen zieht das Relais einmal ganz kurz an. Gibt es da einen Trick das zu vermeiden?
Ae 0. schrieb: > 1. Kann ich über die 71 Minuten DeepSleep Zeit gehen? Wenn ja, wie muß > ich das bewerkstelligen? Beitrag "Re: ESP8266 - maximale deep-sleep Zeit?" > 2. Bei jedem Aufwachen zieht das Relais einmal ganz kurz an. Gibt es da > einen Trick das zu vermeiden? Mit einer Transistorschaltung invertieren (high/low-side).
Hallo Mister, fangen wir mal bei 2 an ... also muß ich im Programm LOW und High tauschen, und den Ausgang dann negieren? Verstehe ich das so richtig? zu 1. wenn ich es so also richtig lese,... keine Chance, es sei denn ich würde so ein Uhrenmodul mit dranhängen, wobei da die Frage des Energiesparens wieder währe....
Ae 0. schrieb: > Hallo Mister, > > fangen wir mal bei 2 an ... > > also muß ich im Programm LOW und High tauschen, und den Ausgang dann > negieren? Verstehe ich das so richtig? Ja. Ist aber vermutlich unnötig, weil Du wohl einfach ein unglückliches Händchen bei der Wahl des GPIO-Pins hattest. Wie Du z.B. hier sehen kannst: https://randomnerdtutorials.com/esp8266-pinout-reference-gpios/ (im Abschnitt "Best Pins to Use – ESP8266") ist GPIO2 nämlich beim Booten high, weil der ESP sonst nicht bootet. Es wird also vermutlich genügen, einfach das Relais an einen anderen GPIO-Pin als Nummer 2 anzuschliessen. Und das wäre dann auch eine gute Gelegenheit, den verwendeten GPIO-Pin nicht als hart kodierte Zahl vier mal im Sourcecode zu verwenden, sondern stattdessen einmal am Anfang z.B. eine
1 | #define RELAIS_PIN 4 |
Zeile hinzuzufügen und dann im Quelltext statt "2" halt "RELAIS_PIN" zu schreiben. Das macht den Quelltext einerseits besser lesbar (weil RELAIS_PIN eine sprechende Bezeichnung ist), und wenn man den Pin ändern muss, muss man nur an einer einzigen Stelle etwas ändern.
Ja, mit etwas Glück ist es damit gegessen. Ich würde trotzdem auf low-side setzen und einen wie IO15 nehmen. Oder einen freien mit pulldown (Widerstand gegen GND) versehen. Dann könnte man auch Experimente mit einem Kondensator durchführen. Damit erreicht man schnelles entladen bzw. verzögertes weiches einschalten. Die Freilaufdiode (parallel zum Relais) bloß nicht vergessen. Softwareseitig nicht zu ignorieren, hier ist deep sleep im Einsatz. Das Kriterium Zustände spielt auch mit. Ergo, wurde der letzte Pin-Status gespeichert und nach wakeup wiederhergestellt. Oder hat der Watchdog ausgelöst. War bzw. ist es ein simpler Neustart nach Stromunterbrechung... Mit einem pulldown geht man sehr vielen Problemsituationen aus dem Weg.
Hallo, danke, ja den Wiederstnd benötige ich. Da muss ich heute meine Bastelkiste mal durchkramen, was ich nich an Wiederständen habe. Aktuell wird der Ausgang noch kurz immer mitgeschaltet. Mit dem Pulldown sollte sich das ja erledigen. Dank euch.
wenn du noch auf gpio2 hängst und einen pulldown dran tust wirst du Schiffbruch erleiden ... Beitrag "Re: IDE Reihenfolgefrage ESP8266 DeepSleep"
Hallo G ich habe einen anderen GIPO genommen (13) der beim starten nicht auf HIGH geht.
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.