Arduino webserver, přechod na výchozí IP adresu
Arduino webserver, přechod na výchozí IP adresu
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
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
Re: Arduino webserver, přechod na výchozí IP adresu
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.
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.
Re: Arduino webserver, přechod na výchozí IP adresu
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:
Parametrem refresh je v tom řádku relativní adresa "/". Zkoušel jsem to na původním programu a fungovalo mi to.
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
Re: Arduino webserver, přechod na výchozí IP adresu
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.
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.
Re: Arduino webserver, přechod na výchozí IP adresu
Ty můžeš tu stránku přesměrovat úplně někam jinam:
Ovšem zápis:
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é.
Kód: Vybrat vše
<meta http-equiv="refresh" content="5;url=http://google.com">
Kód: Vybrat vše
<meta http-equiv="refresh" content="5;url=/">
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é.
Re: Arduino webserver, přechod na výchozí IP adresu
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.
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.
Re: Arduino webserver, přechod na výchozí IP adresu
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í
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í
Re: Arduino webserver, přechod na výchozí IP adresu
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.
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.
Re: Arduino webserver, přechod na výchozí IP adresu
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.
Kdo je online
Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 1 host