ESP32 nepripoji sa na wifi po prebudeni
ESP32 nepripoji sa na wifi po prebudeni
Ahojte.testoval som odosielanie udajov z DHT22 na thingspeak cez ESP32ku.program odoslal udaje a na 5min.uspal ESP do deep sleep a stale dokola.testoval som kolko vydrzi stara li ion z mobilu.odoslalo sa okolo 2400 merani nez sa vybila.problem je ze odvtedy sa mi ESP po prebudeni nepripoji na wifi.pri prvotnom zapnuti sa pripoji ale po prebudeni sa mu to uz nepodari.je jedno ci je napajany cez usb alebo na napajacie piny.nepomohlo ani znovaprehratie sketchu.niekde na forach som sa docital nieco o hardwarovom resete arduina.robili to cez pithona, ale to uz je spanielska dedina pre mna.este to je asi moznost ako ho dat do funkcneho stavu.je mozne ze by sa mu nieco prepisalo v bootloaderi alebo podobne co je nahrate uz od vyrobcu?.
-
- Příspěvky: 579
- Registrován: 01 srp 2017, 19:29
- Reputation: 0
- Bydliště: Poprad
- Kontaktovat uživatele:
Re: ESP32 nepripoji sa na wifi po prebudeni
Mne sa kedysi zacyklovalo WiFi, bolo to na verzii 0.9.X (ešte pred 1.0.0 release)... vo výpise do Serial monitoru to hodilo skrátka hlášku wifi (niečo....) init a nedialo sa ďalej nič. Stávalo sa to nepravidelne. Raz za asi 8 pripájaní na WiFi. V tom čase som to používal na sieti eduroam...
Vyriešil som to tým, že som do setupu (pred prvým pripájaním na WiFi) použil funkcie:
Fungovalo mi to odvtedy fajn.
Používam i softvérový reset s jednoduchým counterom, ak sa na WiFi nenapojí do 30 sekúnd.
Používal som to predovšetkým v aplikáciách, kde ovládam relé cez internet a pod, aby v prípade výpadku reštartovalo ESP a to vyplo všetky relé až do napojenia a synchronizácie s webom, cloudom a pod.
Rovnako to používam aj v loope, a prípadne cez if WiFi.status() == WL_CONNECTED nastavím počítadlo na 0 (aby prípadný výpadok WiFi trval 30 sekúnd po reset, a nie menej v prípade, že tam ostala nejaká prechádzajúca hodnota z pripájania, čo inkrementovalo počítadlo).
Kód: Vybrat vše
E (646775) wifi: Set status to INIT
Kód: Vybrat vše
WiFi.disconnect(true);
WiFi.mode(WIFI_STA);
(tu je už WiFi.begin(...);
Používam i softvérový reset s jednoduchým counterom, ak sa na WiFi nenapojí do 30 sekúnd.
Používal som to predovšetkým v aplikáciách, kde ovládam relé cez internet a pod, aby v prípade výpadku reštartovalo ESP a to vyplo všetky relé až do napojenia a synchronizácie s webom, cloudom a pod.
Kód: Vybrat vše
#include <WiFi.h>
const char* ssid = "SSID";
const char* pass = "PASS";
int pocitadlo = 0;
void setup() {
WiFi.disconnect(true);
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, pass);
while (WiFi.status() != WL_CONNECTED) {
delay(500); // pauza 500ms
Serial.print("."); // vypis znaku
pocitadlo++; //inkrementuj pocitadlo
if(pocitadlo>=60){
ESP.restart();
}
}
}
Re: ESP32 nepripoji sa na wifi po prebudeni
Ahoj , skusil som to pridat do kodu ale nic nepomohlo.nechapem ako to niekolko dni mohlo fungovat bez problemov a teraz nic.mohlo sa nieco prepisat vo firmware wifi?
-
- Příspěvky: 1029
- Registrován: 06 zář 2017, 20:04
- Reputation: 0
- Bydliště: Brno
- Kontaktovat uživatele:
Re: ESP32 nepripoji sa na wifi po prebudeni
Omlouvám se, že se neustále míchám do diskuze o esp32 a přitom mám zkušenosti jen s esp8266, ale vidím tam analogie.
https://arduino-esp8266.readthedocs.io/ ... t%20false
Nevím ale, zda to stejně funguje i pro esp32, dokumentaci od něj jsem nezkoumal.
Tenhle příkaz při každém restartu, tedy i probuzení z deep sleep přepíše určenou oblast paměti flash. Lze to softwarově ošetřit třeba příkazem WiFi.persistent() nebo si přečíst ssid a pass a pokud je stejný, pak použít Wifi.begin() bez parametrů. Pokud se to neudělalo, tak v případě periodického častého buzení došlo k poškození - vypálení flash v místě ssid a pass. Esp8266 tedy je možné poškodit častým periodickým buzením ze spánku. Myslím, že totéž platí i pro WiFi.mode(), který se také ukládá do flashWiFi.begin(ssid, pass);
https://arduino-esp8266.readthedocs.io/ ... t%20false
Nevím ale, zda to stejně funguje i pro esp32, dokumentaci od něj jsem nezkoumal.
- pavel1tu
- Příspěvky: 2054
- Registrován: 26 říj 2017, 08:28
- Reputation: 0
- Bydliště: Trutnov
- Kontaktovat uživatele:
Re: ESP32 nepripoji sa na wifi po prebudeni
Ano, je to tak
A při probuzení s DEEP_SLEEP to znovu provádí setup() ?ESP8266 is able to reconnect to the last used Wi-Fi network or establishes the same Access Point upon power up or reset. By default, these settings are written to specific sectors of flash memory every time they are changed in WiFi.begin(ssid, passphrase) or WiFi.softAP(ssid, passphrase, channel), and when WiFi.disconnect or WiFi.softAPdisconnect is invoked. Frequently calling these functions could cause wear on the flash memory
UNO, NANO, Mikro, PRO mini, DUE, ESP32S2, RPi PICO
Pavel1TU
"Správně napsaný kod lze číst jako knihu"
Pavel1TU
"Správně napsaný kod lze číst jako knihu"
Re: ESP32 nepripoji sa na wifi po prebudeni
mal som ten prikaz v loope.takze pri kazdom prebudeni sa mi to prepisovalo..ak ho teda dam do setupu malo by to fungovat bez poskodenia ESP? nakolko sa setup vykonava len po prvom starte.da sa to este nejako obist na tomto poskodenom ESP?
-
- Příspěvky: 1029
- Registrován: 06 zář 2017, 20:04
- Reputation: 0
- Bydliště: Brno
- Kontaktovat uživatele:
Re: ESP32 nepripoji sa na wifi po prebudeni
V případě esp8266 jednoznačně ano, protože budící signál z časovače je přiváděn přímo na reset obvodu.A při probuzení s DEEP_SLEEP to znovu provádí setup() ?
U esp32 je možné to ošetřit jako událost a přes Setup() to jít nemusí. Ovšem je otázka, jak má minicico1 program napsaný. Nikde není řečeno, že příkazy pro připojení mohou být jen v smyčce Setup(). Asi by sem měl program šoupnout.
minicico1 byls o chlup ve psaní rychlejší. Nedokážu jednoznačně říct, jestli se nejedná o jiný problém a už vůbec ne, jestli je to možné napravit.
Re: ESP32 nepripoji sa na wifi po prebudeni
Kód: Vybrat vše
#include "DHT.h"
#define DHTPIN 4
#define DHTTYPE DHT22
#include "ThingSpeak.h"
#include <WiFi.h>
#define uS_TO_S_FACTOR 1000000
#define TIME_TO_SLEEP 20
char ssid[] = "TP-LINK_A0AC02"; // your network SSID (name)
char pass[] = "10286milan"; // your network password
//int keyIndex = 0; // your network key Index number (needed only for WEP)
WiFiClient client;
unsigned long myChannelNumber = 00000;
const char * myWriteAPIKey = "HYUB3ZU3141GFQJL";
DHT dht(DHTPIN, DHTTYPE);
void setup() {
esp_sleep_enable_timer_wakeup(TIME_TO_SLEEP * uS_TO_S_FACTOR);
Serial.begin(115200);
dht.begin();
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, pass);
ThingSpeak.begin(client);
}
void loop() {
if (WiFi.status() != WL_CONNECTED)
{
Serial.print("Attempting to connect to SSID: ");
//Serial.println(SECRET_SSID);
while (WiFi.status() != WL_CONNECTED)
{
Serial.print(".");
delay(5000);
}
Serial.println("pripojene");
}
float vlhkost = dht.readHumidity();
float teplota = dht.readTemperature();
ThingSpeak.setField(1, vlhkost);
ThingSpeak.setField(2, teplota);
Serial.print (vlhkost);
Serial.print ("%");
Serial.print (teplota);
Serial.print ("'C");
int x = ThingSpeak.writeFields(myChannelNumber, myWriteAPIKey);
esp_deep_sleep_start();
}
Re: ESP32 nepripoji sa na wifi po prebudeni
Pokud to blbne kvuli castym prepisovanim pokazene EEPROM, tak uz je pokazena a mene caste prepisovani ji neopravi (ani nic jineho). Ale asi by slo najit v te knihovne, na ktere adresy EEPROM si to uklada a prepsat je na jine, dosud nepokazene adresy a pak to pouzivat setrneji.
(Jen pro jistotu - pokud zapisuje na adresu XXX ssid a passphrase, tak to znamena, ze tam pise retezce a ze prepisuje jeste n dalsich bunek za tim (asi podle konfigurace, nebo podle pouzivane delky) a ty tedy budou poskozene taky (a mozna cely blok, ve kterem jsou a ktery se maze naraz), takze je to potreba premistit dost daleko od puvodniho mista a zaroven si dat pozor, aby to nepreteklo prez konec EEPROM, nebo aby se to netlouklo s necim jinym)
(Jen pro jistotu - pokud zapisuje na adresu XXX ssid a passphrase, tak to znamena, ze tam pise retezce a ze prepisuje jeste n dalsich bunek za tim (asi podle konfigurace, nebo podle pouzivane delky) a ty tedy budou poskozene taky (a mozna cely blok, ve kterem jsou a ktery se maze naraz), takze je to potreba premistit dost daleko od puvodniho mista a zaroven si dat pozor, aby to nepreteklo prez konec EEPROM, nebo aby se to netlouklo s necim jinym)
-
- Příspěvky: 1029
- Registrován: 06 zář 2017, 20:04
- Reputation: 0
- Bydliště: Brno
- Kontaktovat uživatele:
Re: ESP32 nepripoji sa na wifi po prebudeni
Pouze teoreticky. Použít Wifimulti a definovat dva stejné AP. Ten první se asi ukládá špatně a tudíž se na něj nepřipojí. Ten druhý se nejspíš ukládá již správně a tak se to chytne na druhý pokus. To by mohlo fungovat. A člověk nemusí znát detaily kolem WiFi stacku.
Druhá věc je jak paměť nepřeválcovat. Pro esp8266 existuje Wifi.persistent() i když kolem této funkce panuje spousta nejasností.
Ale pro ESP8266 jde snadno napsat test, který omezí přepisování a jde to určitě i pro esp32.
Druhá věc je jak paměť nepřeválcovat. Pro esp8266 existuje Wifi.persistent() i když kolem této funkce panuje spousta nejasností.
Ale pro ESP8266 jde snadno napsat test, který omezí přepisování a jde to určitě i pro esp32.
Kód: Vybrat vše
#include <ESP8266WiFi.h>
String password = "MyPassword";
String ssid = "MySSID";
void setup() {
Serial.begin(115200);
delay(1000);
Serial.println(WiFi.getMode());
Serial.println(WiFi.SSID());
Serial.println(WiFi.psk());
// Pokud je wifi mod WIFI_STA, tak ho znovu neukladej
if ( WIFI_STA != WiFi.getMode()) {
WiFi.mode(WIFI_STA);
Serial.println("Label 1");
}
//Pokud je ulozene SSID i heslo spravne, tak ho znovu neukladej
if (ssid != WiFi.SSID() || password != WiFi.psk()) {
WiFi.begin(ssid, password);
Serial.println("Label 2");
}
WiFi.begin();
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("pripojeno");
}
void loop() {
// put your main code here, to run repeatedly:
}
Kdo je online
Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 26 hostů