Skocz do zawartości

ESP8266 nodemcu v3 - nie uruchamia się po deepsleep


KamilWGM

Pomocna odpowiedź

Cześć! 

Mam problem z esp8266 nodemcu v3. Po uruchomieniu modułu, wysłaniu danych zapada w deepsleep. Tutaj zaczyna się problem urządzenie zamiast poprawnie wystartować, zawiesza się w bliżej nieokreślonym dla mnie stanie. Po podciągnięciu RST do GND, resetuje się i uruchamia poprawnie i działa aż do uśnięcia.

Aktualna konfiguracja 

D0(GPIO-16) --> RST // wybudzenie po deepsleep 

D1(GPIO-5)/D2(GPIO-4) // I2C dla AHT10 

Pozostałe piny wolne 

 

Na ten moment sprawdziłem kilka rzeczy:

  • Odłączyłem D0 od RST (po ukończeniu deepsleep na D0 zmienia się stan z HIGH na LOW) 
  • Zwiększałem/zmniejszałem czas trwania deepsleepa
  • Uruchomiłem kod na drugim ESP(mam możliwość sprawdzenia jeszcze na 4 sztukach nie użytych przeze mnie ani razu, na ten moment obstawiam taki sam rezultat)
  • Dodałem i zmieniałem delay przed samym snem
  • Dodanie delay przed Serial.begin 
  • Dodanie kondensatora 10uF między D0 a RST 

Zauważyłem również że przy normalnym uruchomieniu ESP pobiera do +/- 75mA i utrzymuje je do czasu uśnięcia. W deep sleep pobiera +/- 1,6mA. Po "próbie" wybudzenia przez D0 prąd pobierany przez ESP wynosi ok 35mA i utrzymuje się. 

Dziwne również są dla mnie te początkowe krzaki ale od początku użytkowania nie miałem z nimi problemu. 

Poniżej zamieszczam kod z którego korzystam. 
 

#include <ESP8266WiFi.h>
#include <ESPAsyncWebServer.h>
#include <Wire.h>
#include <Adafruit_AHTX0.h>
#include <ESP8266HTTPClient.h>

const char *ssid = "XXX";
const char *password = "XXXXX";
const char *serverUrl = "http://192.168.1.41:5000/receive_data";

WiFiClient client;
HTTPClient http;
Adafruit_AHTX0 aht;

void setup() {
    Serial.begin(9600);
    delay(100);

    // Połączenie z WiFi
    WiFi.begin(ssid, password);
    while (WiFi.status() != WL_CONNECTED) {
        delay(1000);
        Serial.println("Łączenie z WiFi...");
    }
    Serial.println("Połączono z WiFi");
    Serial.println(WiFi.localIP());

    // Inicjalizacja czujnika
    if (!aht.begin()) {
        Serial.println("Nie można zainicjować AHT!");
        while (1);
    }
}

void loop() {
    sensors_event_t temp, humidity;
    aht.getEvent(&humidity, &temp);

    // Przygotowanie danych JSON
    String jsonData = "{\"temperature\":" + String(temp.temperature) + ",\"humidity\":" + String(humidity.relative_humidity) + "}";

    // Wysyłanie danych
    if (WiFi.status() == WL_CONNECTED) {
        http.begin(client, serverUrl);
        http.addHeader("Content-Type", "application/json");
        
        int httpResponseCode = http.POST(jsonData);
        if (httpResponseCode > 0) {
            Serial.println("Dane wysłane poprawnie");
            String response = http.getString();
            Serial.println(response);
        } else {
            Serial.print("Błąd wysyłania danych, kod błędu: ");
            Serial.println(httpResponseCode);
        }
        
        http.end();
    } else {
        Serial.println("Nie połączono z WiFi");
    }
    delay(100);
    WiFi.disconnect(true);
    ESP.deepSleep(25 * 1e6, RF_CAL);
    
}

image.thumb.png.7d05b705df8c6c58f93dd7ad731bce9c.png

Edytowano przez KamilWGM
Link do komentarza
Share on other sites

2 godziny temu, jand napisał:

GPIO16 nazywa się D0 właśnie

Wolę jednak oryginalne nazewnictwo od razu wiadomo o co chodzi

Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

