Arduino webserver, přechod na výchozí IP adresu

Odpovědět
Mojmir
Příspěvky: 4
Registrován: 25 bře 2024, 19:55

Arduino webserver, přechod na výchozí IP adresu

Příspěvek od Mojmir » 25 bře 2024, 21:20

Pro ovládání Arduina jsem modifikací tohoto příkladu: https://randomnerdtutorials.com/esp8266 ... s-arduino/ vytvořil webserver s několika tlačítky, které v hlavičce za IP adresou předávají parametr s informací o tom, které tlačítko bylo stisknuto a navíc zajišťuje čtení dvou DHT22 a jejich výpis na stránku. Pro moji aplikaci jsem zapnul automatické obnovování stránky. Problém pro mě ale je, že při obnovení stránky v hlavičce zůstává kód předchozího příkazu a jeho vykonání se pak opakuje při obnovení stránky. Potřeboval bych poradit, jak poslat do kódu stránky příkaz (po vyhodnocení a provedení obsloužení tlačítka), který by mi přepnul hlavičku do výchozí původní adresy (tedy bez parametru).
Povedlo se mi to (HTML jsem viděl poprvé v životě) metodou pokus omyl a studiem HTML kódu příkladu pouze v podobě tlačítka s následujícím kódem:

client.println("<a href=\"/\"><button class=\"button\">Home</button></a>");

Toto tlačítko mi vrátí stránku zpět na výchozí IP adresu a parametr v hlavičce stránky zmizí.
Potřeboval bych ale, aby mi to dělal program sám, bez mačkání tlačítka a už několik dní nemohu přijít na to, jaký kód na to použít.

Prosím o radu, jaký příkaz na to použít, aby se dal dát do části, která vyhodnocuje a provádí příkazy, tedy do těchto částí kódu:

// turns the GPIOs on and off
if (header.indexOf("GET /5/on") >= 0) {
Serial.println("GPIO 5 on");
output5State = "on";
digitalWrite(output5, HIGH);
//sem bych vložil ten příkaz
}
else if (header.indexOf("GET /5/off") >= 0) {
Serial.println("GPIO 5 off");
output5State = "off";
digitalWrite(output5, LOW);
//a sem bych vložil ten příkaz znovu
} ..........

Případně na začátek kódu tvorby vzhledu stránky.


Děkuji Mojmír

Pablo74
Příspěvky: 69
Registrován: 03 lis 2019, 17:00

Re: Arduino webserver, přechod na výchozí IP adresu

Příspěvek od Pablo74 » 26 bře 2024, 08:57

Problém je popsán srozumitelně a myslím, že to bude řešitelný.

Poprosím o vložení:
a) kompletního kódu
b) úplné URL adresy včetně toho příkazu

Abych už teď něčím přispěl, hledal bych něco jako refresh page without parametres.

jankop
Příspěvky: 1041
Registrován: 06 zář 2017, 20:04
Bydliště: Brno
Kontaktovat uživatele:

Re: Arduino webserver, přechod na výchozí IP adresu

Příspěvek od jankop » 26 bře 2024, 11:15

Zvolil jsi hodně nešťastný příklad. Je velmi zastaralý a také neefektivní. Existuje integrovaný a naprosto dokonalý http server pro ESP8266. Ale cením si toho, že se umíš zeptat a něčím začít musíš. Já sám jsem zrovna dokončil něco podobného. A chystám se, že se naučím asynchronní server, což je úplně jiná liga.
DHT22 považuji za krám, který už jsem dávno hodil do koše. Jeho jedinou výhodou je možnost připojení více čidel, což při běžně používané i2C sběrnici může být trochu problém.
Ale abych jen nemeditoval, tohle by ti mohlo pomoci:

Kód: Vybrat vše

