Re: ESP32 domácí automatizace
Pavel Brychta
pavel.brychta na duhasys.eu
Pátek Květen 28 06:10:39 CEST 2021
DD,
ano, handler se dává do loop(), ale doporučuju odstranit ten nešťastný
delay() i když to zrovna nemusí být zdroj problému. Potíž je v tom, že
nepíšete jak se projevuje to, že to nefunguje - pokud upoad proběhne,
ale podezřele rychle a firmware se ve skutečnosti nenahraje, tak je to
tím, že jste nevymazal paměť flash (pio run -t erase) a to ESP má
uloženou jinou partition tabulku. Vždycky, když nahrávám do nového
modulu, tak udělám výmaz flash a teprve pak nahraju první firmware. Já
prakticky výhradně používám Wrover 16MB moduly s trošku upravenou
vnitřní konfigurací a všechny tyto úpravy dělám v přípravku mimo
zařízení před osazením (reklamní linka
https://s.click.aliexpress.com/e/_9j8PIP ).
P.B.
Dne 27. 05. 21 v 23:22 Jan Půhoný napsal(a):
> Dobrý večer,
>
> ten ESPDash je super. Ještě jednou díky za tip. Ohledně těch WDT asi
> tam dám i ten externí, bude potřeba ale časovat někde kolem 1minuty,
> aby to nezabíralo v případě update firmware.
>
> Trochu se s trápím s tím, jak zkombinovat svůj kód s OTA update.
> Funguje mi jen jedno nebo druhé, ale dohromady ne.
>
> Když to napíšu takto z(viz níže), tak OTA je vidět (např. v Arduino
> IDE) ale nejde nic nahrát. Testoval jsem jak Arduino IDE, tak platformio.
>
> image.png
>
> Když tam dám jen příklad OTA tak upload normálně funguje, když tam dám
> jen ESPDash, normálně to funguje. Ale dohromady ne.
>
> Píše se ten OTA handler opravdu do loop?
>
> #include <Arduino.h>
> #if defined(ESP8266)
> /* ESP8266 Dependencies */
> #include <ESP8266WiFi.h>
> #include <ESPAsyncTCP.h>
> #include <ESPAsyncWebServer.h>
> #elif defined(ESP32)
> /* ESP32 Dependencies */
> #include <WiFi.h>
> #include <AsyncTCP.h>
> #include <ESPAsyncWebServer.h>
> #endif
> #include <ESPDash.h>
>
>
> #include <WiFiUdp.h>
> *#include <ArduinoOTA.h>*
>
> /* Your WiFi Credentials */
> const char* ssid = "******"; // SSID
> const char* password = "******"; // Password
>
> const char* OTAhostname = "ESP-puhy";
>
> /* Start Webserver */
> AsyncWebServer server(80);
>
> /* Attach ESP-DASH to AsyncWebServer */
> ESPDash dashboard(&server);
>
> /*
> Button Card
> Format - (Dashboard Instance, Card Type, Card Name)
> */
> Card button(&dashboard, BUTTON_CARD, "Test Button");
>
> /*
> Slider Card
> Format - (Dashboard Instance, Card Type, Card Name, Card
> Symbol(optional), int min, int max)
> */
> Card slider(&dashboard, SLIDER_CARD, "Test Slider", "", 0, 255);
>
>
> void setup() {
> Serial.begin(115200);
>
> /* Connect WiFi */
> WiFi.mode(WIFI_STA);
> WiFi.begin(ssid, password);
> if (WiFi.waitForConnectResult() != WL_CONNECTED) {
> Serial.printf("WiFi Failed!\n");
> return;
> }
> Serial.print("IP Address: ");
> Serial.println(WiFi.localIP());
>
> /* Attach Button Callback */
> button.attachCallback([&](bool value){
> /* Print our new button value received from dashboard */
> Serial.println("Button Triggered: "+String((value)?"true":"false"));
> /* Make sure we update our button's value and send update to
> dashboard */
> button.update(value);
> dashboard.sendUpdates();
> });
>
> /* Attach Slider Callback */
> slider.attachCallback([&](int value){
> /* Print our new slider value received from dashboard */
> Serial.println("Slider Triggered: "+String(value));
> /* Make sure we update our slider's value and send update to
> dashboard */
> slider.update(value);
> dashboard.sendUpdates();
> });
>
> /* Start AsyncWebServer */
> server.begin();
>
> ArduinoOTA.setHostname(OTAhostname);
> ArduinoOTA.onStart([]()
> {
> Serial.println("Start");
> });
> ArduinoOTA.onEnd([]()
> {
> Serial.println("\nEnd");
> });
> ArduinoOTA.onProgress([](unsigned int progress, unsigned int total)
> {
> Serial.printf("Progress: %u%%\r", (progress / (total / 100)));
> });
> ArduinoOTA.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();
> }
>
> void loop() {
> /* Nothing so far */
> * ArduinoOTA.handle();*
>
> delay(5000);
>
> }
>
> Díky,
>
> HP
>
>
>
> st 26. 5. 2021 v 13:45 odesílatel Pavel Brychta
> <pavel.brychta na duhasys.eu <mailto:pavel.brychta na duhasys.eu>> napsal:
>
> Co se týče WDT, tak fakt nevím - mě zatím vždycky stačil vnitřní v
> ESP32 (má i brownout detector, který už jsem také viděl zabrat).
> Zařízení mi běží 24/7. Expandér můžu doporučit místo toho PCF
> raději MCP23008 (nebo 16, pokud je 8 GPIO málo) - minimálně z toho
> důvodu, že má asynchronní reset, takže po resetu jsou GPIO v
> definovaných stavech.
>
> P.B.
>
> Dne 26. 05. 21 v 13:30 Jan Půhoný napsal(a):
>> Díky za reakce. Jde mi o to mít to co nejvíce low level. Opravdu
>> do toho nechci tahat RasPi. Musí to jet i když nepůjde wifi a s
>> tou Atmegou to drží roky až se divím.
>>
>> Maximálně do budoucna můžu přidat nějakou vizualizaci na něčem
>> jako RasPi, ale to spíš už přímo posílat requesty na www a
>> ukládat do MySQL. Potřebuji aby ta logika byla spolehlivá. Ano,
>> mám na tom rybičky a čerpadlo topení ( a taky zalévání na zahradě
>> a vodoměr a zvonky a fakt hodně blbostí :-)
>>
>> Atmega s watchdogem to zatím pár let dala bez ztráty kytičky,
>> uptime tam přetékal bez toho aby se to nějak resetovalo nebo tak
>> něco.
>>
>> Mám to vše jakoby centralizované u hlavního rozvaděče, takže
>> nepotřebuji bezdrátové nody po domě, jde mi o to nahradit tu
>> AtMegu něčím výkonnějším.
>>
>> Budu tam potřebovat hodně I/O, je dobrý nápad k tomu ESP32 dávat
>> pár PCF8574 jako I/O expander nebo je něco robusnějšího?
>>
>> A další věc, je potřeba k ESP32 dávat externí WDT?
>>
>> HP
>>
>>
>> st 26. 5. 2021 v 11:47 odesílatel Pavel Brychta
>> <pavel.brychta na duhasys.eu <mailto:pavel.brychta na duhasys.eu>> napsal:
>>
>> Tak zrovna to je exemplární případ, jak to určitě nedělat. Zde
>> https://github.com/Alextros00/ESP32-MQTT-Relay-Control/blob/main/main/app_main.c
>> <https://github.com/Alextros00/ESP32-MQTT-Relay-Control/blob/main/main/app_main.c>
>>
>> není jediná zmínka, nebo náznak řešení nějakého failsafe
>> mechanizmu.
>> Celé to je na úrovni primitivního Arduino example, který se s
>> detaily
>> jako je třeba jméno topcu vůbec nezalamuje. MQTT failsafe
>> samo o sobě
>> nevyřeší ani omylem.
>>
>> P.B.
>>
>> Dne 26. 05. 21 v 11:28 T. Meinlschmidt napsal(a):
>> > proto pisu mqtt. esp32 tu podporu mqtt ma pomerne slusnou.
>> viz treba
>> > takovy easy priklad
>> >
>> >
>> https://github.com/Alextros00/Home-Automation-NodeRED-ESP-Telegram
>> <https://github.com/Alextros00/Home-Automation-NodeRED-ESP-Telegram>
>> >
>> > tm
>> >
>> > Dne 2021-05-26 10:54, Pavel Brychta napsal:
>> >> ... až na to, že když pak lehne to Pi, nebo WiFi, tak
>> zůstane třeba
>> >> čerpadlo běžet stále, nebo uvaříte rybičky. Přiznám se, že
>> takovouto
>> >> cestou bych nikdy nešel, protože to znamená mít failsafe
>> procesy v ESP
>> >> a řídící logiku jinde, což pro účely automatizace považuji
>> za hodně
>> >> nešťastné řešení. Když už, tak autonomní pocesy na
>> zařízení a API pro
>> >> parametrizaci do toho rPi...
>> >>
>> >> P.B.
>> >>
>> >> Dne 26. 05. 21 v 10:49 T. Meinlschmidt napsal(a):
>> >>> dobre dopoledne.
>> >>>
>> >>> ja se priznam, ze bych vubec nesel touhle cestou, ale mel
>> ESP ciste
>> >>> na hw veci a sber nejakych dat,
>> >>> a celou tu logiku nechal v node-red + mqtt (treba na
>> rpi). Casem na
>> >>> to muzete navazat mobil, UI si udelate podle sebe pomerne
>> jednoduse,
>> >>> navic to umi spoustu veci z jinych zdroju.
>> >>>
>> >>> tm
>> >>>
>> >>> Dne 2021-05-26 10:32, Jan Půhoný napsal:
>> >>>> Dobré dopoledne,
>> >>>>
>> >>>> Ještě bych potřeboval poradit co použít za systém na ESP32.
>> >>>> Jedná se mi o to, že do ESP32 přepisuji z Atmegy 2560
>> něco jako
>> >>>> řízení topení a různých zdrojů tepla a různých hejblátek
>> >>>> doma. Do teď to běží na ATMEGA 2560 a mám tam jednoduchý
>> >>>> "multitasking" pomocí millis. Jedná se v podstatě jen o
>> čtení
>> >>>> teplotních čidel, webserver a pak různé výstupy v podobě SSR
>> >>>> relé + vstupy a logika mezi tím. Nic složitého. Na
>> druhou stranu
>> >>>> za ty roky to celkem naboptnalo co se kódu týče a ten
>> webserver na
>> >>>> té AT2560 je takový dost líný. Navíc tam potřebuji číst http
>> >>>> requesty data z komerční meteostanice a na to už to moc
>> není.
>> >>>>
>> >>>> Neexistuje nějaký opensource projekt na ESP32, kde by byly
>> >>>> vyřešeny základní věci jako webserver + nějaká grafika a
>> >>>> hejblátka abych to nemusel psát úplně od začátku. Líbilo
>> by se
>> >>>> mi už https a základní struktura a dopsal bych si do
>> toho jen tu
>> >>>> vlastní logiku a ovládání vstupů a výstupů.
>> >>>>
>> >>>> Je dobrý nápad na to ESP dávat FreeRTOS, nebo to už je
>> překonané
>> >>>> a používáte něco lepšího? Případně víte o nějakém open
>> >>>> source projektu pro domácí automatizaci pro ESP32?
>> >>>>
>> >>>> Ano, googlil jsem, ale serp je zaplaven videi geeků
>> kteří připojí
>> >>>> k pár relátkům esp a myslí si co nevymysleli a trochu se
>> v tom
>> >>>> ztrácím. Já bych potřeboval něco trochu robusnějšího.
>> >>>>
>> >>>> Díky za nápady.
>> >>>>
>> >>>> HP
>> >>>> _______________________________________________
>> >>>> HW-list mailing list - sponsored by www.HW.cz
>> <http://www.HW.cz>
>> >>>> Hw-list na list.hw.cz <mailto:Hw-list na list.hw.cz>
>> >>>> http://list.hw.cz/mailman/listinfo/hw-list
>> <http://list.hw.cz/mailman/listinfo/hw-list>
>> >>> _______________________________________________
>> >>> HW-list mailing list - sponsored by www.HW.cz
>> <http://www.HW.cz>
>> >>> Hw-list na list.hw.cz <mailto:Hw-list na list.hw.cz>
>> >>> http://list.hw.cz/mailman/listinfo/hw-list
>> <http://list.hw.cz/mailman/listinfo/hw-list>
>> >> _______________________________________________
>> >> HW-list mailing list - sponsored by www.HW.cz
>> <http://www.HW.cz>
>> >> Hw-list na list.hw.cz <mailto:Hw-list na list.hw.cz>
>> >> http://list.hw.cz/mailman/listinfo/hw-list
>> <http://list.hw.cz/mailman/listinfo/hw-list>
>> > _______________________________________________
>> > HW-list mailing list - sponsored by www.HW.cz
>> <http://www.HW.cz>
>> > Hw-list na list.hw.cz <mailto:Hw-list na list.hw.cz>
>> > http://list.hw.cz/mailman/listinfo/hw-list
>> <http://list.hw.cz/mailman/listinfo/hw-list>
>> _______________________________________________
>> HW-list mailing list - sponsored by www.HW.cz
>> <http://www.HW.cz>
>> Hw-list na list.hw.cz <mailto:Hw-list na list.hw.cz>
>> http://list.hw.cz/mailman/listinfo/hw-list
>> <http://list.hw.cz/mailman/listinfo/hw-list>
>>
>>
>> _______________________________________________
>> HW-list mailing list - sponsored bywww.HW.cz <http://www.HW.cz>
>> Hw-list na list.hw.cz <mailto:Hw-list na list.hw.cz>
>> http://list.hw.cz/mailman/listinfo/hw-list <http://list.hw.cz/mailman/listinfo/hw-list>
> _______________________________________________
> HW-list mailing list - sponsored by www.HW.cz <http://www.HW.cz>
> Hw-list na list.hw.cz <mailto:Hw-list na list.hw.cz>
> http://list.hw.cz/mailman/listinfo/hw-list
> <http://list.hw.cz/mailman/listinfo/hw-list>
>
>
> _______________________________________________
> HW-list mailing list - sponsored by www.HW.cz
> Hw-list na list.hw.cz
> http://list.hw.cz/mailman/listinfo/hw-list
------------- další část ---------------
HTML příloha byla odstraněna...
URL: <http://list.hw.cz/pipermail/hw-list/attachments/20210528/ea3f4498/attachment-0001.html>
------------- další část ---------------
A non-text attachment was scrubbed...
Name: image.png
Type: image/png
Size: 1624 bytes
Desc: [žádný popis není k dispozici]
URL: <http://list.hw.cz/pipermail/hw-list/attachments/20210528/ea3f4498/attachment-0001.png>
Další informace o konferenci Hw-list