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

#16 Příspěvek od jiri255 »

ano, když tam dopíšu "test" a kliknu na tlačítko, tak se mi vrátí:
GET /?test HTTP/1.1

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

#17 Příspěvek od berk »

Ok, super

Když přistupuješ na server tak zadáš v prohlížeči pravěpodobně toto:

Kód: Vybrat vše

http://192.168.0.88
tj požaduješ defaultní stránku / a požadavek je tedy

Kód: Vybrat vše

GET / HTTP/1.1 

Na tlačítku máš ale následující odkaz

Kód: Vybrat vše

<a href='http://192.168.0.88?'><button style='backgrou ...
pošleš tedy požadavek na /?

Kód: Vybrat vše

GET /? HTTP/1.1 
Lepší by asi byl odkaz

Kód: Vybrat vše

<a href='http://192.168.0.88/page1.htm'><button style='backgrou ...
a dostal bys požadavek:

Kód: Vybrat vše

GET /page1.htm HTTP/1.1 
Zvládneš na základě toho řídit co klientovi odpovíš?

Uživatelský avatar
rnbw
Příspěvky: 32312
Registrován: 21 bře 2006, 01:00
Bydliště: Bratislava

#18 Příspěvek od rnbw »

Neodporucam robit vlastnu implementaciu HTTP servera, hlavne ked tomu nerozumies. Ak to nebude splnat patricne RFC, tak s tym budu problemy.

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

#19 Příspěvek od jiri255 »

jj, když přistupuju zadám http://192.168.0.88 a ten odkaz na tlačítku to byl experiment :( to jsem zkoušel všechno možné, abych s toho dostal novou prázdnou stránku do, které bych si vecpal různá tlačítka a funkce, tedy použil funkční části kódu, které mám.
A ne nedokážu si na základě toho doplnit do toho kódu kus funkce, která by mi zobrazila tu prázdnou stránku :(

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

#20 Příspěvek od berk »

Ok, malá nápověda

Kód: Vybrat vše

#include <stdio.h>

#define BUFFLEN 1024
int main(void)
{
        char get[] = "GET /page1.htm HTTP/1.1 ";
        char s[BUFFLEN];
        
        sscanf(get, "GET %s HTTP", s);
        printf("chci stranku %s\n", s);
        
        if (!strcmp(s, "/page1.htm")) {
                printf("poslu stranku 1\n");
        } else if (!strcmp(s, "/page2.htm")) {
                printf("poslu stranku 2\n");
        } else {
                printf("poslu defaultni stranku\n");
        } 
        
        return 0;
}
Neodporucam robit vlastnu implementaciu HTTP servera, hlavne ked tomu nerozumies. Ak to nebude splnat patricne RFC, tak s tym budu problemy.
Předpokádám že je to jen experimentování a nepůjde to do produkce :-)

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

#21 Příspěvek od jiri255 »

není to komerční, je to pro moje účely ....musím si sehnat tu knihovnu stdio.h tu nemám a pak zkusím nějak odzkoušet to nacpat do toho kódu výše, snad se zadaří.
Zítra odzkouším a dám vědět, jak jsem dopadl... zatím moc děkuji za pomoc a rady

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

#22 Příspěvek od Jeejda_teda_puvodne »

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

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

#23 Příspěvek od berk »

Přesně tak, je to v ANSI C.

Arduino nemám, takže pokud to někdo napíše ve správné formě bude to fajn. :-)

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

#24 Příspěvek od jiri255 »

jj mohu potvrdit, že kontrola programu proběhne ok i se to nahraje do arduina, ale stránka http://192.168.0.88 se nenačte... neběží to a takhle to vypadá, když jsem to tam vložil tu část v C, no kdyby to uměl někdo opravit :(

Kód: Vybrat vše

#include <SPI.h>
#include <Ethernet.h>
#include <stdio.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);
 

 #define BUFFLEN 1024 
 int main(void) 
 { 
         char get[] = "GET /page1.htm HTTP/1.1 "; 
         char s[BUFFLEN]; 
         
         sscanf(get, "GET %s HTTP", s); 
         printf("chci stranku %s\n", s); 
         
         if (!strcmp(s, "/page1.htm")) { 
                 printf("poslu stranku 1\n"); 
         } else if (!strcmp(s, "/page2.htm")) { 
                 printf("poslu stranku 2\n"); 
         } else { 
                 printf("poslu defaultni stranku\n"); 
         } 
         
         return 0; 
 }

void setup()
{
  Serial.begin(9600);
  // 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();
          Serial.print(c);
         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?page1'><button style='background:red;width:20%;height:30px'>Nova stranka</button></a>");         
          client.println("</body>");
          client.println("</html>");
          //ukončí přenos
          client.stop();
                     }
                }
        }
}

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

#25 Příspěvek od MiloPS3 »

no protoze asi vubec netusis co to dela a netusis jak beha ten program v arduinu, vsechno se odehrava v LOOPu a musis to dat tam , potom co dostanes kompletni odpoved aby si ji moh vyhodnotit..

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

#26 Příspěvek od jiri255 »

je to "int main(void)" a něco podobného v některých programech, které jsem testoval v loop vůbec není, volá si ho funkce spuštěná v loop, ale pokud ho tedy do loop vložím, tak to vyhodí chybu a nahrát to nejde... asi chápu co by to mělo dělat, ale vyzkoušet a otestovat si to nemůžu, protože mi to neběží :(

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

#27 Příspěvek od MiloPS3 »

A jak to tam davas ? Ne jak o main ale jako funkci ,je tady tlacitko code , takze kdyz upravujes kod slusi se ho sem upnout , vesteckou kouli nemame, to sami s errorem ci jinym hlasenim

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

#28 Příspěvek od jiri255 »

ať to vložím kamkoliv do toho loopu ,tak to hlásí problém se závorkou za tím "int main(void)" a hláška je:

"a function-definition is not allowed here before '{' token

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

#29 Příspěvek od MiloPS3 »

Ne jak o main ale jako funkci ,je tady tlacitko code , takze kdyz upravujes kod slusi se ho sem upnout ,

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

#30 Příspěvek od jiri255 »

tlačítko code a co je tím myšleno nic takového v programu nemám? ... o pár příspěvků výše je upravený program, ale bylo mi vytčeno, že je to blbost ho takhle upravit, takže teď nechápu co vlastně řešíme?

Odpovědět

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