Stránka 1 z 3

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

Napsal: 01 úno 2015, 19:49
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();
                     }
                }
        }
}

Napsal: 01 úno 2015, 22:43
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.

Napsal: 02 úno 2015, 14:28
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.

Napsal: 02 úno 2015, 18:02
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

Napsal: 02 úno 2015, 18:16
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"...

Napsal: 02 úno 2015, 18:37
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

Napsal: 02 úno 2015, 18:49
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í...

Napsal: 02 úno 2015, 19:17
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 :-)

Napsal: 02 úno 2015, 19:55
od jiri255
zkoušel jsem, ale nedaří se mi s toho vytáhnout co mi klient vrací... ještě něco odzkouším....

Napsal: 02 úno 2015, 20:50
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...

Napsal: 02 úno 2015, 21:10
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?

Napsal: 02 úno 2015, 21:20
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...

Napsal: 02 úno 2015, 21:28
od Jeejda_teda_puvodne

Napsal: 02 úno 2015, 21:41
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 ....

Napsal: 02 úno 2015, 21:43
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 :(