Modyfikacja przykładu WebInterface Arduino

User avatar
YoMan
Posts: 3104
Joined: Thu Apr 30, 2020 5:18 pm
Location: Częstochowa

Post

Thx za pokonanie tej drogi i podzielenie się. Jeszcze pytanie jak usunąć to (chyba) większości niepotrzebne "update file system"
YoMan
________________________________________
Wziąłem udział w SOP2023 & SOP2024
petione
Posts: 117
Joined: Sat Jul 21, 2018 4:26 pm

Post

YoMan wrote: Wed Feb 12, 2025 11:12 pm Thx za pokonanie tej drogi i podzielenie się. Jeszcze pytanie jak usunąć to (chyba) większości niepotrzebne "update file system"
Myślę że wystarczy usunąć odpowiednie linie w packages\framework-arduinoespressif8266\libraries\ESP8266HTTPUpdateServer\src\ESP8266HTTPUpdateServer-impl.h

To są już pliki z paczki Espressifa, nie Suplowe

Code: Select all


static const char serverIndex[] PROGMEM =
  R"(<!DOCTYPE html>
     <html lang='en'>
     <head>
         <meta charset='utf-8'>
         <meta name='viewport' content='width=device-width,initial-scale=1'/>
     </head>
     <body>
     <form method='POST' action='' enctype='multipart/form-data'>
         Firmware:<br>
         <input type='file' accept='.bin,.bin.gz' name='firmware'>
         <input type='submit' value='Update Firmware'>
     </form>
     
  ------------------------------------------ DO USUNIECIA   
     <form method='POST' action='' enctype='multipart/form-data'>
         FileSystem:<br>
         <input type='file' accept='.bin,.bin.gz' name='filesystem'>
         <input type='submit' value='Update FileSystem'>
     </form>
 ----------------------------------------------------------------------    
     
     
     </body>
     </html>)";



Image
User avatar
klew
Posts: 10693
Joined: Thu Jun 27, 2019 12:16 pm
Location: Wrocław

Post

Zmiany w bibliotekach trzeba albo wprowadzić w repo, albo traktować jako ciekawostkę :P

Dodałem przed chwilą do html generatora opcję dodawania przycisków HTML_SECTION_BUTTON_BEFORE i HTML_SECTION_BUTTON_AFTER z przykładowym przyciskiem ButtonRefresh.

Zmiany w esp_web_server możesz wrzucić jako PR do supla-device.
Możesz też przerobić przycisk "udpate" na wzór tego ButtonRefresh i też dodać w PR.
Te komponenty od OTA też można by dodać w ramach kodu przycisku "update", tylko tam trzeba sprawdzić jak to dobrze zrobić, aby to dobrze działało.
petione
Posts: 117
Joined: Sat Jul 21, 2018 4:26 pm

Post

klew wrote: Thu Feb 13, 2025 9:55 am Zmiany w bibliotekach trzeba albo wprowadzić w repo, albo traktować jako ciekawostkę :P

Dodałem przed chwilą do html generatora opcję dodawania przycisków HTML_SECTION_BUTTON_BEFORE i HTML_SECTION_BUTTON_AFTER z przykładowym przyciskiem ButtonRefresh.

Zmiany w esp_web_server możesz wrzucić jako PR do supla-device.
Możesz też przerobić przycisk "udpate" na wzór tego ButtonRefresh i też dodać w PR.
Te komponenty od OTA też można by dodać w ramach kodu przycisku "update", tylko tam trzeba sprawdzić jak to dobrze zrobić, aby to dobrze działało.
Więc może tak:
plik button_update.h

Code: Select all

#include "button_update.h"
#include <supla/network/web_sender.h>

#ifdef ARDUINO_ARCH_ESP32
#include <HTTPUpdateServer.h>
HTTPUpdateServer httpUpdater;
#else
#include <ESP8266HTTPUpdateServer.h>
ESP8266HTTPUpdateServer httpUpdater;
#endif

using Supla::Html::ButtonUpdate;

ButtonUpdate::ButtonUpdate(Supla::EspWebServer* server)
    : HtmlElement(HTML_SECTION_BUTTON_AFTER), server(server) {
  // Automatyczna konfiguracja aktualizacji OTA
  httpUpdater.setup(server->getServerPtr(), "/update");
}

void ButtonUpdate::send(Supla::WebSender* sender) {
  sender->send(
      "<button type=\"button\" onclick=\"window.location.href='/update';\">"
      "UPDATE"
      "</button>");
}
oraz plik button_update.cpp

Code: Select all

#include "button_update.h"
#include <supla/network/web_sender.h>

#ifdef ARDUINO_ARCH_ESP32
#include <HTTPUpdateServer.h>
HTTPUpdateServer httpUpdater;
#else
#include <ESP8266HTTPUpdateServer.h>
ESP8266HTTPUpdateServer httpUpdater;
#endif

using Supla::Html::ButtonUpdate;