Wygląda na to że układ idzie spać i próbuje się obudzić. A po wybudzeniu następuje jakiś problem z wifi, spróbuj coś printować przed pętla od inicjalizacji wifi 

Link do komentarza
Share on other sites

7 godzin temu, KamilWGM napisał:

mam możliwość sprawdzenia jeszcze na 4 sztukach nie użytych przeze mnie ani razu, na ten moment obstawiam taki sam rezultat

Jeśli te 4 sztuki były kupowane jednocześnie, w tym samym miejscu, te pewnie masz rację. Natomiast jeśli ich zakup był rozciągnięty w czasie i pochodzą z różnych źródeł, to może warto je sprawdzić.

Link do komentarza
Share on other sites

(edytowany)
1 godzinę temu, _LM_ napisał:

Wolę jednak oryginalne nazewnictwo od razu wiadomo o co chodzi

Dodałem do opisu problemu oryginalne nazewnictwo 🙂

1 godzinę temu, jand napisał:

A wypróbuj może podciągnąć do 3,3V opornikiem 10k  wyprowadzenie SD0 (czyli SDIO_DATA0 (MOSI)).

Podciągnięte niestety nie daje to żadnego efektu.

44 minuty temu, _LM_ napisał:

Wygląda na to że układ idzie spać i próbuje się obudzić. A po wybudzeniu następuje jakiś problem z wifi, spróbuj coś printować przed pętla od inicjalizacji wifi 

Być może źle to opisałem, do tej pory nie udało mi się wybudzić urządzenia samoczynnie z deepsleepa. Po pewnym czasie resetuje je przyciskiem. Dopisałem "krzaczki" 

 image.thumb.png.3b2fcf289b645f8cf37718857e73d7b3.png

31 minut temu, jand napisał:

Jeśli te 4 sztuki były kupowane jednocześnie, w tym samym miejscu, te pewnie masz rację. Natomiast jeśli ich zakup był rozciągnięty w czasie i pochodzą z różnych źródeł, to może warto je sprawdzić.

Niestety wszystkie 6 sztuk pochodzą z jednego zamówienia. 😕 

 

//Edit1 

Przypomniałem sobie że posiadam analizator stanów logicznych dla wyjaśnienia tych "krzaczków" które pojawiały się przed inicjalizacją wifi. Poniżej zrzut ekranu. Nie jestem pewien czy na pewno dobrze ustawiłem patrząc po tym co się wyświetla 😕

image.thumb.png.c2df27443b8abd818ae610e794d62f47.png

Edytowano przez KamilWGM
Link do komentarza
Share on other sites

U mnie funkcja usypiania wygląda nieco inaczej, możesz sprawdzić:

void sleep()
{

  WiFi.mode(WIFI_OFF); //
  //ESP.deepSleepInstant(SLEEP,WAKE_NO_RFCAL);
WiFi.forceSleepBegin();
ESP.deepSleep(SLEEP, WAKE_NO_RFCAL);

}
Link do komentarza
Share on other sites

Zamień tylko RFCAL na swoją wartość, ja to miałem ustawione żeby układ szybciej wstawał ale pogarsza parametry rf

Link do komentarza
Share on other sites

(edytowany)

Zmień prędkość portu szeregowego na 74880 (pamiętaj też o terminalu), to zapewne krzaczki dadzą się odczytać.

Edytowano przez jand
  • Lubię! 2
Link do komentarza
Share on other sites

1 godzinę temu, _LM_ napisał:

U mnie funkcja usypiania wygląda nieco inaczej, możesz sprawdzić:

Niestety to samo 😕 

1 godzinę temu, jand napisał:

Zmień prędkość portu szeregowego na 74880 (pamiętaj też o terminalu), to zapewne krzaczki dadzą się odczytać.

Faktycznie dają się odczytać. Niestety po obudzeniu dalej się zawiesza. 

image.thumb.png.f0983822f1e3a1bacb8b3fcd9444f371.png

Link do komentarza
Share on other sites

Jest też inny wątek (ciągnący się od 5 lat) opisujący podobne problemy, a więc nie jesteś osamotniony.

Zawarte są tam różne  pomysły rozwiązania, które u jednych działają, a u innych nie.

Link do komentarza
Share on other sites

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.