RPi Remote Switch

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. Recentemente un gruppo di programmatori indipendenti ha creato un mirror non ufficiale per continuarne lo sviluppo.

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 o fare riferimento agli ultimi aggiornamenti sul repository non ufficiale GitHub.

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

VersioneDataChange log
1.006/2020Prima release
Legenda: + Nuovo; – Rimosso; * Aggiornato.

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.

Modulo relè - Raspberry Pi
Modulo relè – Raspberry Pi

Riferimenti

  1. Simple and Intuitive Web Interface for Your Raspberry Pi, TheFreeElectron su instructables;
  2. Wiring Pi, GPIO Interface library for the Raspberry Pi;
  3. Wiring Pi, unofficial mirror GitHub;
  4. Raspberry GPIO, su www.raspberry.org.

Argomenti correlati


Licenza Creative Commons 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.

3 Replies to “RPi Remote Switch”

  1. ciao,
    funziona tutto solo che lo stato è verde se spento e bianco se attivato il relè

    ho provato a variare il codice ma non ho ottenuto risultati.
    Grazie se mi risponderai.
    Buona giornata

  2. Ti ringrazio per la risposta, in effetti avevo già provato ad invertire i colori nel codice lime con white ma senza successo. Ho provato persino a mettere un colore diverso tipo Yellow ove c’era lime e al caricarsi del codice al primo off si vede il giallo ma dopo un on (bianco) è un nuovo off si rivede il verde…. Inspiegabile.
    Vabbè me lo terrò così e riproverò a fare cambiamenti di codice.
    Ma il codice css va anch’esso sistemato?
    Grazie ancora e buona serata.

Rispondi a iz8ewd Annulla risposta

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