ButtonUpdate::ButtonUpdate(Supla::EspWebServer* server)
    : HtmlElement(HTML_SECTION_BUTTON_AFTER), server(server) {
  // Automatyczna konfiguracja aktualizacji OTA
  httpUpdater.setup(server->getServerPtr(), "/update");
}

void ButtonUpdate::send(Supla::WebSender* sender) {
  sender->send(
      "<button type=\"button\" onclick=\"window.location.href='/update';\">"
      "UPDATE"
      "</button>");
}
Oba pliki należy wrzucić na chwilę obecną do SuplaDevice\src\supla\network\html

I jeśli w pliku main.cpp dodać tylko taki zapis:

Code: Select all

#include <supla/network/html/button_refresh.h>
#include <supla/network/html/button_update.h>

Supla::Html::ButtonRefresh htmlButtonRefresh;
Supla::Html::ButtonUpdate htmlButtonUpdate(&suplaServer);
to teoretycznie mamy taki efekt:
Image

i oczywiście po naciśnięciu UPDATE

Image
User avatar
klew
Posts: 10693
Joined: Thu Jun 27, 2019 12:16 pm
Location: Wrocław

Post

To nie będzie dobrze działać. Tzn jak dodasz te pliki, to te klasy http updater będą zawsze tworzone i zawsze będą zużywać pamięć, nawet jeśli nie używasz tego buttona i aktualizacji w ten sposób.
petione
Posts: 117
Joined: Sat Jul 21, 2018 4:26 pm

Post

klew wrote: Thu Feb 13, 2025 6:43 pm To nie będzie dobrze działać. Tzn jak dodasz te pliki, to te klasy http updater będą zawsze tworzone i zawsze będą zużywać pamięć, nawet jeśli nie używasz tego buttona i aktualizacji w ten sposób.
Obawiam się że ja już tego nie przeskoczę.

Jedyne co ja mogę to po prostu dodać tylko przycisk a resztę zapisów zostawić w main jak było...
User avatar
klew
Posts: 10693
Joined: Thu Jun 27, 2019 12:16 pm
Location: Wrocław

Post

petione wrote: Thu Feb 13, 2025 6:49 pm
klew wrote: Thu Feb 13, 2025 6:43 pm To nie będzie dobrze działać. Tzn jak dodasz te pliki, to te klasy http updater będą zawsze tworzone i zawsze będą zużywać pamięć, nawet jeśli nie używasz tego buttona i aktualizacji w ten sposób.
Obawiam się że ja już tego nie przeskoczę.

Jedyne co ja mogę to po prostu dodać tylko przycisk a resztę zapisów zostawić w main jak było...
Wrzuć to jako pr na github. Tam można dawać komentarze do poszczególnych linii kodu i łatwiej podpowiedzieć
petione
Posts: 117
Joined: Sat Jul 21, 2018 4:26 pm

Post

klew wrote: Thu Feb 13, 2025 6:57 pm
petione wrote: Thu Feb 13, 2025 6:49 pm
klew wrote: Thu Feb 13, 2025 6:43 pm To nie będzie dobrze działać. Tzn jak dodasz te pliki, to te klasy http updater będą zawsze tworzone i zawsze będą zużywać pamięć, nawet jeśli nie używasz tego buttona i aktualizacji w ten sposób.
Obawiam się że ja już tego nie przeskoczę.

Jedyne co ja mogę to po prostu dodać tylko przycisk a resztę zapisów zostawić w main jak było...
Wrzuć to jako pr na github. Tam można dawać komentarze do poszczególnych linii kodu i łatwiej podpowiedzieć
Rozwiej moje wątpliwości, nie żebym się sprzeczał tylko dopytuję czy mam dobry dok myślenia...

Jeśli zaincluduje button_update.h to zużywam pamięć nawet jeśli nie utworze komponentu

Code: Select all

Supla::Html::ButtonUpdate htmlButtonUpdate(&suplaServer)
i jeśli ktoś by chciał zrobic "manualny update" wpisując adres_IP/update to po prostu będzie miał mniej dostępnej pamięci i dla niego to jest nieefektywne. O to chodzi?

Bo jeśli tak to to moim zdaniem jeśli includuje button_update.h i to jest to świadome działanie mające na celu stworzyć przycisk co się łączy oczywiście ze zajętością pamięci. A jak ktoś będzie chciał "manualnie" to po trzeba stworzyć inny sposób "niegraficzny"... Hmm

P.S Nigdy nie działałem z Githubem i muszę dopiero doczytać ja stworzyć pull request bo chyba coś źle robię
User avatar
klew
Posts: 10693
Joined: Thu Jun 27, 2019 12:16 pm
Location: Wrocław

Post

Plik cpp zawiera obiekty globalne i one będą zajmować pamięć, niezależnie od tego czy dodasz include, czy nie.

Musisz mieć konto na gh, następnie zrobić fork. Swojego forka klonujesz do siebie, tam nanosisz zmiany, commitujesz je i dajesz push.
Wtedy z gh możesz zrobić pr

Return to “Pomoc”