gbm
Primi passi lato client con Ethernet Shield Wiznet
Tutorials -
Giovedì 01 Marzo 2012 16:48
Scritto da gbm

Con questa guida vorrei riepilogare i primi piccoli accorgimenti per far funzionare la scheda Ethernet Wiznet. 

Questa Shield permette ad un Arduino di essere fisicamente connesso a Internet e di poter fondamentalmente eseguire i metodi del protocollo HTTP, trasformando quindi Arduino o in un Client o in un Server.

Grazie a questa possibilità i sistemi realizzati con Arduino, con l'aggiunta dell'Ethernet Shield possono, per esempio, immettere informazioni in un database mysql con un semplice sketch Client oppure fornire informazioni a un Client tramite internet agendo quindi da Server.

 

Il video mostra la risposta di uno dei server di google alla richiesta get /search?q=gioblu+robotics

 

Un Arduino con Ethernet Shield e sketch Client, puo' utilizzare per comunicare con il server i seguenti metodi:

GET è pensato per effettuare una richiesta a un server con una query string, cioè una stringa di richiesta che puo' contenere una o piu' variabili. Grazie a questa tecnica ed eseguendo il codice riportato qui sotto è possibile connettersi a uno dei Server di Google e richiedere di effettuare una ricerca e ottenere l'output di essa, con la semplice query /search?q=gioblu+robotics. Questa come potete vedere attraverso il link, richiede la ricerca per le keywords gioblu robotics. In questo caso, aprendo la seriale è possibile vedere tutto l'HTML della pagina di google che presenta i risultati della richiesta. 

POST è pensato per creare un nuovo oggetto e comunicare al server degli attributi / delle variabili che possono essere salvate per esempio in un database MySQL. Se ripetiamo un post creremo un nuovo oggetto e non modificheremo quello precedente. E' possibile comunicare una quantità di informazioni maggiori del limite imposto al GET (che varia in base alla tipologia del server). Questa tipologia di comunicazione non lascia tracce nell'url e permette di spostare una mole di dati decisamente piu' considerevole, come per esempio un immagine o un file. Questo metodo puo' essere eseguito correttamente solo se viene inviato al server in risposta ad un form.

 

Per poter inviare un GET o un POST è necessario conoscere in modo preciso e corretto due informazioni fondamentali: 

  1. IP del server a cui connettersi
  2. IP del client (quindi della nostra ethernet shield)

L'indirizzo MAC è un numero che identifica fisicamente la vostra Ethernet Shield (se è connessa tramite router potete lasciare il codice presente nello sketch). Per conoscere l'IP del server di google ho semplicemente cercato su google, ma è possibile tramite terminale scoprirlo in modo molto piu' veloce, con il semplice comando ping (es. ping google.com). La cosa che puo' risultare piu' macchinosa all'inizio è assegnare un IP al nostro Arduino. Non possiamo di certo scrivere un numero a caso :P. Dipende dal tipo di connessione e dall'operatore con cui si è connessi alla rete. Nel mio caso avendo il contratto con Fastweb, ho eseguito le seguenti operazioni:

  1. Disconnetto tutti i devices a parte il mio computer
  2. Digito comando ifconfig su terminale 
  3. scoperto l'IP del computer che sto utilizzando (esempio casuale)  21,46,111,111 aggiungo uno all'ultima terzina ottenendo 21,46,111,112
  4. Sto cercando di utilizzare alcuni dei numeri IP che sono assegnabili dal mio router evitando (ovviamente) di inserire quello del mio computer.

Chi è connesso a reti ADSL (esclusi i vecchi ADSL PPPoE, cioè con una sola uscita e software per connessione) deve eseguire lo stesso procedimento, la differenza è che potete scegliere tra una quantità molto maggiore di IP disponibili, cioè sicuramente 255 possibilità (cioè l'ultima terzina).

 

Come potrete vedere nel codice c'è una differenza rispetto all'esempio sul sito di arduino.cc (che in piu' non funziona perchè l'IP di google è cambiato e caricando lo sketch si ottiene un errore), qui io utilizzo HTTP/1.1 a differenza di HTTP/1.0 perchè moltissimi server che contengono piu' di un sito internet non riceverebbero correttamente il GET e otterrebbero una richiesta priva di URL, con questo sketch invece potremo connetterci per esempio a qualsiasi server aruba (che contengono centiana di siti x server) e richiedere l'HTML di un qualsiasi sito. Ovviamente è necessario dopo GET inviare Host: con l'url del sito a cui ci si vuole connettere e una linea vuota che viene considerata come la fine della richiesta.

 

Il codice: (Ricordate di includere librerie spi e ethernet)

//  Web client
//  Questo sketch si connette a uno dei server di Google
//  usando una shield Arduino Wiznet Ethernet e stampa in seriale
//  una ricerca delle keyword "Gioblu robotics" :P

Circuito:
//  Ethernet shield connessa ad Arduino con i PIN 10, 11, 12, 13
//  sketch basato sull'esempio di Arduino.cc
//  arricchito e tradotto da Giovanni Blu Mitolo

// Inserisci MAC address
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
byte ip[] = { 1,1,1,1 };
byte server[] = { 74,125,224,72 }; // Google

// Inizializza libreria
// La porta 80 è quella di default per il protocollo HTTP:
Client client(server, 80);

void setup() {
  // Inizializza connessione Ethernet
  Ethernet.begin(mac, ip);

  Serial.begin(9600);
  delay(1000);
  Serial.println("Provo a connettermi...");

  // Se ti sei connesso riportalo via seriale
  if (client.connect()) {
    Serial.println("Connesso");
    // Fai la richiesta
    client.println("GET /search?q=gioblu+robotics HTTP/1.1");
    client.println("Host: www.google.com");
    client.println();
  } 
  else {
    // Se non connesso
    Serial.println("Non connesso, non desistere :P");
  }
}

void loop() {
  // Se ci sono byte in arrivo leggi e riportali nella seriale
  if (client.available()) {
    char c = client.read();
    Serial.print(c);
  }

  // Se il server è disconnesso chiudi il client
  if (!client.connected()) {
    Serial.println();
    Serial.println("Chiudo la connessione, finchè non mi resetti non faro' piu' nulla.");
    client.stop();

    //Non fare piu' nulla
    for(;;);
  }
}

Se la vostra intenzione è utilizzare la Ethernet Shield e il vostro arduino per organizzare e salvare i dati su internet vi consiglio di seguire il tutorial dedicato al Datalogging con Ethernet Shield Wiznet.

 

Gioblu Robotics © 2010 - 2012 · Sitemap · privacy

gioscarab@gmail.com

Gioblu BOTServer è online dal 10 Aprile 2010 - 319.232 Visite - 1.027.175 Pagine visualizzate - 182.309 Visitatori unici - 536 utenti attivi