client.println("<!DOCTYPE html><html>");
          client.println("<head><meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">");
           // **************** pridej tento radek ************************************** 
          client.println("<meta http-equiv=\"refresh\" content=\"5;url=/\"");
           // ****************************************************************************** 
         client.println("<link rel=\"icon\" href=\"data:,\">");
            // CSS to style the on/off buttons
Parametrem refresh je v tom řádku relativní adresa "/". Zkoušel jsem to na původním programu a fungovalo mi to.

Mojmir
Příspěvky: 4
Registrován: 25 bře 2024, 19:55

Re: Arduino webserver, přechod na výchozí IP adresu

Příspěvek od Mojmir » 26 bře 2024, 16:36

Moc děkuji, funguje to skvěle. Přesně to jsem potřeboval!

I když tomu bohužel nerozumím :( .
Relativní adresa "/" dělá něco jako přepsat hlavičku na "prázdný parametr" ?

A ještě jednou děkuji, trápil jsem se s tím dlouho.

jankop
Příspěvky: 1041
Registrován: 06 zář 2017, 20:04
Bydliště: Brno
Kontaktovat uživatele:

Re: Arduino webserver, přechod na výchozí IP adresu

Příspěvek od jankop » 26 bře 2024, 17:13

Ty můžeš tu stránku přesměrovat úplně někam jinam:

Kód: Vybrat vše

<meta http-equiv="refresh" content="5;url=http://google.com">
Ovšem zápis:

Kód: Vybrat vše

<meta http-equiv="refresh" content="5;url=/">
odkáže na "výchozí" stránku tvého serveru. Nemusíš tam tedy vypisovat celou URL včetně IP adresy. A od této "výchozí" stránky můžeš odkazovat na další úrovně tvořené třeba adresáři. Ta relativnost je tedy v tom, že tam není adresa "dokumentu" na serveru v rámci celé sítě, nýbrž adresa pouze v rámci tvého serveru.
V tom příkladu dělají jednu nepěknou věc. Nastavují serveru pevnou adresu. To v běžné síti s DHCP serverem nemusí dělat dobrotu. Daleko vhodnější je nastavení přidělení statické adresy přímo na domácím routeru. Není to složité, stačí ti k tomu v podstatě jen znalost MAC toho ESP8266. V případě, že máš veřejnou IP adresu a budeš chtít přistupovat k ESP8266 zvenku mapováním portu, tak je myslím nastavení statické IP adresy na routeru nezbytné.

Mojmir
Příspěvky: 4
Registrován: 25 bře 2024, 19:55

Re: Arduino webserver, přechod na výchozí IP adresu

Příspěvek od Mojmir » 26 bře 2024, 19:18

Děkuji za vysvětlení,

teprve se to začínám učit od základů.
Mě se právě líbilo, že tam jde nastavit pevná IP adresa, abych věděl, kde mám stránku pak v prohlížeči hledat. Programy, které vypisují přidělenou IP na sériový port jsem nepoužil, protože zařízení bude po dokončení komunikovat pouze přes Wi-Fi a nechtěl jsem vždycky hledat, kde zrovna stránka zařízení je. Tak jsem to risknul, tolik zařízení zase v síti nemám. Ale máte pravdu, bezpečné to není.
Myšlenka dostat se na Arduino zvenku, mimo domácí síť, tedy přes internet, je lákavá, ale je to v současné době mimo moji úroveň a hned teď to nepotřebuji. Časem to asi zkusím. Podle toho, na co jsem zatím náhodou narazil, by to vyžadovalo najít IP adresu routeru navenek (internetové připojení mám přes Wi-Fi) a zřejmě ten přístup na něm i povolit. Router je ale zaheslován poskytovatelem internetového připojení. Zatím bude bezpečnější to nezkoušet.
Teď budu pokračovat připojením PWM 15A 400W MOSFET. Systém bude ovládat proporcionálně vyhřívání topnými elementy na čtyřech místech astronomického dalekohledu.
Když je vysoká vlhkost a klesne teplota, rosí se mi optika a nedá se s tím fotit vůbec, když to ale zase ohřeju moc, vlní se tam teplý vzduch a do háje jde rozlišení detailů. Proto ta dvě DHT-22. Jedno bude zvenku na tubusu a druhé uvnitř. Vlhkost nad 85% je už dost kritická, na 99% to už pak vyletí rychle. Nějakou velkou přesnost měření tam nepotřebuju.
Jestli chcete vidět pár mých amatérských astro-fotek, jsou zde: https://telescopius.com/profile/mojmir-ganoczy .
Přeji všem pěkný večer a moc děkuji.

Uživatelský avatar
kiRRow
Příspěvky: 1240
Registrován: 07 kvě 2019, 07:03
Bydliště: Opava

Re: Arduino webserver, přechod na výchozí IP adresu

Příspěvek od kiRRow » 26 bře 2024, 19:35

No s tou IP, kde ji přiřazuje DHCP server a chceš, aby ji přiřadil vždy stejnou se používá na routeru u DHCP serveru rezervovací funkce. Prostě IP adresu 192.168.0.2 zarezervuješ výhradně pro MAC adresu AA-BB-CC-DD-EE-FF - výhoda toho je že když měníš nastavení sítě, tak ho změníš na routeru přes jeho webové rozhraní a nemusíš přeprogramovávat arduino, nebo programovat možnost vzdáleně mu změnit jeho IP.

Aby jsi zařízení v nějaké síti zpřístupnil i z internetu, je třeba mít veřejnou IP adresu a mít namapované porty (to se taky dělá na routeru). Porty jsou něco jako jméno na schránce v paneláku - pošťák zná adresu kde má dojít, ale díky jménům na schránce až teprve pozná komu na té adrese dopisy doručit. Jako, když se kdysi zakládaly hry ... mám vnitřní adresu 192.168.0.2 a hra beží na portu 3038 ... musím tedy na routeru nastavit, že cokoliv z venku jde na tenhle port, musí jít dovnitř na adresu 3038 -> 192.168.0.2 (něco jako, že pošťák to hodí do schránky 3038 a člověk z bytu 192.168.0.2 si to vyzvedne)

takže budeš si muset vyžádát heslo, nebo požádát poskytovatele o příslušné nastavení

jankop
Příspěvky: 1041
Registrován: 06 zář 2017, 20:04
Bydliště: Brno
Kontaktovat uživatele:

Re: Arduino webserver, přechod na výchozí IP adresu

Příspěvek od jankop » 26 bře 2024, 19:41

Krásný fotky. Ať se daří.

Mojmir
Příspěvky: 4
Registrován: 25 bře 2024, 19:55

Re: Arduino webserver, přechod na výchozí IP adresu

Příspěvek od Mojmir » 26 bře 2024, 20:20

Dík,

Veřejnou IP adresu nemám, a domácí síť je značně rozvětvená. Jedna Wi-Fi pro přístup na internet (přístup k nastavení zaheslovaný poskytovatelem) LAN kabelem k prvnímu svitchi, na něm jeden Wi-fi acess-point a kabelem druhý switch, na kterém jsou kabelem další dva Wi-fi acess-pointy (na jejich nastavení se samozřejmě dostanu). Při resetování mých wi-fi vysílačů do továrního nastavení musím dát bacha, abych si nezresetoval i přístupovou wifinu, protože defaultová IP adresa je shodná. Můj Arduino webserver se umí automaticky přepojit na jiný acess-point při ztrátě stávajícího připojení. Na čem v takové zbastlené síti vlastně běží ten DHCP server nemám tušení. Funguje to, nebudu do toho vrtat. :)

Uživatelský avatar
kiRRow
Příspěvky: 1240
Registrován: 07 kvě 2019, 07:03
Bydliště: Opava

Re: Arduino webserver, přechod na výchozí IP adresu

Příspěvek od kiRRow » 26 bře 2024, 22:04

switche, wifi acess-pointy atp, to vše je tvoje síť ... a mezi tebou a internetem stojí tvým poskytovatelem ovládaný router, zařízení které odděluje tvou domácí síť od internetu ... a tam se to musí všechno nastavit.

Odpovědět

Kdo je online

Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 1 host