
Controllo remoto GPIO di Raspberry Pi da Web con PHP e WiringPi
Tempo fa avevo sviluppato un progetto di controllo remoto GPIO RaspberryPi da Web utilizzando Flask, un micro framework per la realizzazione di pagine web e la libreria RPi.GPIO di Python. Flask è un’ottima soluzione, in quanto perfettamente integrato con Python e quindi con la gestione dell’hardware di RPi.
Tuttavia ho voluto sperimentare una strada diversa, utilizzando gli strumenti a disposizione di un web server tradizionale, ovvero Apache o Nginx con PHP e l’ausilio della libreria C/C++ WiringPi. C’è da precisare che allo stato attuale, Gordon, l’autore di tale libreria, ha deciso di terminarne lo sviluppo, tuttavia l’ultima release 2.52 è pienamente compatibile con tutte le versioni della board Raspberry Pi, fino alla 4B.
Installazione
Web server
Come ho già accennato, occorre installare sul Raspberry Pi le applicazioni necessarie alla creazione di un web server. Alla pagina Web Server con Raspberry Pi troverete le istruzioni del caso.
Wiring Pi
La libreria WiringPi è solitamente già presente sulla distribuzione Raspbian. Per verificarne la presenza e la versione installata, dalla linea di comando digitare:
gpio -v
in caso contrario installarla con il comando
sudo apt install wiringpi
Nel caso in cui abbiate un Raspberry Pi 4B, occorre utilizzare l’ultima versione della libreria, che al momento non è ancora presente su repository Raspbian. Per installarla seguire le istruzioni wiringPi updated to 2.52.
Per visualizzare posizione e stato dei pin di I/O utilizzare
gpio readall
L’utility gpio consente di configurare, leggere e scrivere lo stato dei pin della porta GPIO e verrà richiamata dal PHP per interfacciarsi con l’hardware. Inoltre non richiede i privilegi di amministratore, quindi può essere eseguita senza problemi dal server PHP. Non è un modo molto efficiente, ma non c’è alternativa e, considerato il tipo di utilizzo, è più che sufficiente. Esistono un paio di librerie in PHP per la gestione della GPIO, ma sono ormai obsolete.
Remote Switch
Scaricare RPiRemoteSwitch dalla tabella sottostante, copiarne i file in una sotto-cartella del web server (solitamente /var/www/html).
Aprire e modificare, nella parte indicata di seguito, il file index.php specificando, per ogni riga, numero pin e descrizione della porta, lasciare a 0 l’ultima colonna. Per la numerazione delle porte GPIO fare riferimento a quanto indicato alla pagina WiringPi pins. Aggiungere o togliere righe in base al numero di controlli che necessitano.
$relay = array(
array(1,"Switch1",0),
array(4,"Switch2",0),
array(5,"Switch3",0),
array(6,"Switch4",0)
);
Digitare dal browser l’indirizzo IP del proprio Raspberry Pi, eventualmente seguito dal nome della sotto-cartella, e si aprirà la pagina web dell’applicazione. Premendo sul pulsante on / off , si accende o spegne la rispettiva porta. Lo stato delle uscite attive è indicato in colore verde, bianco quelle spente, rosso se si verifica qualche errore legato alle impostazioni o ad un problema di esecuzione dello script sul server.
A questo punto sarà possibile controllare da remoto qualunque utenza connessa all’interfaccia GPIO del Raspberry Pi, tramite dispositivi che siano in grado di navigare sul web.
Download
Versione | Data | Change log |
---|---|---|
1.0 | 06/2020 | Prima release |
Hardware
La parte hardware è composta, oltre che dal Raspberry e suo alimentatore, da una scheda relè 5V optoisolata, di quelle che si trovano comunemente sul web. La scheda andrà opportunamente interconnessa ai pin della GPIO per il pilotaggio e l’alimentazione.

Riferimenti
- Simple and Intuitive Web Interface for Your Raspberry Pi, TheFreeElectron su instructables;
- Wiring Pi, GPIO Interface library for the Raspberry Pi;
- Raspberry GPIO, su www.raspberry.org.
Argomenti correlati
Questa opera è distribuita con:
licenza Creative Commons Attribuzione - Non commerciale - Condividi allo stesso modo 3.0 Italia.
Si declina ogni responsabilità per eventuali errori ed omissioni e gli eventuali danni che ne dovessero conseguire. Per ulteriori informazioni consultare le note legali.