ESP8266-12F bleibt im Deepsleep Stecken

SO mein ESP sensor ist soweit fertig und läuft auch. nur leider kommt er nicht aus dem Deepsleep raus.

Um zu sehen das es nicht an meinem Programm liegt habe ich ein einfaches Testprogramm geschrieben.


void setup() {

  // put your setup code here, to run once:
  Serial.begin(74880);
}

void loop() {
  // put your main code here, to run repeatedly:
  Serial.println("Doing some awsome things");
  ESP.deepSleep(1000*1000);
}

Ich benutze den ESP auf einem Breakoutboard

für die Versorungsspannung und UART zu USB benutze ich den MCP2221A
Bildschirmfoto 2024-09-22 um 11.54.36
Mein Aufbau sieht so aus

Mein Output sieht so aus

11:55:39.827 -> 
11:55:40.548 ->  ets Jan  8 2013,rst cause:1, boot mode:(3,7)
11:55:40.548 -> 
11:55:40.583 -> load 0x4010f000, len 3424, room 16 
11:55:40.583 -> tail 0
11:55:40.583 -> chksum 0x2e
11:55:40.583 -> load 0x3fff20b8, len 40, room 8 
11:55:40.583 -> tail 0
11:55:40.583 -> chksum 0x2b
11:55:40.583 -> csum 0x2b
11:55:40.583 -> v00041c50
11:55:40.583 -> ~ld
11:55:40.651 -> rf cal sector: 1020
11:55:40.651 -> freq trace enable 0
11:55:40.651 -> rf[112] : 0�Doing some awsome things
11:55:41.791 -> 
11:55:41.791 ->  ets Jan  8 2013,rst cause:2, boot mode:(3,6)
11:55:41.791 -> 

Ich habe ach versucht GPIO16 auf EN zu legen da kommt dann das hier raus

11:56:26.369 ->  ets Jan  8 2013,rst cause:2, boot mode:(3,7)
11:56:26.369 -> 
11:56:26.369 -> load 0x4010f000, len 3424, room 16 
11:56:26.403 -> tail 0
11:56:26.403 -> chksum 0x2e
11:56:26.403 -> load 0x3fff20b8, len 40, room 8 
11:56:26.403 -> tail 0
11:56:26.403 -> chksum 0x2b
11:56:26.403 -> csum 0x2b
11:56:26.403 -> v00041c50
11:56:26.403 -> ~ld
11:56:26.471 -> rf cal sector: 1020
11:56:26.471 -> freq trace enable 0
11:56:26.471 -> rf[112] : 0�Doing some awsome things
11:56:27.579 -> 
11:56:27.579 ->  ets Jan  8 2013,rst cause:0, boot mode:(3,7)
11:56:27.579 -> 
11:56:27.579 -> unknown reset
11:56:27.579 -> ets_main.c 

Leider Fährt der ESP nach dem DeepSleep in beiden fällen die Routine nicht ab.

Ich habe jetzt schon öfters gelesen das es sich wohl um einen Fehler im Chipdesign handelt, aber beim WEMO klappt es ja auch und der benutzt ja auch das Modul.
Ist jetzt die Frage wie der Memos intern Geoutet ist bzw. welche Bauteile da am Reset und GPIO16 noch angebaut sind.
Oder liegt es doch daran das die Module herstellerseitig stark variieren?

GPIO 16 muss mit dem RST Pin verbunden werden.

Hat er doch im Aufbau.

hab ich. das Ergebnis ist

11:55:39.827 -> 
11:55:40.548 ->  ets Jan  8 2013,rst cause:1, boot mode:(3,7)
11:55:40.548 -> 
11:55:40.583 -> load 0x4010f000, len 3424, room 16 
11:55:40.583 -> tail 0
11:55:40.583 -> chksum 0x2e
11:55:40.583 -> load 0x3fff20b8, len 40, room 8 
11:55:40.583 -> tail 0
11:55:40.583 -> chksum 0x2b
11:55:40.583 -> csum 0x2b
11:55:40.583 -> v00041c50
11:55:40.583 -> ~ld
11:55:40.651 -> rf cal sector: 1020
11:55:40.651 -> freq trace enable 0
11:55:40.651 -> rf[112] : 0�Doing some awsome things
11:55:41.791 -> 
11:55:41.791 ->  ets Jan  8 2013,rst cause:2, boot mode:(3,6)
11:55:41.791 ->

er merkt das da was kam aber iwi langt der reset Impuls nicht zu

Als ich das schrieb, war das Foto nicht nicht da… Ich habe es jedenfalls vor meiner Antwort nicht gesehen. Nur das erste.

1 Like

ja den Aufbau hatte ich vergessen mit reinzuladen

Laut Stefan Frings braucht es ein delay(100); nach dem Schlafenschicken, damit er ordentlich in den Schlaf kommt.

Wenn auf dem Breakout ein Kerko den ResetPin puffert, kann der Impuls zu kurz sein.

