Arduino-uprava programu presmer. na jinou stranku-[VYRESENO]

Diskuze a poradna o programátorech a programování různých obvodů

Moderátor: Moderátoři

Zpráva
Autor
Uživatelský avatar
jiri255
Příspěvky: 168
Registrován: 18 dub 2013, 02:00

Arduino-uprava programu presmer. na jinou stranku-[VYRESENO]

#1 Příspěvek od jiri255 »

Zdravím přítomné,
chtěl bych požádat o radu ohledně programu pro Arduino. Mám základní program viz níže, který vytvoří z Arduina web server,
kde mám na stránce tlačítko a já bych do toho programu potřeboval k tomu tlačítku doplnit funkci, která mi po kliknutí na tlačítko
spustí novou stránku.
Hledal jsem všude možně, ale nikde jsem nic takového nedohledal :(
Nenašel by se tu někdo, kdo už něco takového řešil a doplnil by mi tu funkci do toho programu?

Předem děkuji za případnou pomoc

Kód: Vybrat vše

#include <SPI.h>
#include <Ethernet.h>

// zde si upravte podle sebe
byte mac[] = { 0xD4, 0xAD, 0xBE, 0xEF, 0xFE, 0x7D };

// IP adresa
IPAddress ip(192,168,0, 88);

// port
EthernetServer server(80);

void setup()
{

  // inicalizace sítě
  Ethernet.begin(mac, ip);

  // inicializace serveru
  server.begin();
}

void loop()
{

  // když je připojen klient, zjistíme, zda jsou odeslána data
  // od klienta směrem k nám
   EthernetClient client = server.available();

  // dokud je klient připojen 
   while (client.connected()) {

    // čti data od něj dokud nenarazíš na znak nového řádku 
     if (client.available()) {
        char c = client.read();
         if (c == '\n') {
              
           // odešle klasickou hlavičku HTML stránky
          client.println("HTTP/1.1 200 OK");
          client.println("Content-Type: text/html");
          client.println("Connection: close");
          client.println();
          client.println("<!DOCTYPE HTML>");
          
          // zde již klasická html data
          client.println("<html>");
          client.println("<head>");

          // Název stránky
          client.println("<title>Arduinio Server</title>");
          client.println("</head>");
          client.println("<body>");

          // vypíše text 
          client.println("<a href='http://192.168.0.88?'><button style='background:red;width:20%;height:30px'>Nova stranka</button></a>");         
          client.println("</body>");
          client.println("</html>");
         
          //ukončí přenos
          client.stop();
                     }
                }
        }
}
Naposledy upravil(a) jiri255 dne 08 úno 2015, 19:21, celkem upraveno 1 x.

Uživatelský avatar
berk
Příspěvky: 107
Registrován: 07 úno 2014, 01:00

#2 Příspěvek od berk »

Bude to chtít abys trochu porozumněl http protokolu.

Aktuálně tvůj server vrací na všechny požadavky stejnou odpověď. Je potřeba abys zjistil jakou stránku (nebo jiný objekt) vlastně klient žádá.

Klient může požádat buď metodou GET:

Kód: Vybrat vše

GET /hello.htm HTTP/1.1
User-Agent: Mozilla/4.0 (compatible; MSIE5.01; Windows NT)
Host: www.tutorialspoint.com
Accept-Language: en-us
Accept-Encoding: gzip, deflate
Connection: Keep-Alive
nebo POST:

Kód: Vybrat vše

POST /cgi-bin/process.cgi HTTP/1.1
User-Agent: Mozilla/4.0 (compatible; MSIE5.01; Windows NT)
Host: www.tutorialspoint.com
Content-Type: application/x-www-form-urlencoded
Content-Length: length
Accept-Language: en-us
Accept-Encoding: gzip, deflate
Connection: Keep-Alive
Ty si musíš přečíst co následuje za GET (resp POST) a ve svém programu mu vrátit příslušnou stránku.

Uživatelský avatar
jiri255
Příspěvky: 168
Registrován: 18 dub 2013, 02:00

#3 Příspěvek od jiri255 »

hmm, no možná jsem to asi napsal špatně nebo jsem to nesprávně pochopil :( já jakoby nepotřebuju zobrazovat prázdnou stránku nějakého prohlížeče, ale v tom kódu viz výše potřebuju dopsat funkci která mi zobrazí prázdnou stránku = v programu ta prázdná stránka bude část kódu, kam si budu moct doplnit text nebo kus kódu a bude mi zobrazovat nějaká tlačítka, atd...
Bude to fungovat tak, že po kliknutí na to tlačítko na té stránce viz kód výše mě to v tom kódu přesune k té funkci, která mi zobrazí další stránku s tlačítky, teplotami a vším možným co si tam doplním.

Uživatelský avatar
MiloPS3
Příspěvky: 259
Registrován: 07 srp 2010, 02:00

#4 Příspěvek od MiloPS3 »

Cau,jak tam mas

Kód: Vybrat vše

client.println("<a href='http://192.168.0.88?'><button style='background:red;width:20%;height:30px'>Nova stranka</button></a>");
tak misto "http://192.168.0.88?" das jmeno novy stranky, musi bejt ale ulozena na sd karte
nebo "http://192.168.0.88?" za tim otaznikem se pise nejakej nazev , neco to dela ....
nebo jako treba tady http://playground.arduino.cc/Code/WebServer
to rekl pan G..
musis hledat

Uživatelský avatar
jiri255
Příspěvky: 168
Registrován: 18 dub 2013, 02:00

#5 Příspěvek od jiri255 »

jj no já bych nechtěl právě, aby ta nová stránka byla uložená na sd kartě já bych potřeboval, aby byla součástí toho kódu výše ...dík za ten odkaz, to musím projít to je děsivej kód 8O, kdyby někdo dokázal upravit ten kód výše nebo měl nějakej program, který už něco takového umí, abych si to z něj mohl nějak "vykuchat"...

Uživatelský avatar
MiloPS3
Příspěvky: 259
Registrován: 07 srp 2010, 02:00

#6 Příspěvek od MiloPS3 »

no jestly umis nejakym zpusobem dostat odezvu zpatky od servru ze bylo zmacknuty tlacitka tak tak tu stranku refresni z novyma datama nebo vytvorit novy spojeni "client.connected" nebo nejka tak

obecne: pane boze , to vy Arduinaci si neumite pomoct ? tak skousim , testuju, mam oci a umim cist, tak si umite snad dat dohromady 1 a 2 , ne?,
mit knihovny na vsechno a presne podle vasich predstav ... :roll: , no, i kdyz neni nahodou knihovna na blikani ledkou ? heh

Uživatelský avatar
jiri255
Příspěvky: 168
Registrován: 18 dub 2013, 02:00

#7 Příspěvek od jiri255 »

taky díky, zkusím pohledat jestli se mi něco povede... už se s tím mořím skoro 14dní a pořád to ne a ne rozhejbat :( poslední věc co mi chybí...

Uživatelský avatar
berk
Příspěvky: 107
Registrován: 07 úno 2014, 01:00

#8 Příspěvek od berk »

Možná je to trochu složitější než si představuješ, ale ne zase tolik.

Co ti posílá klient nyní ignoruješ

Kód: Vybrat vše

// dokud je klient připojen
   while (client.connected()) {

    // čti data od něj dokud nenarazíš na znak nového řádku
     if (client.available()) {
        char c = client.read();
         if (c == '\n') { 
Zkus si někam vypsat co ti klient posílá při prvním přístupu a pak při kliknutí na tlačítko.
Klidně to sem pak pošli a můžeme pak pokračovat dál :-)

Uživatelský avatar
jiri255
Příspěvky: 168
Registrován: 18 dub 2013, 02:00

#9 Příspěvek od jiri255 »

zkoušel jsem, ale nedaří se mi s toho vytáhnout co mi klient vrací... ještě něco odzkouším....

Uživatelský avatar
MiloPS3
Příspěvky: 259
Registrován: 07 srp 2010, 02:00

#10 Příspěvek od MiloPS3 »

Zkusil bych to nejak takle

Kód: Vybrat vše

char c =client.Read();
Serial.Print(c);
samozrejme si ten srial musis nakonfigurovat...

Uživatelský avatar
jiri255
Příspěvky: 168
Registrován: 18 dub 2013, 02:00

#11 Příspěvek od jiri255 »

díky :) ,tak mám to... ,když se načte stránka zobrazí se

GET / HTTP/1.1

a když kliknu na tlačítko zobrazí se:
GET /? HTTP/1.1
když kliknu znovu opět se zobrazí:
GET /? HTTP/1.1

pomohlo to?

Uživatelský avatar
HoldingInfinity
Příspěvky: 43
Registrován: 07 črc 2011, 02:00

#12 Příspěvek od HoldingInfinity »

Tak nějak "IF" ... a že jako if ... dostanu tenhle header...tak zobrazím to či ono, ne? :)

Ify si najdi na stránkách arduina...

jinak bude ten kod pak stejnej jako pro printnutí tý první stránky...

Uživatelský avatar
Jeejda_teda_puvodne
Příspěvky: 142
Registrován: 08 dub 2012, 02:00

#13 Příspěvek od Jeejda_teda_puvodne »

Naposledy upravil(a) Jeejda_teda_puvodne dne 25 říj 2016, 14:09, celkem upraveno 1 x.

Uživatelský avatar
MiloPS3
Příspěvky: 259
Registrován: 07 srp 2010, 02:00

#14 Příspěvek od MiloPS3 »

Skus jeste zapsat za tu ip treba test

Kód: Vybrat vše

192.168.0.88?Test
jestly se ti ten test vrati i v odpovedi ....

Uživatelský avatar
jiri255
Příspěvky: 168
Registrován: 18 dub 2013, 02:00

#15 Příspěvek od jiri255 »

...tenhle prohlížeč byl Internet explorer, ale potřeboval bych, aby to fungovalo v jakémkoliv.
K tomu bodu 2 ...pokud je to takhle, tak to dohromady nedám ani omylem :(

Odpovědět

Zpět na „Programování PIC, ATMEL, EEPROM a dalších obvodů“