Tag

, , , , , ,

Una delle possibilità più interessanti da esplorare è l’integrazione tra servizi web e Arduino. Per realizzare un progetto, pur senza disporre di una Ethernet shield, ho collegato Arduino al mio computer con un cavo USB, quindi cercherò di controllarlo tramite una pagina web che gira in locale sul computer stesso.

Proviamo allora a creare una pagina web per controllare l’accensione e lo spegnimento di un LED collocato su Arduino!

La maggior parte del lavoro viene svolta a livello di PHP, mentre per configurare Arduino basta posizionare un LED con il catodo collegato a terra, e l’anodo collegato al pin 13. La pagina web che andremo a creare invierà ad Arduino, tramite porta seriale, il comando per accendere o spegnere il LED.

(Per realizzare questo progetto, è necessario che sul computer, oltre all’IDE di Arduino, sia installato un server web con PHP: se volete una soluzione semplice per installarlo, o siete alle prime armi, provate a scaricare una soluzione già pronta: XAMPP)

La comunicazione tra il server web e Arduino avverrà grazie ad una comoda e gratuita libreria, scaricata da qui: http://code.google.com/p/php-serial/ che si chiama php_serial.class

## Includo seriale e creo nuovo Oggetto
 require("serial/php_serial.class.php"); 
 $serial = new phpSerial();

Per rendere l’aspetto della pagina più gradevole, ho inserito una libreria jQuery che imita il layout di un pulsante per iPhone: ad ogni clic sul pulsante viene attivata una chiamata ajax che, senza bisogno di un refresh o di un redirect, carica silenziosamente la pagina onoff.php – inviandole un parametro: “acceso” oppure “spento”. Sulla base di questo parametro, la pagina stampa lo stato del pulsante e invia il comando corrispondente ad Arduino.

<script src="js/jquery.js" type="text/javascript"></script>
<script src="switch/jquery.iphone-switch.js" type="text/javascript"></script>

La pagina index.php invierà a onoff.php il parametro desiderato: acceso oppure spento, al quale corrisponde un comando pre-impostato nello sketch caricato sull’Arduino:

## Invia il comando appropriato in accordo con il codice sorgente di Arduino: 0=LED spento, 1=LED acceso
 if ($_GET['action'] == "acceso") { #LED acceso
 // per accendere il LED, inviamo il comando "1"
 $serial->sendMessage("1\r");

 } else if ($_GET['action'] == "spento") { #LED spento
 // per spegnere il LED, inviamo il comando "0"
 $serial->sendMessage("0\r");
 }

La pagina onoff.php invia ad Arduino un semplice byte o carattere: “0” oppure “1”. Facciamo questo perché in questo modo Arduino non dovrà “leggere” frasi complesse, ma solo un carattere. Nel nostro sketch, dobbiamo quindi dire ad Arduino come interpretare questo messaggio: diciamo che “0” deve spegnere il LED, mentre con “1” deve accenderlo.

// Controllo: se la porta seriale sta trasmettendo informazioni...
if (Serial.available() > 0) 
{
 // ... leggo l'ultimo carattere (byte) inviato.
 incomingByte = Serial.read();

 // Decido cosa fare se il byte che leggo è 0 oppure 1
 if (incomingByte == '0') 
 {
    digitalWrite(ledPin13, LOW); // Se il byte è 0, spengo il LED
 } 
 if (incomingByte == '1') 
 {
    digitalWrite(ledPin13, HIGH); // Se il byte è 1, accendo il LED
 }
}

Proviamo a collegare Arduino al computer e caricare lo sketch. Se tutto funziona, apriamo la pagina index.php sul nostro localhost, e proviamo a cliccare sul pulsante. A questo punto, se tutto è stato fatto correttamente, il mio LED si accenderà o si spegnerà in base al clic sul mio pulsante!

La cosa bella di questo piccolo esempio, è che una pagina web è accessibile da qualsiasi dispositivo: cellulare, iPhone, iPad, altri computer – e anche da fuori casa, se il vostro router è configurato per consentirlo! Cosa dire, un piccolo passo per Arduino, un grande passo per la nostra comodità!

Download: OnOffLedHttp.zip

PS: la comunicazione seriale è piuttosto scomoda da utilizzare per comunicare via web. Se per caso la pagina funziona ma il LED non si accende, provate a chiudere tutto, aprire l’IDE di Arduino, caricare di nuovo lo sketch e aprire il monitor seriale: a questo punto, ri-aprite il browser e ri-caricate la pagina web. A volte, la porta seriale resta “impegnata” e diventa difficile riuscire a stabilire una nuova comunicazione. In uno studio futuro vedremo come utilizzare una Ethernet shield per creare un servizio più stabile e maturo. A presto!

Annunci