ESP8266 Arduino - szerver újraindítás vagy ön Reset

ESP8266, ESP32 chipek és az ESP-xx modulok. Programozási nyelvek, trükkök, hardware tippek.
Avatar
aaszabo
Tranzisztorgyógyász
Hozzászólások: 179
Csatlakozott: 2012. január 22. vasárnap, 7:00

ESP8266 Arduino - szerver újraindítás vagy ön Reset

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

Sziasztok!

Nem boldogulok az ESP8266 Arduino környezetben az újraindítással.
A feladat az, hogy a szerver által adott formon egy böngészős kliensben új nevet adok az AP-nek. Ezt a szerver oldali program fogadja. Leállítja a szervert, majd átnevezi és újraindítja. Azt gondoltam, hogy meg is csináltam a szükséges lépéseket ehhez.

Elindulás után a szerver megjelenik a wifi kapcsolatok között. Wifi-vel lehet hozzá csatlakozni az új néven, de már böngészőben az első behívásra az jön vissza, hogy nincs szerver. A szerver soros portra kiirt logjai alapján sincs semmi életjel arról, hogy a kérés elérte volna a szervert. A lenti programrészlethez a default 192.168.4.1 címen hívok be.
Ha áramtalanítom az ESP modult és újra visszakapcsolom, akkor minden működik rendesen és az új nevű AP-hez lehet csatlakozni és a kéréseket is kiszolgálja.

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

//program elején még az inicializálás részben
ESP8266WebServer g_server(80);

//majd a névváltoztató behívás feldolgozása és az új név elmentése után.
g_server.close();
//Itt megtörténik, de nem részletezem az új név beállítása Flash-ből g_strSsid-be
//Majd lefut ez a rész, amit a setup is meghív:
WiFi.softAP(g_strSsid.c_str(), getStoredPassword().c_str());
//set the handlerfor incoming requests
IPAddress myIP = WiFi.softAPIP();
g_server.on("/", HandlerAxgRequest);
g_server.begin();
Mivel a hideg reset (áramtalanítás) után jól működött, gondoltam jó lesz nekem is a reset. Próbáltam az ESP reset-et meghívni, miután elmentettem az új nevet a Flsh-be. Újraindulás után 3x van reset magától. A harmadik már WDT, azaz watch Dog Timer reset. Aztán semmi nem jelenik meg a logban és nem látszik a wifin sem az ESP modul.
Mindkét alábbi módon ez az eredmény:
ESP.reset();
ESP.restart();

Van valakinek az újraindítással kapcsolatos tapasztalata, ötlete?
Avatar
aaszabo
Tranzisztorgyógyász
Hozzászólások: 179
Csatlakozott: 2012. január 22. vasárnap, 7:00

Re: ESP8266 Arduino - szerver újraindítás vagy ön Reset

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

A reset részhez találtam megoldást. Kiderült, hogy ez egy ismert jelenség. Vagyis a flash feltöltés utáni első programból indított reset mindig egy használhatatlan állapotba viszi az IC-t. Egy áramtalanítás után viszont már jól működik mind az ESP.reset(), mind az ESP.restart() akár hányszor.

https://github.com/esp8266/Arduino/issues/1017

Flash utáni hideg reset után tízszer is átneveztem az AP-t a form segítségével és az újraindítások után gond nélkül megjelent a wifi keresőben a telefonon az új SSID az AP-hez és csatlakozva hozzá a 192.168.4.1-re küldőt HTTP request a bongészöből megint behozta a formot.

Az AP és a wifi újraindítása viszont még nem működik. Ide az a sejtésem, hogy valahogy nem jól adom meg újra a behívást kezelő függvényt. Még nyomozom...
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10191
Csatlakozott: 2005. december 9. péntek, 7:00

Re: ESP8266 Arduino - szerver újraindítás vagy ön Reset

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

Ha van egy szabad I/O lábad, akkor azt összekötni a külső resettel?
Avatar
SanyiSay
Elektronbűvölő
Hozzászólások: 1031
Csatlakozott: 2009. február 28. szombat, 7:00

Re: ESP8266 Arduino - szerver újraindítás vagy ön Reset

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

