ESP8266 - AP_STA mód fagyás(?)

ESP8266, ESP32 chipek és az ESP-xx modulok. Programozási nyelvek, trükkök, hardware tippek.
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10191
Csatlakozott: 2005. december 9. péntek, 7:00

Re: ESP8266 - AP_STA mód fagyás(?)

Hozzászólás Szerző: Robert »

X-Post: fenékenbillentés.....
Az X-post elérhetősége: viewtopic.php?f=46&t=2009&p=34106#p34106
http://www.tavir.hu - a gazda :)
Avatar
SanyiSay
Elektronbűvölő
Hozzászólások: 1031
Csatlakozott: 2009. február 28. szombat, 7:00

Re: ESP8266 - AP_STA mód fagyás(?)

Hozzászólás Szerző: SanyiSay »

Csak AP módban teszteltétek esetleg a problémát?

OFF:
X-Post: fenékenbillentés.....
Ezzel még várjunk. Lehet hogy szabályzattól eltérő fórumhasználatér is sör jár. :)
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10191
Csatlakozott: 2005. december 9. péntek, 7:00

Re: ESP8266 - AP_STA mód fagyás(?)

Hozzászólás Szerző: Robert »

Off:
Ingyen meghívó az Arduino Day 2017-re (Április 1 :))
Hazai esemény még nincsen....
http://www.tavir.hu - a gazda :)
szmarton
Újonc
Újonc
Hozzászólások: 13
Csatlakozott: 2017. február 24. péntek, 23:34

Re: ESP8266 - AP_STA mód fagyás(?)

Hozzászólás Szerző: szmarton »

:)) Arduino Day-re +1 :)
De amúgy miért ne?!
Az X-Postot majd mergelem a megfelelő ágba :) bocsi :)
szmarton
Újonc
Újonc
Hozzászólások: 13
Csatlakozott: 2017. február 24. péntek, 23:34

Re: ESP8266 - AP_STA mód fagyás(?)

Hozzászólás Szerző: szmarton »

Robert írta:Nagyon a széléről, csak 2 gondolat:
- fórumokban írták, hogy a _routerek_ nagy része nem csípi, ha az eszközök időnként eltűnnek, megjelennek a terükben. És így ezen eszközöket ignorálják. Ez ott volt érdekes, hogy hőmérés és deep sleep. (Felkelek, adatküldök, pihenek - és a többedik felkelés után az MSI és a TPLink router is kivágott)
Én mindenképpen aze elosztott vagy routolt IoT topilógiában gondolkodok amennyiben nem indokolja más körülmény.
Én úgy csinálom, hogy a szofverből állítható, hogy az adott node Gateway vagy Node üzemmódban műxik -e. A node-k alszanak, mérnek, adatot küldenek a Gateway-nek. Az gyűjti, és továbbítja netre. Így a Gateway fixen wifin lóg mindig, és csak a node-k alszanak, így nem vesznek össze a roterrel :) A másik lehetőség az RF kapcsolat az eszközök között, de ezzel méz nem volt időm foglalkozni.
szmarton
Újonc
Újonc
Hozzászólások: 13
Csatlakozott: 2017. február 24. péntek, 23:34

Re: ESP8266 - AP_STA mód fagyás(?)

Hozzászólás Szerző: szmarton »

japeti10 írta:Igen, arra én is rájöttem (azóta is ezzel izzadok "csakazértis"), hogy nem szabad a módok közt kapcsolgatni. Marha sok idő, és a létező AP kapcsolatokat is eldobálja, színtiszta fejetlenség lesz belőle.. Most ott tartok (omlós még), hogy kikapcsolom wifit, ettől még AP megmarad, és csak azt nézem scan-al, hogy van e olyan nevű elérhető hálózat, mint mihez csatlakozni akarok. Ha van, megpróbálok csatlakozni. Valahol itt tartok. Az ötlet nem saját, valamelyik fórumon is idáig jutottak. És látom a Te linkeden is hasonlóan gondolkodik valaki. Nem tudom, akarok e ezzel izzadni, még 1 napot adok neki..
Ez neked stabil megoldás lett végülis?
Én több workaroundot is végig próbáltam, és az én tapasztalatom az hogy nem kapcsolagatok a módok között..
Az én logikám szerint, ha egyszer az ESP-t AP+STA-ba raktad, akkor azmiatt, mert a ledöglött a wifi, amire csatlakozni akarsz, miért is váltanál módot? A mód váltás szerintem arra van, hogy kiválaszd, milyen üzemmódban akarsz jelen lenni a hálózatin, és nem hibakezelésre.

Tehát nekem továbbra is ez a menetrend, ami bejött, és router megdöglés / hibás config esetén is az AP-hoz villám gyorsan hozzáférek:

Kód: Egész kijelölése

void ConnectToWifi() {  
  WiFi.setAutoReconnect(false);
  if (String(config.ssid)!="") 
  {
    if (!config.dhcp)
    {
      WiFi.config(IPAddress(config.IP[0],config.IP[1],config.IP[2],config.IP[3] ),                
                  IPAddress(config.Gateway[0],config.Gateway[1],config.Gateway[2],config.Gateway[3] ),
                  IPAddress(config.Netmask[0],config.Netmask[1],config.Netmask[2],config.Netmask[3] ),
                  IPAddress(8,8,8,8)
                  );               
    }
    if (WiFi.status() != WL_CONNECTED)
    {
      WiFi.begin(config.ssid.c_str(), config.password.c_str());     
      int tryConnect=0;
      while(WiFi.waitForConnectResult() != WL_CONNECTED && tryConnect<3) {
        tryConnect++;
        delay(250);
      }
    }
  }
}

