Arduino-uprava programu presmer. na jinou stranku-[VYRESENO]
Moderátor: Moderátoři
Ok, super
Když přistupuješ na server tak zadáš v prohlížeči pravěpodobně toto:
tj požaduješ defaultní stránku / a požadavek je tedy
Na tlačítku máš ale následující odkaz
pošleš tedy požadavek na /?
Lepší by asi byl odkaz
a dostal bys požadavek:
Zvládneš na základě toho řídit co klientovi odpovíš?
Když přistupuješ na server tak zadáš v prohlížeči pravěpodobně toto:
Kód: Vybrat vše
http://192.168.0.88
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 ...
Kód: Vybrat vše
GET /? HTTP/1.1
Kód: Vybrat vše
<a href='http://192.168.0.88/page1.htm'><button style='backgrou ...
Kód: Vybrat vše
GET /page1.htm HTTP/1.1
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
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
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;
}
Předpokádám že je to jen experimentování a nepůjde to do produkceNeodporucam robit vlastnu implementaciu HTTP servera, hlavne ked tomu nerozumies. Ak to nebude splnat patricne RFC, tak s tym budu problemy.
- Jeejda_teda_puvodne
- Příspěvky: 142
- Registrován: 08 dub 2012, 02:00
Naposledy upravil(a) Jeejda_teda_puvodne dne 25 říj 2016, 14:10, celkem upraveno 1 x.
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();
}
}
}
}
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ěží