Er geht auf die Beschaltung ein und wie man es verbessert.

Scrollen zum (Deep-Sleep Modus)

Woran machst du das fest? Deine Serielle Ausgabe kommt doch. Und mehr macht dein Code ja nicht.

Es fehlt auf jeden Fall ein Pufferkondensator zwischen VCC und GND direkt am ESP12 Breakout.

Stimmt mehr steht da nicht aber er sollte dennoch mehr machen als er tut.

-Booten
-Serielle ausgabe

Serial.println("Doing some awsome things");

-dann in den deepsleep fahren
-nach einer Sekunde aufwachen
-Booten
-Serielle ausgabe

Serial.println("Doing some awsome things");

und immer so weiter

aber er bleibt nach dem Deepsleep im Booten iwi hängen und fährt die Routine nicht wieder ab

Ich würde dann tatsächlich so vorgehen, wie es auf der Website von Stefan Frings steht.
Und ein Elko an der VCC kann def. auch nicht schaden. 10µF oder größer.

Also die Serielle Ausgabe «Doing some awsome things» ist doch zu sehen. Was fehlt dir?

auf der Seite steht man soll den GPIO 16 so mit rst verbinden

und weiter oben

das würde bedeuten ich benötige nur eine Drahtbrücke zwischen GPIO16 und rst

er müsste die doch immer und immer wieder abspielen

also wie beim Wemos Beispiel

da der immer wieder nach dem Reset booted kann man hier 3mal die Zeile Doing awsome things sehen.

der Blanko chip verhält sich aber anders. Er booted nicht nach dem reset

13:18:14.920 -> 
13:18:27.062 ->  ets Jan  8 2013,rst cause:1, boot mode:(3,7)
13:18:27.062 -> 
13:18:27.062 -> load 0x4010f000, len 3424, room 16 
13:18:27.062 -> tail 0
13:18:27.096 -> chksum 0x2e
13:18:27.096 -> load 0x3fff20b8, len 40, room 8 
13:18:27.096 -> tail 0
13:18:27.096 -> chksum 0x2b
13:18:27.096 -> csum 0x2b
13:18:27.096 -> v00041c50
13:18:27.096 -> ~ld
13:18:27.160 -> rf cal sector: 1020
13:18:27.160 -> freq trace enable 0
13:18:27.160 -> rf[112] : 0�Doing some awsome things
13:18:28.294 -> 
13:18:28.294 ->  ets Jan  8 2013,rst cause:2, boot mode:(3,6)
13:18:28.294 -> 

sondern verharrt in der Zeile

13:18:28.294 ->  ets Jan  8 2013,rst cause:2, boot mode:(3,6)

Vielleicht testest du mal diesen Code. Dann fällt es dir vielleicht besser auf:

void setup() {

  // put your setup code here, to run once:
  Serial.begin(74880);
}

void loop() {
  // put your main code here, to run repeatedly:
  Serial.println("");
  Serial.println("");
  Serial.println("Doing some awsome things");
  ESP.deepSleep(1000UL*1000);
  delay(100);
}

Edit: Oder jetzt verstehe ich es glaub ich richtig, es geht nicht fortlaufend weiter.

Dann prüfe bitte deine Grundbeschaltung und Versorgung.

Das dürfte nicht das rechnen, was Du Dir vorstellst (Rechnung in int!)
Besser:

Rechnung in int bei ESP ist ok, da ja dort int 32 Bit groß ist.

Gruß Tommy

JUHU.
ich habe mich noch nie so gefreut das ich zu Dumm zum lesen bin!

Nur zwei Zeilen unter der Beschattung steht

Manche ESP Module hängen sich trotz korrekter Beschaltung nach dem Aufwachen auf, weil sie mit einem ungeeigneten Flash Speicher Chip (z.B. CT 580A-UGLI) bestückt sind. Siehe dazu diese Diskussion und einen möglichen Workaround in Bug-Report 6318.

Dort findet man folgenden Code:

#include "ESP8266WiFi.h"
extern "C" {
#include <user_interface.h>
}

#define ets_wdt_disable ((void (*)(void))0x400030f0)
#define ets_delay_us ((void (*)(int))0x40002ecc)

#define _R (uint32_t *)0x60000700


void nk_deep_sleep(uint64_t time)
{
    ets_wdt_disable();
    *(_R + 4) = 0;
    *(_R + 17) = 4;
    *(_R + 1) = *(_R + 7) + 5;
    *(_R + 6) = 8;
    *(_R + 2) = 1 << 20;
    ets_delay_us(10);
    *(_R + 39) = 0x11;
    *(_R + 40) = 3;
    *(_R) &= 0xFCF;
    *(_R + 1) = *(_R + 7) + (45*(time >> 8));
    *(_R + 16) = 0x7F;
    *(_R + 2) = 1 << 20;
    __asm volatile ("waiti 0");
}

void setup()
{   Serial.begin(74880);
    delay(1000);
    Serial.println("Doing awsome things");
    nk_deep_sleep(1000*1000);
}

