Go Down

Topic: Shield Ethernet e richieste GET (Read 1 time) previous topic - next topic

Guglio

Ciao a tutti, dovrei inviare variabili GET all'arduino e in base al tipo di variabile accendere diversi led.
Ho cercato nella documentazione della libreria ethernet e sul web ma ho trovato pochi scripts e non funzionanti.
C'รจ una funzione che posso richiamare per ricavare le variabili get?
Grazie ancora!
ArduMAP: Mappa degli utenti che utilizzano Arduino.
http://www.guglio.net/ArduMAP

Guglio

Ho fatto un primo codice spannometrico..
Ma inviando ?req=ciao il server "non saluta" :P

Code: [Select]

#include <SPI.h>
#include <Ethernet.h>
byte mac[] = {
 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
byte ip[] = {
 192,168,1, 51 };
byte gateway[] = {
 192,168,1, 1 };
byte subnet[] = {
 255, 255, 0, 0 };
Server server(80);
String stringa;
boolean salvo = false;
boolean salvo1 = false;
void setup() {

 stringa = String("");
 Ethernet.begin(mac, ip, gateway, subnet);
 server.begin();
 Serial.begin(9600);
}

void loop() {
 Client client = server.available();
 while(client.connected()){
   char c = client.read();
   //   GET /?req=ciao HTTP/1.1


   if (c == '?'){
     salvo = true;
   }
   if (c == '/'){
     salvo = false;
   }

   if (salvo){
     stringa.concat(c);
   }
   if (c == '\n'){
     if (client) {
       client.println(stringa);
       if (stringa == '?req=ciao HTTP'){
         client.println("Ciao a te");
       }
       delay(1);
       client.stop();
       stringa = "";
     }
   }
 }
}


ArduMAP: Mappa degli utenti che utilizzano Arduino.
http://www.guglio.net/ArduMAP

pitusso

Guglio,
innanzitutto inizializzerei
salvo= true
e definirei un carattere predefinito per determinare la fine della stringa (per esempio: X).
Io di solito uso lavorare piuttosto sulla dimensione massima predefinita della stringa.

Infine, per verificare se nella stringa ci sia o meno quel che ti aspetti, utilizzerei la funzione indexOf() oppure equals().

Del tipo :
...
if (string.indexOf('ciao') > 0) {
...

Inoltre, io accenderei pure un led come riprova della ricezione della get voluta.
Per il resto, il codice sembrerebbe ok (non l'ho provato).



Guglio

Grazie mille, ho risolto!
Posto il codice magari a qualcuno serve
Code: [Select]

#include <SPI.h>
#include <Ethernet.h>
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
byte ip[] = { 192,168,1, 51 };
Server server(80);
String query;

void setup()
{
 query = String("");
 Ethernet.begin(mac, ip);
 server.begin();
 pinMode(8,OUTPUT);
}
void loop()
{

 Client client = server.available();
 if (client) {
   while (client.connected()) {
     if (client.available()) {
       char c = client.read();
       query.concat(c);
       if (c == '\n') {
         client.println("HTTP/1.1 200 OK");
         client.println("Content-Type: text/html");
         client.println();
         if (query.indexOf("accendi") > 0) {
           digitalWrite(8,HIGH);
           client.print("Accendo<br/>");
         }
         if (query.indexOf("spegni") > 0) {
           digitalWrite(8,LOW);
           client.print("Spengo<br/>");
         }
         client.print("<a href='/accendi'>Accendi LED</a><br/><a href='/spegni'>Spegni LED</a><br/>");
         client.print("<pre>");//DEBUG
         client.print(query);// DEBUG
         client.print("</pre>");//DEBUG
         break;//fermo il ciclo
       }
     }
   }
   delay(1);
   client.stop();
   query = String("");
 }
}
ArduMAP: Mappa degli utenti che utilizzano Arduino.
http://www.guglio.net/ArduMAP

Go Up