Pripojeni do WiFi
Pripojeni do WiFi
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...
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...
Re: Pripojeni do WiFi
Jakou používáš knihovnu? Jak se připojuješ nyní? Ukaž prosím setup()
Re: Pripojeni do WiFi
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 .
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());
}
- pavel1tu
- Příspěvky: 2054
- Registrován: 26 říj 2017, 08:28
- Reputation: 0
- Bydliště: Trutnov
- Kontaktovat uživatele:
Re: Pripojeni do WiFi
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"
Pavel1TU
"Správně napsaný kod lze číst jako knihu"
Re: Pripojeni do WiFi
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
}
Re: Pripojeni do WiFi
@ 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..."
@ 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..."
Re: Pripojeni do WiFi
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)
(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)
Re: Pripojeni do WiFi
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
Dik
Re: Pripojeni do WiFi
no, v podstate na cas, protoze ten wifiMulti.run() IMHO pomerne rychle vrati, co zrovna dela a tak to stoji na tom delay(1000)
-
- Příspěvky: 1034
- Registrován: 06 zář 2017, 20:04
- Reputation: 0
- Bydliště: Brno
- Kontaktovat uživatele:
Re: Pripojeni do WiFi
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);
}
Kdo je online
Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 0 hostů