ESP32 zapnutí po výpadku napájení bez sítě

Cmrnda
Příspěvky: 5
Registrován: 25 dub 2024, 17:58
Reputation: 0

ESP32 zapnutí po výpadku napájení bez sítě

Příspěvek od Cmrnda » 25 dub 2024, 18:53

Dobrej,
Na ESP32 mám nainstalováno ArduinoOTA a SerialBT. Po přerušení napájení do ESP a opětném zapnutí ESP čeká až se připojí k síti. Nedočká se připojení protože se ztrátou napájení se vypnul i router.
Nepřišel jsem na to, jak to udělat aby se na připojení nečekalo a jinak se vše rozjelo. V setupu mám kontrolní LED a ta tak nepravidelně poblikává, myslel jsem si že to aktivuje OTA s příkazem ESP.restart, čekání jsem smázl a čeká to furt.
Možná by pomohlo to restartovat bez těch připojených knihoven, nebo jak? Poraďíte?

Uživatelský avatar
kiRRow
Příspěvky: 1173
Registrován: 07 kvě 2019, 07:03
Reputation: 0
Bydliště: Opava

Re: ESP32 zapnutí po výpadku napájení bez sítě

Příspěvek od kiRRow » 25 dub 2024, 18:58

Bez kódu se nehnem :(

Cmrnda
Příspěvky: 5
Registrován: 25 dub 2024, 17:58
Reputation: 0

Re: ESP32 zapnutí po výpadku napájení bez sítě

Příspěvek od Cmrnda » 25 dub 2024, 21:42

kiRRow píše:
25 dub 2024, 18:58
Bez kódu se nehnem :(
Co se týče ArduinoOTA či BT to serial jsou kódy na Arduino IDE jako příklady i s připojenými knihovnami. Stručně řečeno, jakmile ESP vysílá, tak se čeká, když se nevysílá, tak se nečeká, ovšem musí být připojeno USB jako komunikační "serial".

Tak se zeptám jinak. Lze nastartovat bez připojených knihoven a za běhu programu je připojit?

Uživatelský avatar
kiRRow
Příspěvky: 1173
Registrován: 07 kvě 2019, 07:03
Reputation: 0
Bydliště: Opava

Re: ESP32 zapnutí po výpadku napájení bez sítě

Příspěvek od kiRRow » 25 dub 2024, 21:51

Nelze, knihovny jsou do programu připojeny během kompilace. Lze ale napsat program tak, aby při určitých situacích používání knihoven přeskakoval.

Pablo74
Příspěvky: 50
Registrován: 03 lis 2019, 17:00
Reputation: 0

Re: ESP32 zapnutí po výpadku napájení bez sítě

Příspěvek od Pablo74 » 25 dub 2024, 21:52

Opravdu sem dej kód, jinak se nepohneme dál. Tvoje vysvětlení jsem četl třikrát, ale ztrácím se, vůbec nerozumím popsanýmu problému.
Lze nastartovat bez připojených knihoven a za běhu programu je připojit?
???

Zdrojový kód napíšeš v jazyku Wiring, ten překladač přeloží do strojovýho kódu procesoru. Ten už obsahuje potřebný části z knihoven, který jsou na začátku zdrojovýho kódu (#include ...). Po spuštění/zapnutí jednočipu už se provádí program ve strojovým kódu a s žádnýma knihovnama už se nepracuje.

Uživatelský avatar
kiRRow
Příspěvky: 1173
Registrován: 07 kvě 2019, 07:03
Reputation: 0
Bydliště: Opava

Re: ESP32 zapnutí po výpadku napájení bez sítě

Příspěvek od kiRRow » 25 dub 2024, 22:17

No jako já v křišťálové kouli vidím, že když se najednou zapne router a to espčko, tak program espčka se stihne někde zacyklovat dříve než nastartuje router ... jako ono se to dá řešit i cestou, co kdyby ke ztrátě napájení nedocházelo ... nebo nacpat na začátek setupu na prasáka obrovský delay()

Cmrnda
Příspěvky: 5
Registrován: 25 dub 2024, 17:58
Reputation: 0

Re: ESP32 zapnutí po výpadku napájení bez sítě

Příspěvek od Cmrnda » 25 dub 2024, 23:28

kiRRow píše:
25 dub 2024, 22:17
No jako já v křišťálové kouli vidím, že když se najednou zapne router a to espčko, tak program espčka se stihne někde zacyklovat dříve než nastartuje router ... jako ono se to dá řešit i cestou, co kdyby ke ztrátě napájení nedocházelo ... nebo nacpat na začátek setupu na prasáka obrovský delay()
Né, podstata věci je taková že ESP hledá síť do které se normálně připojuje když ta síť je. Když nejde síť, ESP se nerozběhne po výpadku jeho napájení. Chci aby se rozeběhlo bez sítě a připojilo až bude možné připojení.
Delay nepomůže protože jakmile se nerozjede ESP, tak se nezapne ani router se sítí. :x

#include <WiFi.h>
#include <ESPmDNS.h>
#include <WiFiUdp.h>
#include <ArduinoOTA.h>
#include <BluetoothSerial.h>
#include <HardwareSerial.h>
#include <EEPROM.h>

//--------------------------------------------------------------------------------------------------------General setup----------------------------------------------------------
void setup()
{
Serial.begin(115200);

//Moje_1_setup();
//Serial_port_setup();
//BT_setup();
OTA_setup();
}
//--------------------

void OTA_setup()
{
Serial.println("Booting");
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password);

while (WiFi.waitForConnectResult() != WL_CONNECTED)
{
Serial.println("Connection Failed! Rebooting...");
delay(1000);
ESP.restart();
}

// Port defaults to 3232
ArduinoOTA.setPort(3232);

// Hostname defaults to esp3232-[MAC]
ArduinoOTA.setHostname("Moje_1");

// No authentication by default
ArduinoOTA.setPassword("admin");

// Password can be set with it's md5 value as well
//MD5(admin) = 21232f297a57a5a743894a0e4a801fc3
ArduinoOTA.setPasswordHash("21232f297a57a5a743894a0e4a801fc3");

ArduinoOTA
.onStart([]() {
String type;
if (ArduinoOTA.getCommand() == U_FLASH)
type = "sketch";
else // U_SPIFFS
type = "filesystem";

// NOTE: if updating SPIFFS this would be the place to unmount SPIFFS using SPIFFS.end()
Serial.println("Start updating " + type);
})
.onEnd([]() {
Serial.println("\nEnd");
})
.onProgress([](unsigned int progress, unsigned int total) {
Serial.printf("Progress: %u%%\r", (progress / (total / 100)));
})
.onError([](ota_error_t error) {
Serial.printf("Error[%u]: ", error);
if (error == OTA_AUTH_ERROR) Serial.println("Auth Failed");
else if (error == OTA_BEGIN_ERROR) Serial.println("Begin Failed");
else if (error == OTA_CONNECT_ERROR) Serial.println("Connect Failed");
else if (error == OTA_RECEIVE_ERROR) Serial.println("Receive Failed");
else if (error == OTA_END_ERROR) Serial.println("End Failed");
});

ArduinoOTA.begin();

Serial.println("Ready");
Serial.print("IP address: ");
Serial.println(WiFi.localIP());

KonecOTA:
;
}

//------------------------------------------------------------------loop----------------------------------------------------
void loop()
{
//Volani
Moje_2();
ArduinoOTA.handle();
}
//--------------------

Uživatelský avatar
kiRRow
Příspěvky: 1173
Registrován: 07 kvě 2019, 07:03
Reputation: 0
Bydliště: Opava

Re: ESP32 zapnutí po výpadku napájení bez sítě

Příspěvek od kiRRow » 26 dub 2024, 14:57

Kód: Vybrat vše

while (WiFi.waitForConnectResult() != WL_CONNECTED)
{
Serial.println("Connection Failed! Rebooting...");
delay(1000);
ESP.restart();
}
Tady se to cykluje. ESP se bude restartovávat do doby než se připojí na wifi. Musíš to přepsat takhle nějak

Kód: Vybrat vše

boolean wifiOnlineStatus = false;
setup(){
	if(WiFi.waitForConnectResult() == WL_CONNECTED) {
		wifiOnlineStatus = true;
	}
	if(wifiOnlineStatus){
		//kod když je připojeno na wifi
	} else {
		//kod když na wifi připojeno není
	}
}

loop(){
	if(wifiOnlineStatus){
		//kod když je připojeno na wifi
	} else {
		//kod když na wifi připojeno není
	}
}

Cmrnda
Příspěvky: 5
Registrován: 25 dub 2024, 17:58
Reputation: 0

Re: ESP32 zapnutí po výpadku napájení bez sítě

Příspěvek od Cmrnda » 26 dub 2024, 21:15

Tak jsem zkusil i tuhle variantu s čekačkou na setupu a taky nic. Včera jsem to zkoušel i se zápisem do epromky, ještě to zkusím zítra a pak tam dám spořivý router. ESP.wifistatus vrací č.3 když je wifi zapnutý, ale to se tam vůbec do toho setupu nedostane.K tomu eps.restart taky ne.

12ks 500Fna cca 24V vydrželo na 3xESP a kol asi tři hodiny, chtě bych tak tři dny.

Cmrnda
Příspěvky: 5
Registrován: 25 dub 2024, 17:58
Reputation: 0

Re: ESP32 zapnutí po výpadku napájení bez sítě

Příspěvek od Cmrnda » 28 dub 2024, 21:19

Nó, sláva! Už, už jsem to zakop, ale jako poslední jsem napsal do loopu ESP.restart..., a je to. Problém byl v tom, že v tom loop se nenačetly ty parametry o připojení. Nevím proč, ale prostě né.

void loop()
{
if (wifiOnlineStatus == true)
{
ArduinoOTA.handle();
}
else
{
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password);

// while (WiFi.waitForConnectResult() != WL_CONNECTED)
// while (WiFi.status() != WL_CONNECTED)
// {
// delay(1);
// }

if (WiFi.status() == WL_CONNECTED) //3
{
ESP.restart();
// OTA_setup();
// SerialBT_setup();

// wifiOnlineStatus == true;
}
}
}

//------------------------------------------------


void setup()
{
Serial.begin(115200);

WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password);

byte WiFi_poc = 0;

while (WiFi.status() != WL_CONNECTED)
{
delay(500);
WiFi_poc = WiFi_poc + 1;
if (WiFi_poc >= 10) goto Neni_WiFi;
}
wifiOnlineStatus = true;
OTA_setup();
SerialBT_setup();
Moje_setup();
goto Konec_setup;

Neni_WiFi:
WiFi_poc = 0;
//SerialBT_setup();
Moje_setup();
Konec_setup:
;
}


Díky za přispění informací.
Nejsem si jist zda to počítadlo WiFi funguje, ale jako celek OK.

Odpovědět

Kdo je online

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