Nem biztos hogy jól értem a kérdést, de ahhoz hogy új AP neved legyen nem kell reboot.

Serial-on kapott string lesz az új AP SSID.

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

#include <ESP8266WiFi.h>

const char* AP_SSID = "ESP_teszt";
const char* AP_PASS = "12345678";

void setup() {
	Serial.begin(115200);
	delay(10);
	Serial.println();

        // Előzőleg csatlakoztatott AP mód felfüggesztése
	WiFi.mode(WIFI_OFF);
	WiFi.disconnect();
	delay(100); 
        //  WIFI APmód beállítása
	WiFi.mode(WIFI_AP); 
	WiFi.softAP(AP_SSID, AP_PASS, 4);
}


void loop() {

	if (Serial.available()) {
		String s = Serial.readString();
		Serial.flush();

		Serial.println(s);

		WiFi.mode(WIFI_OFF);
		WiFi.disconnect();
		delay(100); 
                
		WiFi.mode(WIFI_AP); 
		WiFi.softAP(s.c_str(), AP_PASS, 4);
	}
}
Avatar
aaszabo
Tranzisztorgyógyász
Hozzászólások: 179
Csatlakozott: 2012. január 22. vasárnap, 7:00

Re: ESP8266 Arduino - szerver újraindítás vagy ön Reset

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

SanyiSay köszönöm a választ, működik.

Az az érdekes, hogy a WiFi.disconnect() false-val tér vissza, ami elvileg azt jelentené, hogy nem sikerült a disconnect. Viszont ettől függetlenül működik.
Avatar
SanyiSay
Elektronbűvölő
Hozzászólások: 1031
Csatlakozott: 2009. február 28. szombat, 7:00

Re: ESP8266 Arduino - szerver újraindítás vagy ön Reset

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

Szuper. :)
Lehet azért false mert előtte van WIFI_OFF.
Igazából nekem arra kelett hogy megszüntessem a beragadt AP módot, Így minden tiltást betettem amit találtam. Aztán lehet hogy nem is kell mind a kettő.
Innen már igény szerint kis utánaolvasás, és tesztelés kérdése az egész. :)
Avatar
aaszabo
Tranzisztorgyógyász
Hozzászólások: 179
Csatlakozott: 2012. január 22. vasárnap, 7:00

Re: ESP8266 Arduino - szerver újraindítás vagy ön Reset

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

Néztem a disconnect kódját, de abban ameddig lelátok nem láttam azt, hogy a módot beállította volna OFF-ra.
De az is fura, hogy ezt API-n kívülről kell/lehet kézzel állítani.
Még azért utána járok és tesztelem, hogy mi a biztonságos működés módja. De eddig nem hibázott akárhányszor is próbáltam.
Avatar
SanyiSay
Elektronbűvölő
Hozzászólások: 1031
Csatlakozott: 2009. február 28. szombat, 7:00

Re: ESP8266 Arduino - szerver újraindítás vagy ön Reset

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

Nálam napi szintű használatba van több egységen vagy fél éve, AP-STA és STA üzemmód váltogatásnál. Eddig nem volt vele gond. Ám ah találsz valamit és közzéteszed az bizony nem lenne rossz.
kszabi
DrótVégénSzéndarab
Hozzászólások: 49
Csatlakozott: 2016. április 11. hétfő, 14:22

Re: ESP8266 Arduino - szerver újraindítás vagy ön Reset

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

Szia Sanyi!
Te melyik libraryt használod a wifi programozáshoz?
Avatar
SanyiSay
Elektronbűvölő
Hozzászólások: 1031
Csatlakozott: 2009. február 28. szombat, 7:00

Re: ESP8266 Arduino - szerver újraindítás vagy ön Reset

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

Szia!

Ha a board verzióra gondolsz akkor
innen: https://github.com/esp8266/Arduino
2.1.0 stabil verziója a kedvenc,
de egyébként ugyanezen az oldalon fent van egy /Clone or download/ gomb és onnan töltöttem le az épp legfrissebbet.
Mostanság többen panaszkodnak WDT resetre de igazából ezt eddig még táp javítással, és főként a kód átnézésével sikerült orvosolnom.
Most épp ott tartok hogy nem igen változtatok, mert elég stabilnak tűnik amit épp használok, de hogy mikori letöltés azt nem tudnám megmondani.
esptool-t meg ha hiányolja https://ci.appveyor.com/project/igrr/es ... /artifacts akkor innen töltöm le.

pld. a gmailes levélküldés minta programom, volt hogy csak a 2.1.0 val tudták lefordítani, aztán kipróbáltam és nálam ment szépen még, 2.3.0-val is.

Úgy hogy nincs annyira határozott válaszom.
kszabi
DrótVégénSzéndarab
Hozzászólások: 49
Csatlakozott: 2016. április 11. hétfő, 14:22

Re: ESP8266 Arduino - szerver újraindítás vagy ön Reset

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

Nálam a WDT reset csak beragadt programnál fordult elő.
Eddig a nextion és a DHT szenzor kezelésében normál működéskor nem jött elő.
Most kezdem a hálózatos témát, ott talán lesz vele gond.
Avatar
SanyiSay
Elektronbűvölő
Hozzászólások: 1031
Csatlakozott: 2009. február 28. szombat, 7:00

Re: ESP8266 Arduino - szerver újraindítás vagy ön Reset

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

Minnél kevesebb a feladat annál stabilabb a rendszer az tututi. :)
#include <FS.h> // fájlkezelés
#include <ESP8266WiFi.h> //Wifi csatlakozás (az ebben lévő webszerver gyorsabb de nem működik együtt a HTTP updater résszel)
#include <ESP8266WebServer.h> // webszerver
#include <ESP8266HTTPUpdateServer.h> // Weboldalon keresztül OTA frissítés
#include <ESP8266FtpServer.h> // ESP FTP szerveren keresztüli fájlkezelés
#include <ArduinoJson.h> // JSON adatok feldolgozzása, fájlba mentése
+ Debug port Serial1
Ezek futnak nálam a Nextion konzolon, de tegnap épp piszkosul összeakadt valami. :roll:

Amúgy a Nextiont SW Serialon használod? és ha igen akkor az is megy rendesen fagyás nélkül?
kszabi
DrótVégénSzéndarab
Hozzászólások: 49
Csatlakozott: 2016. április 11. hétfő, 14:22

Re: ESP8266 Arduino - szerver újraindítás vagy ön Reset

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

SW Serial--t használom.
Amíg csak egy button kezelése volt a program ment is szépen. Aztán ahogy bővült egyre ritkábban kezelte az event- eket, es néha resetbe is ment.
Persze, mert egyre kisebb az esélye hogy az adat küldéskor épp figyelje a soros portot.
A megoldás az lett hogy dual-state buttont használok amit akkor kérdezek le amikor épp van rá idő, majd set-el alaphelyzetbe állítom.
Másik megoldás hogy a nextionon belül az események egy változóba kerülnek, amit lekérdezek, majd kiszolgálás után nullázok.
Avatar
SanyiSay
Elektronbűvölő
Hozzászólások: 1031
Csatlakozott: 2009. február 28. szombat, 7:00

Re: ESP8266 Arduino - szerver újraindítás vagy ön Reset

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

Ez jó hír, mert akkor az ESP bírja az SW serialt. Akkor ott is valószínű csak a kódomba volt a hiba.
Intő példákat köszi.
Én eleinte minden adatot feltöltöttem a Nextionra aztán onnan küldtem vissza az ESP-re ami kelett belőle, de most már mindent ESP-n tárolok és csak 2 Byte azonosítót küldök az ESP-nek. Így használható, amúgy meg bitang lassú volt. Ez is egy olyan témakör amit még szokni kell, meg tesztelgetni ahogy látom.
kszabi
DrótVégénSzéndarab
Hozzászólások: 49
Csatlakozott: 2016. április 11. hétfő, 14:22

Re: ESP8266 Arduino - szerver újraindítás vagy ön Reset

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

Hello!
Létezik valahol leírás arról hogy ezeket a wifi függvényeket hogyan lehet használni, mint pl az at parancsoknál?
Válasz küldése