Primi passi nell’uso della libreria Webduino

Esistono diverse librerie che tendono a risolvere o a migliorare alcune classi base implementate in Arduino 1.0. Webduino è sicuramente una di queste, il nome è un chiaro riferimento al mondo ethernet/web e le sue principali funzioni sono elencate di seguito:

  • elaborazione dei parametri racchiusi in un URL
  • elaborazione dei metodi HTTP come GET, POST, PUT, HEAD, DELETE e PATCH
  • gestione dei FORM
  • Gestione di Immagini
  • interfaccia JSON/REST
  • autenticazione BASE64

Attualmente, la versione disponibile è la 1.7  prelevabile direttamente da Github seguendo questo indirizzo https://github.com/sirleech/Webduino

Una volta scaricato il file zip possiamo scompattarlo posizionandolo all’interno della cartella libraries cercando di non modificare la struttura interna della cartella

Libreria webduino

Per eseguire il codice ho usato l’Arduino Ethernet, ma è possibile utilizzare benissimo la Arduino UNO con lo shield ethernet.

Passiamo direttamente alla pratica creando un nuovo sketch ed inserendo, per prima, le seguenti librerie

#include <Ethernet.h>
#include <SPI.h>
#include <WebServer.h> //libreria webduino

e subito di seguito le variabili e gli oggetti necessari al corretto funzionamento del modulo ethernet e della libreria Webduino:

//variabili statiche per il mac address e l'ip address
static byte mac_Add[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
//cambiare l'ip in funzione della propria rete
static byte ip_Add[] = { 192, 168, 1, 220 };
//creazione oggetto Webduino
WebServer webserver("", 80);

Il mac address e l’ip address sono definiti come per la libreria nativa Ethernet. L’oggetto webserver invece è relativo alla libreria Webduino ed accetta due parametri, il primo, che in questo caso è vuoto, permette di specificare un percorso (URL), mentre il secondo rappresenta la porta in cui il server rimarrà in ascolto.
Ad esempio potremmo avere :

//il web server risponde sulla porta 80 e richiama la root page /
WebServer webserver("", 80);
//il web server risponde sulla porta 80 e richiama la pagina digital.html
WebServer webserver("digital.html", 80);
//il web server risponde sulla porta 80 e richiama la pagina analog.html
WebServer webserver("analog.html", 80);
//il web server risponde sulla porta 8085 e richiama la root page predefinita
WebServer webserver("/test", 8085);

qui devo fare una precisazione. le pagine specificare non sono in effetti come le conosciamo (codice html) ma sono dei riferimenti, delle stringhe, che richiamano funzioni contenenti codice html. Vedremo meglio negli esempi successivi cosa intendo.

Nel blocco setup inseriamo il codice per inizializzare gli oggetti dichiarati precedentemente e, con alcune istruzioni aggiuntive, permettiamo di elaborare le richieste provenienti dal browser

void setup()
{
  //inizializzo l'ethernet shield con il mac e il address
  Ethernet.begin(mac_Add, ip_Add);

  //definisci l'azione di default che verrà eseguita quando l'utente
  //naviga nella root del sito (192.168.1.220/)
  webserver.setDefaultCommand(&Start);

  //avvia il web server
  webserver.begin();

}

il metodo setDefaultCommand permette di eseguire la funzione Start (inserita come parametro) in modo da elaborare la richiesta del browser.

All’interno del blocco loop bisogna inserire l’istruzione che ‘si accorge’ delle richieste del client e ne gestisce i relativi processi:

void loop()
{
  //elabora costantemente tutte le richieste provenienti dal browser
  webserver.processConnection();
}

Per completare il codice, ed eseguire quindi un test operativo, scriviamo le istruzioni che compongono la funzione Start, che in questo esempio verrà eseguita come operazione di default quando un utente si collega al webserver semplicemente digitando nel browser l’indirizzo ip dell’Arduino.

//funzione Start
void Start(WebServer &server, WebServer::ConnectionType type, char *, bool)
{
  //restituisce al browser l'intestazione http 200 OK
  server.httpSuccess();

  //gestisco il tipo di richiesta HEAD
  if (type != WebServer::HEAD)
  {
    //Memorizzo nella memoria programma la stringa html e gli assegno il nome strMsg
    P(strMsg) = "<h1>Logicaprogrammabile</h1>";

    //recupero dalla memoria programma la stringa contrassegnata con il nome strMsg
    //e la invio come output al browser
    server.printP(strMsg);
  }
}

Il codice completo permette di eseguire, caricandolo nell’Arduino ethernet, il test della libreria

#include <Ethernet.h>
#include <SPI.h>
#include <WebServer.h> //libreria webduino</code>

//variabili statiche per il mac address e l'ip address
static byte mac_Add[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
//cambiare l'ip in funzione della propria rete
static byte ip_Add[] = { 192, 168, 1, 220 };
//creazione oggetto Webduino
WebServer webserver("", 80);

//funzione Start
void Start(WebServer &server, WebServer::ConnectionType type, char *, bool)
{
  //restituisce al browser l'intestazione http 200 OK
  server.httpSuccess();

  //gestisco il tipo di richiesta HEAD
  if (type != WebServer::HEAD)
  {
    //Memorizzo nella memoria programma la stringa html e gli assegno il nome strMsg
    P(strMsg) = "<h1>Logicaprogrammabile</h1>";

    //recupero dalla memoria programma la stringa contrassegnata con il nome strMsg
    //e la invio come output al browser
    server.printP(strMsg);
  }
}

void setup()
{
  //inizializzo l'ethernet shield con il mac e il address
  Ethernet.begin(mac_Add, ip_Add);

  //definisci l'azione di default che verrà eseguita quando l'utente
  //naviga nella root del sito
  webserver.setDefaultCommand(&Start);

  //avvia il web server
  webserver.begin();

}

void loop()
{
  //elabora costantemente tutte le richieste provenienti dal browser
  webserver.processConnection();
}

Tramite il nostro browser preferito digitiamo l’indirizzo ip dell’Arduino; dovremmo visualizzare qualcosa del genere

Test Webduino library

Fatte diverse prove, modificando il codice, e leggendo i commenti per capire i vari passi da eseguire per iniziare ad usare la libreria Webduino. Nei prossimi articoli inseriremo alcune funzioni aggiuntive.