Pages: [1]   Go Down
Author Topic: Shield Ethernet e richieste GET  (Read 1180 times)
0 Members and 1 Guest are viewing this topic.
Fidenza, Parma
Offline Offline
God Member
*****
Karma: 8
Posts: 783
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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!
Logged

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

Fidenza, Parma
Offline Offline
God Member
*****
Karma: 8
Posts: 783
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ho fatto un primo codice spannometrico..
Ma inviando ?req=ciao il server "non saluta" smiley-razz

Code:
#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 = "";
      }
    }
  }
}


Logged

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

0
Offline Offline
Edison Member
*
Karma: 20
Posts: 2227
Have you mooed today?
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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).


Logged

Fidenza, Parma
Offline Offline
God Member
*****
Karma: 8
Posts: 783
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Grazie mille, ho risolto!
Posto il codice magari a qualcuno serve
Code:
#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("");
  }
}
Logged

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

Pages: [1]   Go Up
Jump to: