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: La mappa degli utenti del Forum Arduino

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: La mappa degli utenti del Forum Arduino

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: La mappa degli utenti del Forum Arduino

Go Up
 


Please enter a valid email to subscribe

Confirm your email address

We need to confirm your email address.
To complete the subscription, please click the link in the email we just sent you.

Thank you for subscribing!

Arduino
via Egeo 16
Torino, 10131
Italy