ESP32 nepripoji sa na wifi po prebudeni

minicico1
Příspěvky: 29
Registrován: 30 kvě 2019, 01:13
Reputation: 0

ESP32 nepripoji sa na wifi po prebudeni

Příspěvek od minicico1 » 28 zář 2019, 09:20

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?.

martinius96
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

Příspěvek od martinius96 » 28 zář 2019, 15:16

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...

Kód: Vybrat vše

E (646775) wifi: Set status to INIT
Vyriešil som to tým, že som do setupu (pred prvým pripájaním na WiFi) použil funkcie:

Kód: Vybrat vše

WiFi.disconnect(true);
WiFi.mode(WIFI_STA);

(tu je už WiFi.begin(...);
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.

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();
    		}
 	 }
} 	 
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).

minicico1
Příspěvky: 29
Registrován: 30 kvě 2019, 01:13
Reputation: 0

Re: ESP32 nepripoji sa na wifi po prebudeni

Příspěvek od minicico1 » 30 zář 2019, 06:03

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?

jankop
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

Příspěvek od jankop » 30 zář 2019, 08:25

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.
WiFi.begin(ssid, pass);
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 flash

https://arduino-esp8266.readthedocs.io/ ... t%20false
Nevím ale, zda to stejně funguje i pro esp32, dokumentaci od něj jsem nezkoumal.

Uživatelský avatar
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

Příspěvek od pavel1tu » 30 zář 2019, 12:25

Ano, je to tak
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
A při probuzení s DEEP_SLEEP to znovu provádí setup() ?
UNO, NANO, Mikro, PRO mini, DUE, ESP32S2, RPi PICO
Pavel1TU
"Správně napsaný kod lze číst jako knihu"

minicico1
Příspěvky: 29
Registrován: 30 kvě 2019, 01:13
Reputation: 0

Re: ESP32 nepripoji sa na wifi po prebudeni

Příspěvek od minicico1 » 30 zář 2019, 14:36

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?

jankop
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

Příspěvek od jankop » 30 zář 2019, 14:41

A při probuzení s DEEP_SLEEP to znovu provádí setup() ?
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.
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.

minicico1
Příspěvky: 29
Registrován: 30 kvě 2019, 01:13
Reputation: 0

Re: ESP32 nepripoji sa na wifi po prebudeni

Příspěvek od minicico1 » 30 zář 2019, 15:05

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();
}
nejako takto vyzeral kod, len wifi.begin bol v loope.mozete mi poradit ako to teda osetrit aby mi neprepisovalo stale flesh?na nete je kopec prikladov kde ukladaju premenne na thongspeek a potom uspavaju ale vsetky su pisane podobne.

Uživatelský avatar
gilhad
Příspěvky: 779
Registrován: 07 bře 2018, 11:22
Reputation: 0

Re: ESP32 nepripoji sa na wifi po prebudeni

Příspěvek od gilhad » 30 zář 2019, 19:31

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)

jankop
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

Příspěvek od jankop » 30 zář 2019, 19:48

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.

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:

}

Odpovědět

Kdo je online

Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 26 hostů