void loop()
{
}

und mit dem Funktioniert der Deepsleep WakeUP wie gedacht.

Es gibt dort auch noch den Hinweis das man zwischen GPIO07 und VCC einen 10k bzw. 47K Pullup resistor verbauen kann.
Dass hatte ich schonmal im Vorfeld gelesen aber nach der Montage reagierte der ESP nicht mehr. Nach dem Ausloten des Widerstandes auch nicht. Der war dann Schrott! Daher würde ich allen empfehlen erst den geänderten Code zu verwenden^^

meine Ausgabe sieht jetzt allerdings So aus

3:44:24.933 -> rf[112] : 0��n�|�l�r�n��n�|�r�`lrlbnrlbnrlbnrlbnrlbn��l�����lll��`��~�l���l���lbnrlbnrlbnrlbnrlbnr�`l��n��쒐���r���`rlr��nnnb�l�l`rl�l����l�rbll�rrll�r���b���r�l`rl����rrn��l`rl�b��nn�l�b쌜����l�n�쌜������n��|�bl��l`����������ll��������쌜���l`�������|�����p쌜�����l��l`����������쌜����쌜���쌜���l`�������p��쌜����쌜���l�p��lll`�������p��������������쌜�����l�p�l`��rrnl`lrlbnrlbnrlbnrlbnrlbn��l�����lll��`��~�l���l���lbnrlbnrlbnrlbnrlbnr��
13:44:29.458 ->  ets Jan  8 2013,rst cause:1, boot mode:(3,7)
13:44:29.490 -> 
13:44:29.490 -> load 0x4010f000, len 3424, room 16 
13:44:29.490 -> tail 0
13:44:29.490 -> chksum 0x2e
13:44:29.490 -> load 0x3fff20b8, len 40, room 8 
13:44:29.490 -> tail 0
13:44:29.490 -> chksum 0x2b
13:44:29.490 -> csum 0x2b
13:44:29.490 -> v00041e60
13:44:29.490 -> ~ld
13:44:29.557 -> rf cal sector: 1020
13:44:29.557 -> freq trace enable 0
13:44:29.594 -> rf[112] : 0��n�|�l�r�n��n�|�r�`lrlbnrlbnrlbnrlbnrlbn��l�����lll��`��~�l���l���lbnrlbnrlbnrlbnrlbnr�`l��n��쒐���r���`rlr��nnnb�l�l`rl�l����pl�rbll�rrll�r���b���r�l`rl����rrn��l`rl�b��nn�l�b쌜����l�n�쌜������n��|�bl��l`����������ll��������쌜���l`�������|�����p쌜�����l��l`����������쌜����쌜���쌜���l`�������p��쌜����쌜���l�p��lll`�������p��������������쌜�����l�p�l`��rrnl`lrlbnrlbnrlbnrlbnrlbn��l�����lll��`��~�l���l���lbnrlbnrlbnrlbnrlbnr��
13:44:34.112 ->  ets Jan  8 2013,rst cause:1, boot mode:(3,7)
13:44:34.112 -> 
13:44:34.112 -> load 0x4010f000, len 3424, room 16 
13:44:34.112 -> tail 0
13:44:34.112 -> chksum 0x2e
13:44:34.112 -> load 0x3fff20b8, len 40, room 8 
13:44:34.146 -> tail 0
13:44:34.146 -> chksum 0x2b
13:44:34.146 -> csum 0x2b
13:44:34.146 -> v00041e60
13:44:34.146 -> ~ld
13:44:34.212 -> rf cal sector: 1020
13:44:34.212 -> freq trace enable 0
13:44:34.212 -> rf[112] : 0��n�|�l�r�n��n�|�r�`lrlbnrlbnrlbnrlbnrlbn��l�����lll��`

Das Doing Awesome Stuff wird nicht richtig ausgegeben, statt lesen bekomme ich nur Kryptischen Mist raus. Das ist aber nicht schlimm, solange es sich darauf beschränkt, da ich den Serial Port eh nur zu debug zwecken verwende.

So ich habe den ESP jetzt in meinen Sensor eingebaut. Wlan aufgebaut Datenbank gestartet und.... Spannung steigt...

Es wird, genau wie erwartet eine Datenreihe nach der anderen angelegt.

Hier noch einmal der Aufbau

Danke für eure Hilfe!

Ich war schon vollständig am verzweifeln!

EDIT: Mir viel grad auf das das NICHT Funktioniert wenn die Boarddefinition "Generic esp8266 Modul" gewählt wird. Die Boarddefiniton "WemosD1R2 Mini" muss gewählt werden

2 Likes

Kommt vom TO und laut Serieller Ausgabe funktioniert es einmal. Aber du dennoch Recht, das man dort Ultra Long angibt.
Liegt vielleicht daran das beim ESP ein int 32Bit groß ist

Prima und danke für die Rückmeldung.

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.