ESP8266 - Ovladaní přes web.

Raspberry, Arduino, Mini-PC a další

Moderátor: Moderátoři

Zpráva
Autor
Uživatelský avatar
Le_Ze
Příspěvky: 631
Registrován: 24 črc 2014, 02:00
Bydliště: Ano, mam

#16 Příspěvek od Le_Ze »

I když mi trochu trvalo než jsem přišel na to jak to v te ESP8266 funguje a jak to odchytit, je to funkční :D
Děkují. :prst:

Uživatelský avatar
Le_Ze
Příspěvky: 631
Registrován: 24 črc 2014, 02:00
Bydliště: Ano, mam

#17 Příspěvek od Le_Ze »

By byl dalši dotaz. Co je špatně?

Kód: Vybrat vše

<form action="/index.php">
    <input type="radio" id="R1" name="Rele" value="Rele1">
    <label for="R1">Rele1</label><br>
    <input type="radio" id="R2" name="Rele" value="Rele2">
    <label for="R2">Rele2</label><br>
    <input type="radio" id="R3" name="Rele" value="Rele3">
    <label for="R3">Rele3</label><br>
    <br>
  
    <input type="submit" value="Submit">
    </form>

Kód: Vybrat vše

void handleForm() {
   String radio = server.arg("Rele"); 
   Serial.println(radio);    
   
   server.sendHeader("Location", "/");
   server.send(302, "text/plain", "Updated-- Press Back Button"); 
   delay(500);
}
Funguje to.
Na ser. monitor se vypisuje value zaškrtnuteho radio.
Když ale zaškrtnu nějake radio a klknu na button, resetuje se mi stranka a všechny radio jsou prazdne.

https://circuits4you.com/2019/03/20/esp ... m-website/

Uplně dole.
Q1. Is it possible to stay on same page after pressing button?

ANS: Yes it is possible using server.sendHeader. Add these lines at the bottom of action page handler function.
server.sendHeader(“Location”, “/”);
server.send(302, “text/plain”, “Updated– Press Back Button”);[quote][/quote]

Uživatelský avatar
FHonza
Příspěvky: 1443
Registrován: 20 lis 2012, 01:00
Bydliště: Praha

#18 Příspěvek od FHonza »

Na tom není nic špatně, chová se to jak má. Po stisku tlačítka dojde k načtení stránky uvedené v atributu action v tagu form. Jestli jako odpověď posíláš stále stejné html, tak prostě nic zaškrtnuté nebude.

jak už jsem psal, zapni si v prohlížeči nástroje pro vývojáře. Pak se podívej na komunikaci prohlížeče a serveru. Bude ti to hned jasné.

Edit: a nějak mi není jasné, proč by se mělo změnit toto chování při použití dočasného přesměrovaní v hlavičce.

Uživatelský avatar
Le_Ze
Příspěvky: 631
Registrován: 24 črc 2014, 02:00
Bydliště: Ano, mam

#19 Příspěvek od Le_Ze »

To že načitam stranku znovu jsem pochopil, ale nějak nechapu toto.
Ten script co jsi mi tu dal odesila GET
GET /zpracovani?vehicle1=1
Tedy takto.

Kód: Vybrat vše

void handle_zpracovani() { 

      //String message = server.arg("vehicle1");                
      //Serial.println(message);   

      if (server.hasArg("vehicle1"))
         {
          String message = server.arg("vehicle1");                
          Serial.println(message); 
         }    
    
       server.sendHeader("Location", "/");
       server.send(302, "text/plain", "Updated-- Press Back Button");  
       delay(500);
      }  
Toto take načita tu stranku znovu a mužu zaškrtnout všechny checkboxy.Proč?
Až po kliknuti na Submit se vše vyresetuje.
To pak je lepši pořešit vše přes JavaScript.

Uživatelský avatar
FHonza
Příspěvky: 1443
Registrován: 20 lis 2012, 01:00
Bydliště: Praha

#20 Příspěvek od FHonza »

Ten příklad, který jsem dával naposled, neposílá obsah tagu form pomocí submit. Takže díky tomu se stránka v prohlížeči nenačte znovu. Tlačítko submit neresetuje stránku, dojde k jejímu novému načtení ze serveru (ESP). Správné řešení by bylo načítat ze serveru správný obsah stránky. Tj. do posílaného HTML doplnit stavy checkboxů. Když to takhle neuděláš, tak vzápětí narazíš na další problém: při prvním zobrazení stránky nemusí stav checkboxů odpovídat reálnému stavu relé.

Dá se to řešit dvěma způsoby:
• u jednoduchých projektů generovat správné HTML (tento případ)
• u složitých projektů to dělám tak, že mám statický obsah stránky uložen v SPIFFS. Po jejím načtení prohlížečem (např. událost onLoad tagu body) načtu správný stav elementů. Díky tomu je velmi dobře oddělen vzhled stránky od jejího obsahu a pro změnu vzhledu není nutné překládat a nahrávat nový program do ESP.


Důležité je si uvědomit, že HTTP protokol neudržuje nikdy spojení mezi serverem a prohlížečem. Vždy je to dotaz a odpověď. Prostě je to bezestavový protokol se všemi (ne)výhodami. Ale jak už jsem psal, začni používat nástroje pro vývojáře, ulehčí ti to život :)

Uživatelský avatar
pocitujlasku
Příspěvky: 1757
Registrován: 12 pro 2005, 01:00

#21 Příspěvek od pocitujlasku »

este je tu jedna moznost, nieco medzi tym. dat ciste html, kde by sa js posielal ajaxom kazdu sekundu request, ktory by v jednoduchej forme vracal stavy. a potom uz len nastavit checkbox a pripadne aj farbu podla stavu. a rovnako by sa cez ajax odosielala zmena.
je to male, a mas do sekundy aktualny stav, ak by napr rele spinal niekto z ineho pocitaca.
No vidis, a tak si sa bal

Odpovědět

Zpět na „Miniaturní počítače (Arduino, Raspberry a další)“