Pripojeni do WiFi

cz_marek
Příspěvky: 104
Registrován: 31 led 2018, 09:01
Reputation: 0

Pripojeni do WiFi

Příspěvek od cz_marek » 04 zář 2019, 07:03

Reším problem jak pripojit ESP do Wifi v casovem intervalu
Jde o to ze mam nejake zařízení ktere má primarni funkci (měření výšky hladiny v barelu, spinani ventilace ve sklepu ...) a pak ma moznost zjisteni stavu na dalku - pripojeni do WiFi.
Řeším jak to udelat abych nestartoval a nepripojoval wifi v setupu protože pokud je wifi nedostupna což se u par zarizeni muze obcas stat tak nedelaji to pro co byli primarne vytvoreny - misto mereni hladiny se nekonecne dlouho pripojuje a hleda wifi ktera tam neni i kdyz to je jen kontrolni a podruzna funkce.

Ideal by bylo kdyby ESP po startu hledalo wifi - pokud nenajde do 20sekund tak to prerusit a pak kontrolovat treba kazdych 5 minut jestli už je wifi dostupna - pokud ano tak zase 20s pokus o pripojeni...

KamilV
Příspěvky: 479
Registrován: 03 dub 2018, 15:27
Reputation: 0
Bydliště: Olomouc

Re: Pripojeni do WiFi

Příspěvek od KamilV » 04 zář 2019, 08:45

Jakou používáš knihovnu? Jak se připojuješ nyní? Ukaž prosím setup()

cz_marek
Příspěvky: 104
Registrován: 31 led 2018, 09:01
Reputation: 0

Re: Pripojeni do WiFi

Příspěvek od cz_marek » 04 zář 2019, 08:59

Sorry tim jsem mel asi zacit...
Použivam ESP8266WiFiMulti - hodi se mi ze muzu do vsech zarizeni dat stejny kod a pak mi to funguje doma, v praci, pres hotspot na telefonu...

Vybral jsem z kodu to podstatne .

Kód: Vybrat vše

#include <ESP8266WiFiMulti.h>
ESP8266WiFiMulti wifiMulti;
WiFiClient client;
WiFiServer server(80); //Server on port 80

void setup() {

  StartWiFi();
  }

void loop() {
 
}

void StartWiFi(){
  WiFi.mode(WIFI_STA);
  wifiMulti.addAP("wifi_1", "heslo_1");  
  wifiMulti.addAP("wifi_2", "heslo_2");
  wifiMulti.addAP("wifi_3", "heslo_3");
  wifiMulti.addAP("wifi_4", "heslo_4");
 
  Serial.println("Connecting ...");
  while (wifiMulti.run() != WL_CONNECTED) { 
    delay(1000);    

    Serial.print(".");
  }

  Serial.println("");
  Serial.print("Connected to ");
  Serial.println(WiFi.SSID());
  Serial.print("IP address: ");
  Serial.println(WiFi.localIP());  
}

Uživatelský avatar
pavel1tu
Příspěvky: 2054
Registrován: 26 říj 2017, 08:28
Reputation: 0
Bydliště: Trutnov
Kontaktovat uživatele:

Re: Pripojeni do WiFi

Příspěvek od pavel1tu » 04 zář 2019, 12:10

Tak jsem se zamotal, na tabletu to nejde ... až doma
Naposledy upravil(a) pavel1tu dne 04 zář 2019, 12:20, celkem upraveno 1 x.
UNO, NANO, Mikro, PRO mini, DUE, ESP32S2, RPi PICO
Pavel1TU
"Správně napsaný kod lze číst jako knihu"

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

Re: Pripojeni do WiFi

Příspěvek od gilhad » 04 zář 2019, 12:18

A nepomohlo by neco ve stylu

Kód: Vybrat vše

#include <ESP8266WiFiMulti.h>
ESP8266WiFiMulti wifiMulti;
WiFiClient client;
WiFiServer server(80); //Server on port 80

bool wifiOK,mereniOK
void setup() {

//  StartWiFi();
  }

void loop() {
.... // nejaka mereni a tak
  if (mereniOK) { // reportujeme, az kdyz je co
      wifiOK=StartWiFi(); // pokud se povede reportovat
      if (wifiOK) {
        Serial.println("Odeslani OK");
      } else {
        Serial.println("Odeslani selhalo");
      };
  };
 
}

