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, 00: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: 109
Registrován: 07 úno 2014, 00: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: 37418
Registrován: 21 bře 2006, 00: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, 00: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: 109
Registrován: 07 úno 2014, 00: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, 00: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, 00: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: 109
Registrován: 07 úno 2014, 00: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, 00: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: 279
Registrován: 07 srp 2010, 00: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, 00: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: 279
Registrován: 07 srp 2010, 00: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, 00: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: 279
Registrován: 07 srp 2010, 00: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, 00: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ů“