ESP8266 - Ovladaní přes web.
Moderátor: Moderátoři
ESP8266 - Ovladaní přes web.
Mužete nasměrovat na nějake fajne www ohledně komunikace ESP8266 s web rozhraním.
Bych vše chtěl řešit timto zpusobem.
https://circuits4you.com/2019/03/20/esp ... m-website/
A par dotazu k tomuto.
Je tam Void handleForm() This routine is executed when you press submit
Když přidam do web stranky dalši tlačitko, jak zjistím na ktere bylo kliknuto?
void handleRoot() This routine is executed when you open its IP in browser
<input type="text" name="firstname" value="Mickey">
Jak na to, kdybych chtěl zadat value až při spuštění stranky v tom handleRoot?
String firstname = "Mickey";
Dik moc.
Le_Ze píše:Je tam Void handleForm() This routine is executed when you press submit
Když přidam do web stranky dalši tlačitko, jak zjistím na ktere bylo kliknuto?
Např. takto (mají-li obě tlačítka zároveň odeslat formulář):
Kód: Vybrat vše
<input type="submit" name="akce" value="Btn1" />
<input type="submit" name="akce" value="Btn2" />
Kód: Vybrat vše
String akce = server.arg("akce");Handler musí být napsaný podle toho, zda formulářová data budeš odesílat pomocí POST nebo GET
Le_Ze píše:Jak na to, kdybych chtěl zadat value až při spuštění stranky v tom handleRoot?
String firstname = "Mickey";
Buď úpravou html před odesláním do prohlížeče, nebo po načtení stránky prohlížečem pomocí AJAXu
Pomalu, postupně, AJAX přijde na řadu až se pokoušu zaklady.
Už umím zapsat text do inputu při spuštění HTML stranky.
Načist data z imputu po kliknutí na button a i zjistil, na který button jsem klik.
Na řadě je Checkbox
https://arduino.stackexchange.com/quest ... or-esp8266
https://arduino.stackexchange.com/quest ... g-properly
Kód: Vybrat vše
<input type="checkbox" name="alarm1" id="alarm1">1</button>Podle prvního odkazu a přikladu dole kod patři do void handleSubmit
Kód: Vybrat vše
void handleSubmit(){
if (server.arg("alarm1") == "on") {
Serial.println("Alarm 1 is set");
}
server.send(200, "text/plain", MAIN_page);
} A do void setup
Kód: Vybrat vše
server.on ( "/submit", handleSubmit );A nefunguje
- pocitujlasku
- Příspěvky: 2764
- Registrován: 12 pro 2005, 00:00
- Bydliště: SR, Poprad
Kopanec budu mit jinde nebo to tak jak chci nejde.
https://arduino.stackexchange.com/quest ... or-esp8266
Uplně dole.
Ma to v void handleSubmit()
Když strčim na web třeba 10 tlačitek.
Kód: Vybrat vše
void handleForm() {
Serial.println("hups");
}
Procedura se zavola pokažde, když kliknu na jakekoliv tlačitko.
A pak až v ní testují, na ktere jsem klik.
To same by měl dělat ten checkbox, ne?
Měla by se zavolat rutina handleSubmit a pak až v ní testovat na který checkbox jsem klik.
Případně jsem dej zdrojový kód stránky z prohlížeče, podívám se na to.
FHonza píše:
Případně jsem dej zdrojový kód stránky z prohlížeče, podívám se na to.
https://www.w3schools.com/tags/att_inpu ... eckbox.asp
Na jednom foru mi jeden čípek napsal, že mi to nefunguje, protože checkbox je jen blbe zaškrtávátko, které nic neposila.
Odesílaní infa o stavu checkboxu je prý třeba dodělat přes JavaScrip.
Kód: Vybrat vše
if (server.hasArg("vehicle1")
{
}Opravdu bych nehledal chybu v prohlížeči.
Nejjednodušší test dle tvého odkazu:
Kód: Vybrat vše
<!DOCTYPE html>
<html>
<body>
<h1>Show Checkboxes</h1>
<form action="/index.php">
<input type="checkbox" id="vehicle11" name="vehicle1" value="Bike">
<label for="vehicle1"> I have a bike</label><br>
<input type="checkbox" id="vehicle22" name="vehicle2" value="Car">
<label for="vehicle2"> I have a car</label><br>
<input type="checkbox" id="vehicle33" name="vehicle3" value="Boat">
<label for="vehicle3"> I have a boat</label><br><br>
<input type="submit" value="Submit">
</form>
<p>
<h1>Params</h1>
<?php
echo "count: ".count($_GET)."<br/>";
if (count($_GET))
{
foreach ($_GET as $key => $value)
{
echo $key." => ".$value."<br/>";
}
}
?>
</p>
</body>
</html>Například takto:
Kód: Vybrat vše
<!DOCTYPE html>
<html>
{script}
function changeCheckbox(box)
{
var url = "/zpracovani?" + box.name + "=";
url += (box.checked) ? "1" : "0";
var xh = new XMLHttpRequest();
xh.onreadystatechange = function()
{
if (xh.readyState == 4)
{
if (xh.status == 200)
{
// tady je mozne zpracovat pripadnou odpoved
console.log(xh.responseText);
}
}
}
xh.open("GET", url, true);
xh.send(null);
}
{/script}
<body>
<h1>Show Checkboxes</h1>
<form action="/index.php">
<input type="checkbox" id="vehicle11" name="vehicle1" value="Bike" onchange="changeCheckbox(this)">
<label for="vehicle1"> I have a bike</label><br>
<input type="checkbox" id="vehicle22" name="vehicle2" value="Car" onchange="changeCheckbox(this)">
<label for="vehicle2"> I have a car</label><br>
<input type="checkbox" id="vehicle33" name="vehicle3" value="Boat" onchange="changeCheckbox(this)">
<label for="vehicle3"> I have a boat</label><br><br>
</form>
</body>
</html>
Jako jméno argumentu je opět atribut name, hodnota pak "0" nebo "1".
Nevím co tím chceš ovládat, ale pro kontinuální ovládání (něco jako řízení nějaké hračky a pod) je vhodnější navázat spojení přes WebSocket (ESP i všechny moderní prohlížeče to podporují) a posílat příkazy přes to. Má-li to být na něco jako "občas něco zapnout/vypnout", tak je to takto mnohem jednodušší.