void StartWiFi(){
  WiFi.mode(WIFI_STA);
  wifiMulti.addAP("wifi_1", "heslo_1");  
  wifiMulti.addAP("wifi_2", "heslo_2");
  wifiMulti.addAP("wifi_3", "heslo_3");
  wifiMulti.addAP("wifi_4", "heslo_4");
 
  Serial.println("Connecting ...");
  int max_try;
  max_try=20; // max 20 pokusu,
  while ((wifiOK= (wifiMulti.run() != WL_CONNECTED)) && ((max_try>0)) { //  logujeme si, zda jsme se pripojili, delame jen max_try pokusu
    max_try--;
    delay(1000);    

    Serial.print(".");
  }
  if (!wifiOK) return false; // kdyz se to nepodarilo vcas, tak toho nechame

  Serial.println("");
  Serial.print("Connected to ");
  Serial.println(WiFi.SSID());
  Serial.print("IP address: ");
  Serial.println(WiFi.localIP());  
  return true; // podarilo se
}


cz_marek
Příspěvky: 104
Registrován: 31 led 2018, 09:01
Reputation: 0

Re: Pripojeni do WiFi

Příspěvek od cz_marek » 04 zář 2019, 12:39

@ pavel1tu - neresilo by to problem toho ze kdyz se nepripoji do wifi tak se rozbehne program v LOOPu

@ gilhad - pokud by bylo mereni OK tak by se pripojilo do wifi - to by bylo v podstate pri kazdem cyklu, mohl bych to dat primo do loopu. Potřeboval bych spis ošetřit časový interval kdy se zkouší pripojit a pak to vzda a dalsi pokus spusti po nejake dobe - tohle bych byl schopny osetřit. Jen nevim jak na to "když se nepripoji do půl minuty nech toho..."

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

Re: Pripojeni do WiFi

Příspěvek od gilhad » 04 zář 2019, 14:25

To je ten max_try ve StartWifi(), ktery po 20 sekundach prestane blokovat. Jestli je tam jeste nejaky wifiMulti.stop(), tak ho v pripade neuspechu muzes zavolat taky, krome toho, ze vratis false.

(teda pokud to blokuje tak, ze napise "Connecting " a nekonecnou radu tecek, tak tim omezis delku te rady, nez to vzda. Pokud se to zablokuje jeste pred tim napisem "Connecting ...", tak tohle nepomuze)

cz_marek
Příspěvky: 104
Registrován: 31 led 2018, 09:01
Reputation: 0

Re: Pripojeni do WiFi

Příspěvek od cz_marek » 04 zář 2019, 14:41

Jasne už mi to doslo, mel jsem nejakou slabsi chvilku :-) - nebylo by to na čas ale na pokusy - to by slo. Musim to zkusit
Dik

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

Re: Pripojeni do WiFi

Příspěvek od gilhad » 04 zář 2019, 16:32

no, v podstate na cas, protoze ten wifiMulti.run() IMHO pomerne rychle vrati, co zrovna dela a tak to stoji na tom delay(1000)

jankop
Příspěvky: 1029
Registrován: 06 zář 2017, 20:04
Reputation: 0
Bydliště: Brno
Kontaktovat uživatele:

Re: Pripojeni do WiFi

Příspěvek od jankop » 04 zář 2019, 19:06

Nikdy jsem nepoužil WiFiMulti, ale tohle mě funguje slušně. Svit modré LED signalizuje, že zařízení není na WiFi

Kód: Vybrat vše

#include <Ticker.h>
#include <ESP8266WiFi.h>
#include <ESP8266WiFiMulti.h>
#define WIFIPERIODA 10                 // perioda testovani pripojeni k WiFi [s]
#define LEDBLUEPIN 2                   // pin modre LED
bool WiFiTestFlag = true;              // priznak pro periodicky test WiFi
bool WiFiState = false;                // priznak urcujici, jestli je WiFi pripojena
Ticker WiFiTestTick;                   // instance pro periodicky test WiFi
ESP8266WiFiMulti wifiMulti;
//********************************************************
void WiFiTest(void) {
  if (wifiMulti.run() != WL_CONNECTED) {
    WiFiState = false;
    digitalWrite(LEDBLUEPIN, false);
    Serial.println("Disconnected !");
  }
  else {
    WiFiState = true;
    digitalWrite(LEDBLUEPIN, true);
    Serial.print("Connected to ");
    Serial.print(WiFi.SSID());
    Serial.print(", IP address: ");
    Serial.println(WiFi.localIP());
  }
  // Zrusi priznak testovani WiFi
  WiFiTestFlag = false;
}
//*********************************************************
// nastavi priznak pro testovani WiFi pomoci Ticker
void WiFiTestFlagSet(void) {
  WiFiTestFlag = true;
}
//*********************************************************
void setup(void) {
  Serial.begin(115200);
  Serial.println("");
  // konfigurace a zhasnuti modre LED
  pinMode(LEDBLUEPIN, OUTPUT);
  digitalWrite(LEDBLUEPIN, true);
  WiFi.persistent(false);
  WiFi.mode(WIFI_STA);
  wifiMulti.addAP("CYBORGA", "heslo123");
  wifiMulti.addAP("CYBORGB", "heslo123");
  wifiMulti.addAP("CYBORGC", "heslo123");
  wifiMulti.addAP("CYBORGD", "heslo123");
  // aktivace tickeru pro periodické testovani WiFi
  WiFiTestTick.attach(WIFIPERIODA, WiFiTestFlagSet);
}
void loop(void) {
  // pokud je nastaven priznak testovani WiFi, tak ho testuje
  if (WiFiTestFlag)WiFiTest();

  if (WiFiState) {
    //WiFi je OK, mohu tady treba odesilat data po Netu
  }
  Serial.println("Cinnosti, ktere nepotrebuji Net, funguji stale");
  delay(1000);
}

Odpovědět

Kdo je online

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