void ConfigureWifi()
{
  ESP.eraseConfig();  
  WiFi.softAPdisconnect();
  WiFi.disconnect();
  WiFi.mode(WIFI_AP_STA);
  
  if (AdminEnabled)
  {  
    ConfigureAP();
    ConfigureCaptivePortal();
  }
  ConnectToWifi();
  wifiHasConnected=WifiHasConnected();
}

Ezen kívül ticker fél percenként (vagy csatlakozási esmény) ellenőrzi a connectet (WifiHasConnected), és ha nincs, újraconnectálok manuálisan.

Még egy apróság, amin el lehet csúszni: Tickerrel közvetlenül ne indíts semmilyen hosszú műveletet, pl. wifi kezelést!
A Tickerrel csak olyan metódust hívj, ami bebillent pl. egy falget (reconnectToWifi=true), és ezt a flaget a loopban vizsgálva hívd meg a reconnectet.
Avatar
SanyiSay
Elektronbűvölő
Hozzászólások: 1031
Csatlakozott: 2009. február 28. szombat, 7:00

Re: ESP8266 - AP_STA mód fagyás(?)

Hozzászólás Szerző: SanyiSay »

A Tickerrel csak olyan metódust hívj, ami bebillent pl. egy falget (reconnectToWifi=true), és ezt a flaget a loopban vizsgálva hívd meg a reconnectet.
Igen ilyenekre aszinkron szervernél sem árt figyelni, de hát ez a lényegük. :)
Avatar
SanyiSay
Elektronbűvölő
Hozzászólások: 1031
Csatlakozott: 2009. február 28. szombat, 7:00

Re: ESP8266 - AP_STA mód fagyás(?)

Hozzászólás Szerző: SanyiSay »

Ja a lényeget kihagytam, hogy nálam a AP-STA és STA közötti váltogatást bírja a Ticker. Mondjuk ez nincs egy hónapos tapasztalat de kb napi 2 váltogatás van benne az összes egységnek.

Viszont beállítottam egy sima AP kapcsolatot és az nem dobja el eddig a rácsatlakozott klienst (eddig 20 perc után ). Ha ezt stabilan hozza akkor van remény :)
Avatar
szuperp
Bitmanipulátor
Hozzászólások: 116
Csatlakozott: 2012. november 17. szombat, 7:00

Re: ESP8266 - AP_STA mód fagyás(?)

Hozzászólás Szerző: szuperp »

Sziasztok!
Én is ezzel a problémával kűzdök 2 napja... annyi különbséggel, hogy nálam tegnap meg is halt egy chip... :( mármint a wifi része... pont akkor amikor előjött A HIBA ... vagyis rá pár percre...
végigolvastam a fórumot, de sajnos a hiba konkrét forrására még nem jöttem rá... és lehet, hogy nem is fogok, mert haladni kell... így egy áthidaló megoldást hoztam össze, amit a mellékelt mintakód tartalmaz.
tudja amit kell : felcsatlakozik, ellenőriz, újracsatlakozik, meg minden.. a lényeg, hogy nem akad le (legalább is nem sokáig)... elvileg... még nem nagyon teszteltem, de elsőre úgy tűnik működik.

Kód: Egész kijelölése

#include <ESP8266WiFi.h>
#include <Ticker.h>

#define STA_SSID  "Cartooning1"
#define STA_PASS  "pomikacinke"
#define AP_SSID  "esp"
#define AP_PASS  "12345678"

Ticker flipper;

boolean _STAok=false;

void WifiData();

boolean TestSTA(){
  Serial.print(F("TestSTA - "));
  for (int i=0;i<10;i++){  
   if (WiFi.status() != WL_CONNECTED) {
      if (i == 9) {
         Serial.println(F("Sikertelen STA csatlakozás"));
         _STAok=false;
         return false;         
      }
      delay(500);
      Serial.print(".");
   }else{
        Serial.println(F("Sikeres STA csatlakozás"));
        _STAok=true;
        return true;
      }   
  }
}

void setup() {
   Serial.begin(115200);
   delay(10);
   Serial.print(F("\n\n"));
   Serial.print(F("ESP STA teszt\n\n"));
   Serial.print(F("Wifi csatlakozás: ->"));

   // előzőleg esetleg beragadt AP mód törlése
   WiFi.mode(WIFI_OFF);
   WiFi.disconnect();
   // automatikus STA csatlakozás bekapcsolása
   WiFi.setAutoConnect(true);   
   delay(100);      
   WiFi.begin(STA_SSID, STA_PASS);   
   if(!TestSTA()){
       WiFi.mode(WIFI_OFF);
       WiFi.disconnect();
   }     
   WiFi.softAP(AP_SSID, AP_PASS, 4, 1);
   WiFi.mode(WIFI_AP_STA);
   
   flipper.attach(5, Verify_STA_AP);

}

void loop() {
   delay(0);
}
void Verify_STA_AP(){
  Serial.print(F("Verify_STA_AP - "));
  if (_STAok && !TestSTA()){
   WiFi.mode(WIFI_OFF);
   WiFi.disconnect();
   WiFi.softAP(AP_SSID, AP_PASS, 4, 1);
  }else if (!_STAok && TestSTA()){
   WiFi.mode(WIFI_OFF);
   WiFi.disconnect();
   WiFi.begin(STA_SSID, STA_PASS); 
   WiFi.softAP(AP_SSID, AP_PASS, 4, 1);
  }
}
Válasz küldése