Skocz do zawartości
Masterpc96

ESP po pewnym czasie zwalnia i rozłącza wifi

Pomocna odpowiedź

Witam zrobiłem sobie sterownik rolet zewnętrznych na esp (opisany w dziale DIY). Esp steruje dwoma przekaźnikami, ma podpięte dwa przyciski oraz wystawia serwer. Mam taki problem że po pewnym czasie, teraz to się zdarzyło po 23h, esp zaczęło się jakby zacinać rozłączyło się od wifi, tym samym serwer nie działa oraz jak ma załączyć przekaźnik na 17 sekund to załącza go np na 25 sekund. Wklejam kod na pastebin 
https://pastebin.com/9xwx99dE

Wymieniłem również esp na inne i efekt dalej ten sam 😕 

Udostępnij ten post


Link to post
Share on other sites

A nie masz problemu ze stabilnym zasilaniem układu?

PS Umieszczaj proszę kody programów bezpośrednio na forum - jest do tego odpowiednia narzędzie w edytorze 😉

Udostępnij ten post


Link to post
Share on other sites

Poprawię kod jak będę mil dostęp do komputera 😉

Zasilnie 3.3 filtruje kondensatorem elektrolitycznym 470uF i 100 nF ceramicznym w odległości 20mm od esp. Mogę dać kondensator 1000uF bo akurat mi przyszedł wczoraj. Aczkolwiek wątpię by to była wina zasilania 😕 Czytałem ze podobno esp ma problemy ze stabilnością i można wykorzystać Watchdoga do przywracani stanu po restarcie.

Udostępnij ten post


Link to post
Share on other sites

WDT jest uruchomiony w ESP stale, wystarczy gdziekolwiek wstawić pętle while(1) by wywołać reset. Można to po prostu zrobić zapobiegawczo co jakiś czas.  Miałem kiedyś serwerek WWW zrobiony na bazie stringów to potrafił się wywalać i co kilkanaście minut - zapewne fragmentacja pamięci, wycieki, stos itp. atrakcje. Możesz sobie przerobić na stałe tablice char dla tekstów i porównać jak się będzie zachowywał. Stały czas podnoszenia i opadania rolet nie będzie zawsze OK, lepiej mieć kontrolę położenia zasłon czujnikami/krańcówkami.

  • Lubię! 1

Udostępnij ten post


Link to post
Share on other sites

Muszę chyba zrobić wdt codziennie o godzinie 2 w nocy bo wtedy rolety na pewno będą zaciągnięte i odczyt położeni i czasów po resecie muszę dołożyć, tylko się zastanawiam jak czy robić to na eepromie czy jest jakaś łatwiejsza opcja 🤔 wifi manager jakoś to robi ze eeprom jest czysty a on ma zapisane ostatnie ustawienia sieci 

Udostępnij ten post


Link to post
Share on other sites

Ustawienia WIFI są zapisane w obszarze poza normalnie wgrywanym flash z Arduino, by to wyczyścić trzeba wgrać jakąś całą binarkę "blank".

  • Lubię! 1

Udostępnij ten post


Link to post
Share on other sites

@kaczakat wiesz może czym się różni robienie Watchdoga Twoim sposobem (pętla while(1)) a ESP.reset?

nie mogę znaleźć w internecie porównania a przykłady które znalazłem zrobione są na ESP.reset 

Udostępnij ten post


Link to post
Share on other sites

Twój sposób do resetu jest lepszy, ja w ogóle nie używałem żadnego, po prostu wiem by unikać takich miejsc bo WDT mi wywala program. Trzeba dodawać w takich pętlach delay  lub yield() by temu zapobiec. Gdy mi się restartował/zawieszał to po prostu znalazłem sposób by nie tracić pamięci - stała tablica globalna char i na jej bazie budowanie komunikatów. Do resetu jeszcze ESP.restart(). Masz dużo dynamicznych stringów, poczytaj jak sprawdzić heap, może filmik pomoże:

Bo co Ci da stały restart, jeśli przyjdą goście, będziesz chciał kilka razy podnieść/opuścić zasłony i nazbiera w pamięci śmieci jak przez tydzień, po czym zacznie sobie żyć swoim życiem.

Sposobów na serwer jest kilka, niestety takie podawanie wybranych stringów do HTML też powodowało u mnie zawieszenia i to czasami po kilku godzinach, czasami minutach, próbowałem zrobić stronę z odczytem 4 czujników i 4 przyciskami (w sumie to dużo bardziej rozbudowaną, do tego to obciąłem) i wywalała się losowo. Stanęło na websocket, ale są też inne, np. zainstaluj bibliotekę jak na filmie https://github.com/me-no-dev/ESPAsyncWebServer, serwera na bazie tej biblioteki też nie udało mi się zajeździć. Pliki html wgrywa się na spiffs ESP, w przykładzie pokazane jest właściwie wszystko co potrzebne - konfigurator, OTA, wykresy.

  • Lubię! 2

Udostępnij ten post


Link to post
Share on other sites

Dzięki bardzo za pomoc. Projekt trochę przebudowałem bo już nie mam strony konfiguracyjnej na ESP (będzie na malince) i komunikacja po przez http. Dodatkowo podpinam to wszystko pod aplikację home od Apple. Wywalam całe mqtt z esp i stronę konfiguracyjną. Dodałem zapamiętywanie danych i restart w momencie jak rozłączy mi się z wifi. Wtedy zapisuję stan na spiffs i przy uruchomieniu odtwarzam stan. Na pewno zainstaluję bibliotekę od Ciebie bo jak masz sprawdzoną to po co mam sam testować 😉 

Udostępnij ten post


Link to post
Share on other sites

Stan możesz zapisywać do RAM RTC (masz tu 512B, które "przeżywa" restart), częste zapisy spiffs to nie jest dobry pomysł.

Tutaj jest przykład:

 

  • Lubię! 1

Udostępnij ten post


Link to post
Share on other sites
(edytowany)

Czy ja wiem czy będzie to częsty zapis 🤔. Teraz jednp esp mi działa od 7 dni bez crashu. 

Ograniczyłem serwer do 5ciu zpytań
1. Aktualny procent zamknięcia 
2. Aktualny stan sterownika (0, 1 lub 2)
3. Wysłanie wartości na jaką trzeba zamknąć roletę
4. Ustawienie czasów zamykania i otwierania
5. Dane diagnostyczne tj. czas pracy sterownika czas podnoszenia, czas zamykania

jutro przelutuję jeszcze pin w sterowniku by przycisk nie był podpięty pod gpio16 tylko pod gpio14 wgram kod podepnę do Home od Apple i lecim z testami 😄 

Edytowano przez Masterpc96

Udostępnij ten post


Link to post
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Gość
Dołącz do dyskusji! Kliknij, aby zacząć pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.


×
×
  • Utwórz nowe...