Quando si pensa di quello che un web server è in grado di fare solitamente si pensa alle applicazioni più comuni e principali: pubblicazione di pagine web, database, hosting, autenticazione degli utenti, ecc.. Queste sono tutte grandiose applicazioni pratiche che si possono fare con un web server, ma sono certamente solo la punta dell’iceberg. Bastano pochi minuti per guardarsi intorno al numero di dispositivi che utilizzano i server web per altri scopi: router e modem a banda larga.. pannelli di controllo; sistemi di gestione telefonica, sistemi di posta vocale, domotica.. tutte funzioni dotate di interfacce web; Anche il TiVOs e DVR (Digital Video Recorder) programmato da internet iniziano a prendere piede ed aumentare il divertimento!

Tutto questo solleva una questione importante per i più “avventurosi, fuori dagli schemi”: c’è qualcosa di più che possiamo fare con le nostre competenze web oltre la semplice creazione di siti?

In questo articolo andremo a trattare di fatto la creazione di un semplice script web-based PHP per controllare qualcosa nel mondo reale!

PHP scripting language hacks!


Allora tenetevi forte, perché mentre questo saggio web sarà una passeggiata nel parco, concettualmente stiamo andando a viaggiare in un intero nuovo regno delle possibilità!

La Sfida Fisica!

Anche se ho un pò di background hardware (ho costruito il mio computer, vari concetti di elettronica di base) non ho mai avuto a che fare con tutto ciò che effettivamente coinvolge l’utilizzo del software su un computer per controllare o fare qualcosa in “hardware” di fisico (ad esempio, premere un pulsante sullo schermo del computer e in qualche modo il sistema di irrigazione si accende?). Fortunatamente un po ‘di ricerche su internet aprono davvero gli occhi!

Vediamo il lato fisico delle cose per un attimo (ci arriveremo al software abbastanza presto, non preoccupatevi). Nella mia situazione avevo a che fare con il modo di trasformare un sistema di irrigazione acceso o spento. Si scopre che questa operazione è semplice come la semplice pressione di un interruttore: accendere l’interruttore, un circuito elettrico viene chiuso, e il sistema di irrigazione inizia ad annaffiare; girare l’interruttore nuovamente, il circuito si apre, e il sistema di irrigazione si ferma. Abbastanza semplice, ora tutto quello che serviva era un “interruttore” che può essere attivato o disattivato da un computer. Questo è dove la scheda relè (Relay Board) entra in gioco. Un relè è semplicemente un interruttore che può essere attivato o disattivato elettronicamente! Naturalmente, per attivare o disattivare i relè è necessario disporre di un modo di collegarli al computer. Fortunatamente, è possibile ottenere una scheda relè con una porta seriale su di esso che è stato progettato solo per questo scopo, acquistandola (il costo non è proprio economico). Inoltre se poi vorremmo riadattarla per altri utilizzi la questione diverebbe un pò più complessa. Quindi fondamentalmente andiamo sul sicuro con l’Arduino Uno.

Arduino Uno - Board hacking

Problema Hardware … risolto!

Passiamo alla parte Software.

Beh, devo dire, che la parte hardware per chi si è sempre interessato di web risulta la parte più difficile da comprendere.
Ora tutto ciò che rimane è capire come avviene la comunicazione fra il computer e la nostra Board (Arduino), per iniziare a farla lavorare come si deve..
Dopo aver fatto qualche ulteriore ricerca nel web ho scoperto che il lato software è ancora più facile del previsto.. per chi ovviamente mastica un minimo di PHP.. Come si è visto, le porte seriali (USB: Universal Serial Bus) sono tra le cose più facili e comode su un computer per comunicare verso l’esterno.

Andiamo adesso alla parte di Information Gathering

Fondamentalmente il problema software si divide in due parti: la prima, è necessario capire come effettivamente inviare e ricevere informazioni dalla porta seriale.
La seconda: controllare la documentazione per la scheda relè oppure in questo caso annotarsi il codice con cui è stato programmato l’Arduino per determinare quali informazioni necessita la board per aprire o chiudere il relè. Quindi quali comandi dobbiamo mandare se vogliamo aprire o chiudere il circuito.

Relay Board

Comunicare con la porta seriale.

