- 12V Akku mit 280 Ah bauen    Werbung      
Ergebnis 1 bis 10 von 27

Thema: Rolladensteuerung per ESP8288 + WiFi?

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    11.12.2007
    Ort
    weit weg von nahe Bonn
    Alter
    41
    Beiträge
    3.416
    Immerhin habe ich aber so alles in 1 Code, und ich muss jetzt nicht auch noch extern an irgendwelchen anderen Programmen, Tools und Schnittstellen herumbasteln.
    das ist mal wieder unsachlich und unfair (vermutlich ungewollt) formuliert!

    es gibt bei deiner Kombination genau so viel Aufwand wie bei meiner

    Arduino + HTML + Strings zusammenknoten

    Python + HTML + Templates schreiben

    da gibts keinerlei Mehraufwand das ist falsch! Eher sogar weniger Aufwand!


    für meinen persönlichen Geschmack liegt die Eleganz der Python-Lösung in der Schlankheit der Implementierung ... aber µPython ist halt schon ein "Brummer" im Flash Bild  

    Ich möchte hier auch nicht ausschließen dass es eine TEmplates Lösung für Arduino gibt, aber ich zweifle daran und die Doku gibt auch nichts her, aber vielleicht gibt es eine Library die man draufsetzen kann die einem Templates vorhält


    PS: lol ... einmal google und siehe da ... explizit für den ESP32 und unter Verwendung des ESP eigenen AsyncWebServer gibt es das Templateverfahren (in extrem vereinfachter Form)

    https://techtutorialsx.com/2018/10/0...m-file-system/

    Aber das reicht nur für Variablen, der Code muss immernoch im .INO stehen, sonst kann es ja nicht compiliert werden Bild  

    Ich denke meiner Ausbildung und Erfahrung wegen halt stark in Struktuierten Programmen und da ist sowas wie der Flask einfach nur himmlisch! Der "Serv(ier)er" nimmt die Bestellung entgegen und leitet die Anfrage an den entsprechenden "Koch" der dann das Essen zubereitet, welches der "Serv(ier)er" dann ausliefert.

    Und der Koch ist in dem Sinnbild halt das Template ... gefällt mir der Koch oder SErvierer nicht, kann cih sie aunabhängig voneinander umschreiben ... besser noch ich könnte mit einem Servierer und 3 Köchen fast unbemerkt einen der Köche austauschen ohne das Projekt neu zu compilen, ich müsste eeinfach nur das Template updaten, noch während der Server läuft

    Für mich und meine Wahrnehmung ist das sehr Elegant ... auch wenn ich dafür ein Restaurant mit fast mehr Küchenfläche als Gastraum mieten muss (um den Flash Verbrauch von µPython mal ins Bild zu setzen)
    Geändert von Ceos (04.06.2019 um 08:14 Uhr)
    Es gibt 10 Sorten von Menschen: Die einen können binär zählen, die anderen
    nicht.

  2. #2
    HaWe
    Gast
    aber ich kann doch gar kein Python (und ich mag kein Python, auch nicht auf dem Raspi), auch meine ganzen MCUs können weitgehend kein Python, und für alle Programme und Funktionen nutze ich ja eh nur die Arduino IDE, für alle MCUs (AVR, ARM M0, M3, M4, ESP8266, ESP32).
    ESPs nutzten dieselben Libs wie meine AVR-oder ARM-Programme, die alle ein touch TFT oder auch nur ein OLED für die Anzeige nutzen, nur dass jetzt die ESPs zusätzlich html webserver und wifiserver/client Code verwenden.
    Würde ich jetzt die Websites und die Kommunikation untereinander anders aufbauen, bräuchte ich ja jetzt weiterhin mein Arduino für die eigentlichen Programmfunktionen (davon würde ich nie weggehen), aber dann jetzt auch noch zusätzlich Python für die web- und wifi-Funktionen, wo ich gar nicht weiß, wie ich das alles nahtlos zusammenkriege.

    - - - Aktualisiert - - -

    PS
    das mit dem SPIFFS habe ich schon mal irgendwo als ESP32-Beispiel gesehen, aber ich muss gestehen, dass ich das überhaupt nicht verstehe, was das soll - für mich ist das sehr komplex und unübersichtlich...

  3. #3
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    11.12.2007
    Ort
    weit weg von nahe Bonn
    Alter
    41
    Beiträge
    3.416
    SPIFFS https://tttapa.github.io/ESP8266/Cha...%20SPIFFS.html

    Das ist eine sehr interessante (ich möchts glatt so nennen) "Abhandlung" zum Thema

    Im Grunde ist es ein simuliertes Dateisystem (in dem Falle halt in einem SPI-Flash)

    Auf dem PC kannst du ja nach belieben file= open("filename","modus") angeben um eine Datei zu öffnen

    Auf dem Arduino fehlt erstmal Grundsätzlich ein Massenspeicher! Wenn du z.B. eine SDCard anschließt und dann die passende Library nutzt, bietet in der Regel das SDCard Objekt eine open Funktion an um auf Daten darin zuzugreifen. Aber je nach Flashgröße deines Boards oder Controllers (im Fall von STM32 Boards liegt das SPIFFS tatsächlich im Flash des Controller, es ist also streng genommen kein "SPI"-FFS mehr) liegt hier das Dateisystem im Flash auf dem Board selber (meine Erfahrung mit dem SPIFFS Implementierungen für STM32 Controller und µPython hat gezeigt dass man mindestens 25k freien Flash Speicher braucht um ein minimales SPIFFS aufzusetzen .. hat ein Contributor zum µPython Projekt herausgefunden nachdem ich lang genug herumgebohrt habe mit den Parametern)
    Es gibt 10 Sorten von Menschen: Die einen können binär zählen, die anderen
    nicht.

  4. #4
    HaWe
    Gast
    das mit dem SPIFFS macht das ganze für mich dennoch eher komplizierter und unübersichtlicher als einfacher.
    Ich kann besser mit ein paar untereinandergeschriebenen Wiederholungen für Variablen- und Buttonanzeige umgehen als mit kompliziert verschachtelten Funktionen mit -zig Parametern.

    Einfacher wäre es tatsächlich, wenn ich schreiben könnte statt


    Code:
    float Temperaturestat=-999, Humiditystat=-999;
    uint8_t led1stat=0, led2stat=0;
    
    //----------------------------------------------------------
    String SendHTML(){
      
      String script = "<!DOCTYPE html> <html>\n";
      
      script +="<head>";
      script +="<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\"> \n" ;
      script +="<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, user-scalable=no\">\n";  
      script +="<title>LED Control</title>\n";
      script +="<style>html { font-family: Helvetica; display: inline-block; margin: 0px auto; text-align: center;}\n";
      script +="body{margin-top: 50px;} h1 {color: #444444;margin: 50px auto 30px;} h3 {color: #444444;margin-bottom: 50px;}\n";
      script +=".button {display: block;width: 80px;background-color: #3498db;border: none;color: white;padding: 13px 30px;text-decoration: none;font-size: 25px;margin: 0px auto 35px;cursor: pointer;border-radius: 4px;}\n";
      script +=".button-on {background-color: #3498db;}\n";
      script +=".button-on:active {background-color: #2980b9;}\n";
      script +=".button-off {background-color: #34495e;}\n";
      script +=".button-off:active {background-color: #2c3e50;}\n";
      script +="p {font-size: 20px;color: #888;margin-bottom: 10px;}\n";  // 14px;
      script +="</style>\n";
      script +="</head>\n";
      
      script +="<body>\n";
      script +="<h1>ESP32 Web Server</h1>\n";
      //  script +="<h3>Using Station(STA) Mode</h3>\n";
      
      if(led1stat)
      {script +="<p>LED1 Status: ON</p><a class=\"button button-off\" href=\"/led1off\">OFF</a>\n";}
         else
      {script +="<p>LED1 Status: OFF</p><a class=\"button button-on\" href=\"/led1on\">ON</a>\n";}
    
      if(led2stat)
      {script +="<p>LED2 Status: ON</p><a class=\"button button-off\" href=\"/led2off\">OFF</a>\n";}
         else
      {script +="<p>LED2 Status: OFF</p><a class=\"button button-on\" href=\"/led2on\">ON</a>\n";}
    
      script +="<h1>ESP32 Weather Report</h1>\n";
      
      script +="<h1>";
      script +="<p>Temperature: ";
      script +=(int)Temperaturestat;
      script +="°C</p>";
      script +="<p>Humidity: ";
      script +=(int)Humiditystat;
      script +="%</p>";
      script +="</h1>";
    
      script +="</body>\n";
      script +="</html>\n";
      return script;
    }
    jetzt, vereinfacht:
    Code:
    float Temperaturestat=-999, Humiditystat=-999;
    uint8_t led1stat=0, led2stat=0;
    
    //----------------------------------------------------------
    String SendHTML(){
      
      String script = startHtmlWebsite();
    
      script += defineFonts();
      script += defineColors();
      script += importWidgets();
    
      script += printTitle(h1, "ESP32 Web Server" );
      
      script += printText(h3, "Using Station(STA) Mode \n");
      script += addButton("LED1 Status: %s \n",  led1stat);
      script += addButton("LED2 Status: %s \n",  led2stat);
    
      script += printText(h1, "ESP32 Weather Report \n");
    
      script += printVar(h2, "Temperature: %d° \n ", (int)Temperaturestat );
      script += printVar(h2, "Humidity: %d%% \n ", (int)Humiditystat );
      
      script += finishHtmlWebsite();
    
      return script;
    }
    Geändert von HaWe (05.06.2019 um 08:43 Uhr)

  5. #5
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    11.12.2007
    Ort
    weit weg von nahe Bonn
    Alter
    41
    Beiträge
    3.416
    Die Idee ist nicht schlecht, aber dein RAM wird sthönen und der Aufruf einer Webseite sehr lange dauern, weil du be jedem Aufruf erst den String im RAM konstruierst und zurück gibst.

    Ich grübel gerade ob man den statischen Teil nicht irgendwie sinnvoll außerhalb der Methoden als Const hinterlegen kann und dann einfach nur beim schreiben in den Socket bestimmte Marker abwartet um dann eben Inhalte einzufüllen (wie in dem ESP spezifischen AsyncWebServer Beispiel oben)

    So etwas in der Art wie "<?varName1?>"

    Variablen übergibst du am besten mit Hilfe eines Dictionary, also eine Liste von <Key, Value> Paaren
    Code:
    typedef VarList_t std::Map<std::String, std::String>;
    boolean sendHTML(std::String Template, VarList_t aVarList);
    
    VarList_t  VarList;
    ...
    VarList.clear();
    VarList["varName1"] = "etwas schönes"
    if(!sendHTML(irgendeineHTMLmitVarName1darin,VarList) printError();

    Wenn jetzt in SendHTML während des senden in dem HTML String ein "<?" gefunden wird, sendet er nciht weiter sondern scannt bis zum passenden "?>" durch. Dann ruft er den Inhalt der Variable aus dem Dictionary und sendet den Inhalt. Danach setzt er nach dem schließenden "?>" den HTML String weiter fort, bis er wieder auf "<?" stößt oder am Ende ankommt.
    Es gibt 10 Sorten von Menschen: Die einen können binär zählen, die anderen
    nicht.

  6. #6
    HaWe
    Gast
    Zitat Zitat von Ceos Beitrag anzeigen
    Die Idee ist nicht schlecht, aber dein RAM wird sthönen und der Aufruf einer Webseite sehr lange dauern, weil du be jedem Aufruf erst den String im RAM konstruierst und zurück gibst.

    Ich grübel gerade ob man den statischen Teil nicht irgendwie sinnvoll außerhalb der Methoden als Const hinterlegen kann und dann einfach nur beim schreiben in den Socket bestimmte Marker abwartet um dann eben Inhalte einzufüllen (wie in dem ESP spezifischen AsyncWebServer Beispiel oben)

    So etwas in der Art wie "<?varName1?>"

    Variablen übergibst du am besten mit Hilfe eines Dictionary, also eine Liste von <Key, Value> Paaren
    Code:
    typedef VarList_t std::Map<std::String, std::String>;
    boolean sendHTML(std::String Template, VarList_t aVarList);
    
    VarList_t  VarList;
    ...
    VarList.clear();
    VarList["varName1"] = "etwas schönes"
    if(!sendHTML(irgendeineHTMLmitVarName1darin,VarList) printError();

    Wenn jetzt in SendHTML während des senden in dem HTML String ein "<?" gefunden wird, sendet er nciht weiter sondern scannt bis zum passenden "?>" durch. Dann ruft er den Inhalt der Variable aus dem Dictionary und sendet den Inhalt. Danach setzt er nach dem schließenden "?>" den HTML String weiter fort, bis er wieder auf "<?" stößt oder am Ende ankommt.
    RAM habe ich doch bis zum Abwinken bei den ESPs, sogar beim 8266, darüber mache ich mir keine Sorgen.
    Beim ESP32 habe ich sogar ungenutzte 160MB im Heap...
    wichtig wäre nur eine einfache Syntax, die nach Variablenübergabe (z.B. wie bei sprintf) alles drum und dran intelligent mit html Zeichen und Tokens ergänzt.

  7. #7
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    11.12.2007
    Ort
    weit weg von nahe Bonn
    Alter
    41
    Beiträge
    3.416
    ich lese hier nur 520KB RAM insgesamt für den ESP32 , ich vermute MB war vertippt

    Mit "Sorgen machen" hat das nicht viel zu tun ... morgen schreibst du etwas auf der Basis deines jetzigen Codes und wunderst dich am Ende des Tages warum dein Projekt ständig rebootet

    Die Art und Weise solche statischen Daten als lokale Variablen in Methoden zu deklarieren ist so schlecht das sollte man vermeiden wo es nur geht!
    Es gibt 10 Sorten von Menschen: Die einen können binär zählen, die anderen
    nicht.

Ähnliche Themen

  1. Arduino Uno WiFi
    Von Holle1976 im Forum Arduino -Plattform
    Antworten: 0
    Letzter Beitrag: 04.01.2017, 17:02
  2. RPi als Wifi Router
    Von tucow im Forum Raspberry Pi
    Antworten: 1
    Letzter Beitrag: 02.02.2013, 08:43
  3. Problem mit WIFI 1.4
    Von markus788 im Forum Robby RP6
    Antworten: 21
    Letzter Beitrag: 26.11.2012, 19:43
  4. ARM für WiFi steuerung ?
    Von fat tony im Forum ARM - 32-bit-Mikrocontroller-Architektur
    Antworten: 5
    Letzter Beitrag: 03.01.2010, 13:57
  5. Wifi Roboter
    Von newName im Forum Allgemeines zum Thema Roboter / Modellbau
    Antworten: 4
    Letzter Beitrag: 16.01.2008, 13:51

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

    Werbung      fchao-Sinus-Wechselrichter AliExpress