ESP32 zapnutí po výpadku napájení bez sítě
ESP32 zapnutí po výpadku napájení bez sítě
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?
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?
Re: ESP32 zapnutí po výpadku napájení bez sítě
Bez kódu se nehnem
Re: ESP32 zapnutí po výpadku napájení bez sítě
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?
Re: ESP32 zapnutí po výpadku napájení bez sítě
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.
Re: ESP32 zapnutí po výpadku napájení bez sítě
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.
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.
???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.
Re: ESP32 zapnutí po výpadku napájení bez sítě
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()
Re: ESP32 zapnutí po výpadku napájení bez sítě
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í.kiRRow píše: ↑25 dub 2024, 22:17No 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()
Delay nepomůže protože jakmile se nerozjede ESP, tak se nezapne ani router se sítí.
#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();
}
//--------------------
Re: ESP32 zapnutí po výpadku napájení bez sítě
Kód: Vybrat vše
while (WiFi.waitForConnectResult() != WL_CONNECTED)
{
Serial.println("Connection Failed! Rebooting...");
delay(1000);
ESP.restart();
}
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í
}
}
Re: ESP32 zapnutí po výpadku napájení bez sítě
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.
12ks 500Fna cca 24V vydrželo na 3xESP a kol asi tři hodiny, chtě bych tak tři dny.
Re: ESP32 zapnutí po výpadku napájení bez sítě
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.
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.
Kdo je online
Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 2 hosti