Poiché il mio obiettivo finale era quello di avere un’applicazione web-based (e, francamente, perché volevo essere in grado di scrivere il mio codice in un linguaggio che già conosco), ho deciso che avrei realizzato tutti i software di controllo in PHP. Ha senso, dopo tutto, PHP è un linguaggio fantastico, ed ero abbastanza sicuro che con la natura open source di esso ci sarebbe stato probabilmente qualche altra persona folle davanti a me che aveva cercato di fare qualcosa molto simile con esso (che è uno di quei benefici aggiunti dell’open source).
Beh, a quanto pare, qualcuno aveva scritto in realtà solo una classe PHP per comunicare con la porta seriale. Adesso tutto quello che bisogna fare è controllare la documentazione per vedere quali impostazioni si devono usare (a quanto pare le porte seriali possono funzionare a velocità diverse e varie impostazioni) a seconda che si usi una scheda relè o la piattaforma Arduino.

Ancora una volta le cose funzionato a nostro favore, leggendo la documentazione si capische che vengono usati caratteri ASCII (lettere e numeri regolari, alcuni dispositivi usano valori HEX esadecimali, rendendo le cose molto più difficili). Questo dunque è lo script messo a punto per tale operazione…Ovviamente può essere riadattato per ogni vostra necessità, questo si riferisce ad una scheda relè:

<?php 
 
 
/* Semplice serial relay script per accendere e spegnere dal web l'impianto di irrigazione o altri apparecchi elettrici.
 
Utilizza la PHP Serial class by Rémy Sanchez  
per comunicare con la QK108/CK1610 serial relay board! 
 
*/ 
 
 
//Controlla la variabile GET action per vedere se c'è qualche comando da processare 
if (isset($_GET['action'])) { 
    //Action required 
 
    //Carica la classe per la porta seriale
    require("php_serial.class.php"); 
 
    //Inizializza la classe 
    $serial = new phpSerial(); 
 
    //Specifica la porta seriale da usare in questo caso: COM1 
    $serial->deviceSet("COM1"); 
 
    //Setta i parametri della porta seriale. riportando la documentazione: 9600 8-N-1
    $serial->confBaudRate(9600); //Baud rate: 9600 
    $serial->confParity("none");  //Parity (è la "N" in "8-N-1") 
    $serial->confCharacterLength(8); //lunghezza carattere 
    (this is the "8" in "8-N-1") 
    $serial->confStopBits(1);  //Stop bits (è il num "1" in "8-N-1") 
    $serial->confFlowControl("none");
//Se l'apparecchio non lo supporta, settate su none
 
    //Apriamo la porta seriale in modo da scriverci sopra 
    $serial->deviceOpen(); 
 
    //Stando alla documentazione
    if ($_GET['action'] == "on") { 
        //Usiamo il comando N1 per aprire il relè 1 
        $serial->sendMessage("N1\r"); 
 
    } else if ($_GET['action'] == "off") { 
        //Usiamo il comandi F1 per chiudere il relè 1
        $serial->sendMessage("F1\r"); 
    } 
 
    //dopo aver fatto chiudiamo la comunicazione seriale.
    $serial->deviceClose(); 
 
} 
 
//sotto la parte relativa alla grafica della pagina in html
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" 
"http://www.w3.org/TR/html4/loose.dtd"> 
<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> 
<title>Sistema di controllo tramite web server</title> 
</head> 
<body> 
 
<h1>Sistema controllo irrigazione</h1> 
<p><a href="<?=$_SERVER['PHP_SELF'] . "?action=on" ?>">
Clikka per aprire.</a></p> 
<p><a href="<?=$_SERVER['PHP_SELF'] . "?action=off" ?>">
Clickka per spegnere.</a></p> 
</body> 
</html>

E’ molto importante seguire la documentazione per la scheda relè, con Nx, dove x è il numero di un relè (1-8) si accende il relè, con Fx, dove x è il numero di un relè (1-8) lo spegnete. La parte migliore è che funziona egregiamente 😉

Conclusioni

Con un po ‘di pensiero creativo e di ricerca vi accorgerete che ci sono molti usi per le capacità nell’ambito dello sviluppo web based.

La cosa più interessante è la flessibilità di cui dispone: la classe PHP seriale stessa può operare sia su sistemi Windows e Linux, quindi se non si dispone di un server Linux in esecuzione non si sentono tagliati fuori gli utenti windows!

Usando il linguaggio di scripting php ed una board Arduino si possono realizzare praticamente infiniti tipi di progetti.. per le più svariate applicazioni nei campi della Domotica e automazione a distanza. L’unico limite imposto è quello della vostra fantasia!