Arduino (L11): controllare da remoto con Ethernet Shield

Ethernet shield è una scheda di espansione che consente, tramite appunto un cavo ethernet, di collegare Arduino alla rete domestica di casa nonché a internet.

Configurazione Ethernet

Il collegamento dell’hardware è piuttosto semplice. Infatti è sufficiente far corrispondere i vari piedini analogici e digitali con quelli rispettivi della scheda Arduino e poi collegare il cavo Ethernet ad una porta LAN libera del router.

Accendere/Spegnere Led (da rete locale)

Prima di caricare il codice effettuare il collegamento fisico sulla breadboard, usando un led, una resistenza da 220 Ohm e due cavi (il rosso da collegare, da un lato, al positivo del led che poi corrisponde al sinistro della resistenza, e dall’altro al pin digitale 7 di Arduino; mentre il cavo nero dal GND – la massa – di Arduino al negativo del led che conseguentemente equivale al destro della resistenza).

Per conoscere l’indirizzo del gateway e del subnet (usando Windows) aprire il prompt dei comandi e digitare ipconfig.

#include <Ethernet.h> //libreria ethernet
#include <SPI.h> //collabora con la libreria ethernet
#include <String.h> //gestione stringhe

byte mac[] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED}; //indirisso fisico
byte ip[] = {192, 168, 1, 104}; //indirizzo ip locale
byte subnet[] = {255, 255, 255, 0}; //indirizzo subnet
byte gateway[] = {192, 168, 1, 1}; //indirizzo gateway
EthernetServer server(80); //imposto porta protocollo HTTP

int led = 7; //dichiarazione led
String ascoltatore; //dichiarazione stringa

void setup() {
Ethernet.begin(mac, ip, gateway, subnet); //inizializzazione impostazioni
pinMode(led, OUTPUT); //impostazione led come output
ascoltatore=””; //inizializzazione stringa
}

void loop() {
EthernetClient client = server.available(); //attendo l’arrivo di un client

if (client) { //se c’è il cliente deve..

while(client.connected()) {
if(client.available()) {
char c = client.read(); //..leggere i caratteri che invia
ascoltatore.concat(c); //concatena i caratteri del client

if (c == ‘\n’) { //se arrivo a fine riga
if(ascoltatore.indexOf(“led=1”)>0) { //controllo che nell’url ci sia led=1
digitalWrite(led, HIGH); //se c’è accendo il led
}
else {
digitalWrite(led, LOW); //altrimenti spengo il led
}
client.println(“HTTP/1.1 200 OK”); //dico al client che è tutt’ok – standard http
client.println(“Content-Type: text/html”); //indico il formato – standard http
client.println(); //necessario per non buggare
client.println(“<html>”); //inizio codice html
client.println(“<head><title>Accendi/Spegni led</title> <link rel=’shortcut icon’ type=’image/x-icon’ href=’http://i44.servimg.com/u/f44/16/84/89/65/23570310.png’ /></head>”);
client.println(“<body><a href=’/?led=1′>Accendi</a> – <a href=’/?led=0′>Spegni</a></body”);
client.println(“</html>”); //fine codice html
client.stop(); //stop richieste dal client
ascoltatore=””;
}
}
}
}
}

Per verificare se la scheda Ethernet funzioni, aprire prompt dei comandi (da Windows) digitare ping 192.168.1.104 (l’indirizzo ip della scheda di rete Arduino) e premere invio.

Se il ping ha restituito risultato positivo aprire il browser e digitare l’indirizzo ip assegnato alla scheda Ethernet di Arduino. Sarà possibile visualizzare due link, il primo “Accendi” consente se cliccato di accendere il led; contrariamente il link “Spegni” una volta cliccato spegnerà il led.

Accendere/Spegnere Led (da internet)

Per accendere/spegnere led da internet non è necessario modificare il codice visto per il controllo da locale ma bisogna agire sulle impostazioni del router.

Nell’esempio proposto in questa guida si è usato un router Telecom Italia tuttavia la procedura è abbastanza simile in qualsiasi altro router.

Accedere all’indirizzo ip del router – in genere 192.168.1.1 – e digitare, eventualmente, i dati di accesso. Poi spostarsi nella sezione Impostazioni avanzate – Port Mapping – Configurazione Port Mapping e fare clic sul pulsante Aggiungi. E’ necessario indicare solamente due dati: il tipo di applicazione (http) e l’indirizzo ip della scheda di rete (nel nostro esempio 192.168.1.104). Salvare il tutto e a questo punto non rimane altro da conoscere quale sia l’indirizzo ip pubblico, andando sulla pagina principale del router oppure al sito Il mio IP.
Ottenuto questo dato collegarsi da una rete esterna (ad esempio la rete 3G dello smartphone) per verificare che è possibile controllare Arduino anche da internet, oltre che da locale.

Mentre nel caso in cui si possegga un router Netgear, bisogna accedere – come al solito – all’indirizzo del router (192.168.1.1) e inserire nome e password amministratore; poi spostarsi su Avanzate – Configurazione avanzata – Inoltro e attivazione delle porte; scegliere http e l’indirizzo ip assegnato alla scheda Ethernet di Arduino e salvare il tutto e poi ripetere i passaggi visti sopra, che in breve si riassumono nel collegarsi al proprio indirizzo ip pubblico.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *