Sabato, Aprile 27, 2024
Header11
Head3
Head2
Header5
Header9
Header7
Header8
Header10

CENTRODIGRAVITA.it

 

Raspberry-Pi pagina WEB per gestione GPIO (PIN entrate e uscite) con PHP

rpi-gpio

 

Il Raspberry è un micro computer a scheda singola sviluppato nel Regno Unito dalla Raspberry Pi Foundation per ospitare sistemi operativi basati sul kernel Linux o RISC OS. Per questo sistema è sviluppato un sistema operativo appositamente dedicato chiamato Raspberry Pi OS (https://www.raspberrypi.com/software/) scaricabile gratuitamente e basato sulle distribuzioni ufficiali di Debian di Linux.

La particolarià di questa scheda è quella di avere, oltre alle porte standard di un PC come le USB, Ethernet, HDMI etc.., anche una serie di PIN digitali (due stati ON e OFF) gestibili con comandi Python che vengon chiamate linee GPIO (general purpose Input/Output).

Utilizzando script Python, Html e PHP è possibile creare interfacce web che permettono la gestione degli stati dei GPIO permettendo così di creare un pannello WEB di DOMOTICA che permette di pilotare con dei pulsanti a automatismi apparati gli elettrici.

Partiamo dalla preparazione di Raspberry con l'installazione del sistema operativo Raspberry PI e le necessarie librerie.

 

INSTALLAZIONE E PREPARAZIONE Raspberry con S.O. Raspberry-Pi

 

Dall'acquisto del Raspberry al suo utilizzo i passaggi necessari da eseguire sono i seguenti:

- Utilizzare un pc per installare il sistema operativo di base (https://www.raspberrypi.com/software/) sulla Micro SD che andrà inserita nel Raspberry. Si può utilizzare il software Win32DiskImager (https://raspberry-projects.com/pi/pi-operating-systems/win32diskimager)

- Inserire la memoria nel Raspberry, collegarlo e avviarlo seguendo le istruzioni a schermo per l'avvio.

- Attivare l'accesso SSH o VNC se usati (da interfaccia grafica o da console)

- Fissare l'indirizzo IP Statico modificano il file con il comando: sudo nano /etc/dhcpcd.conf

  abilitando e modificando le righe: interface eth0 static ip_address=192.168.100.100/24

  static routers=192.168.100.254

  effettuare poi un riavvio del sistema: reboot

- Installiamo i pacchetti necessari per l'interfaccia WEB eseguendo i comandi:

  sudo apt-get update

  sudo apt-get install apache2

  sudo apt-get install php

 

Ora sul Raspberry abbiamo a disposizione il server WEB e il linguaggio di programmazione PHP.

 

I PIN GPIO E I COMANDI BASE IN PYTHON PER IL LORO UTILIZZO

 

Come prima cosa apriamo la console SSH e digitiamo il comando : pinout

 

rpi-gpio

In questo modo ci vengono mostrate le dislocazioni delle porte sulla scheda Raspberry su cui stiamo operando e nella pagina successiva:

rpi-gpio

 

un dettaglio dei PIN GPIO disponibil sul Raspberry con il numero corrispondente della piedinatura e le caratteristiche del sistema.

 

I comandi Python per gestire le basi dei GPIO sono:

- Impostare il PIN ad un livello basso: GPIO.output(PIN, GPIO.LOW)

- Impostare il PIN ad un livello alto: GPIO.output(PIN, GPIO.HIGH)

- Leggere lo stato del PIN: GPIO.input(PIN)

Dove PIN è una variabile che contiene il numero corrispondente del GPIO.

 

Iniziamo a creare uno script in Python editando il file con il comando: nano test.py

e inseriamo il testo dello script completo di richiami alle librerie, configurazione delle GPIO e i comandi:

 

#!/usr/bin/python3

import RPi.GPIO as GPIO

import time

import sys

 

#il numero del PIN è passato tramite parametro allo script Python

args = sys.argv

PIN = int(args[1])

 

GPIO.setmode(GPIO.BCM) #Imposto la modalita dei nomi dei PIN

GPIO.setup(PIN, GPIO.OUT)

GPIO.output(PIN, GPIO.HIGH) #Imposto il piedino come livello ALTO

#GPIO.output(PIN, GPIO.LOW)

 

#Stampo in console lo stato del GPIO scelto

if GPIO.input(PIN):

 print ('1')

else: 

 print ('0')

GPIO.cleanup()

 

Salviamo il file con nome ad esempio "test.py" e poi possiamo subito provarlo eseguendo il comando:

python /home/utente/Documents/test.py 3

Il numero "3" dopo il nome del file passa il parametro del PIN allo script (GPIO3).

In questo esempio operiamo sul piedino GPIO3 portandolo a livello alto e stampiamo in uscita dello script lo stato del PIN.

 

N.B. eseguiamo un file che abbiamo creato nella cartella /home/utente/Documents/ cioè la cartella documenti dell'utente "utente" e quindi solo l'utente "utente" avrà i diritti di modifica e accesso al file (ad eccezione di Root)

 

 

INTERFACCIA WEB IN HTML E PHP (CON ESECUZIONE DI SCRIPT IN PYTHON) PER UN PANNELLO DOMOTICO

 

Se vogliamo implementare una pagina WEB con cui controllare gli stati dei piedini GPIO dobbiamo accedere alla cartella apposita del server WEB (/var/www/html).

Dobbiamo come prima cosa elevare i diritti con il comando: sudo su

in questo modo operiamo come ROOT e con il comando:  cd /var/www/html ci posizioniamo nella cartella dove troveremo il file index.html che conterrà la paginia iniziale standard di Apache. Se apriamo un browser puntando sull'indirizzo IP del Raspberry (http://192.168.100.100) la vedremo.

Per editarla lanciamo il comando: nano index.html

nicelabel-raspberry

 

Nel nostro caso cancelliamo il file e editiamo index.php: nano index.php

Inseriamo questo codice Html e PHP:

 

<html>

<head>

<title>Pannello RPi-WEB</title>

</head>

<body>

<form method="POST" action="">

<input type="submit" name="GPIO3" value="GPIO3">

<?php if ( isset( $_POST["GPIO3"] ) )

 $str = "sudo python /home/utente/Documents/test.py 3";

 $result=exec($str);

 if ($result=='0') { 

    ?> <br> <font color="grey">GPIO3 livello basso</font><?php

 } else{

    ?> <br> <font color="red">GPIO3 livello ALTO</font><?php    }

endif ?>

</body>

</html>

 

Aprendo http://IP-DEL-RASPBERRY/index.php (Es. http://192.168.100.100/index.php) con un browser si aprirà la pagina WEB appena creata con un pulsante "GPIO3" che premuto eseguirà lo script test.py (precedentemente creato).

Lo script Python imposterà il PIN del GPIO3 a livello alto e poi restituirà lo stato del pin che verrà passato al linguaggio PHP con la variabile "$result" che farà apparire la scritta dello stato sulla pagina web.

N.B. Per come è costruito il file test.py lo stato del GPIO3 non cambierà mai in quanto si forza l'uscita sempre a livello alto.

Se si vuole far cabiare lo stato del pin ad ogni pressione del pulsante si può modificare il file "test.py" in questo modo:

 

#!/usr/bin/python3

import RPi.GPIO as GPIO

import time

import sys

 

#il numero del PIN è passato tramite parametro allo script Python

args = sys.argv

PIN = int(args[1])

GPIO.setmode(GPIO.BCM) #Imposto la modalita dei nomi dei PIN

GPIO.setup(PIN, GPIO.OUT)

 

#Si testa lo stato e lo si cambia con l'opposto

if GPIO.input(PIN):

 GPIO.output(PIN, GPIO.LOW)

else:

 GPIO.output(PIN, GPIO.HIGH)

 

#Stampo in console lo stato del GPIO scelto

if GPIO.input(PIN):

 print ('1')

else: 

 print ('0')

 

GPIO.cleanup()

 

Modificando ulteriormente i due file è possibile creare un pannello WEB DOMOTICO dove con i vari pulsanti si attivano e disattivano i pin GPIO a cui ci si può collegare dei relè che pilotano elettrodomestici o altri dispositivi elettronici.

Con il feedback dello stato del GPIO sulla pagina web possiamo anche pensare di pubblicare in internet l'accesso alla pagina e in quel caso dopo il click sul pulsante avremmo la sicurezza che l'apparecchio si sia acceso o spento.

Se apriamo l'accesso alla pagina web del Raspberry all'esterno dobbiamo pensare anche a garantire la sicurezza sull'uso del pannello e quindi sarà necessario introdurre una richiesta di credenziali per accedere al pannello domotico.

Questo è il codice PHP di esempio che permette di gestire l'autenticazione alla pagina web dove possiamo inserire del codice per chi è autenticato e chi no:

 

<?php

// enable PHP session che utilizza i cookie per salvare la sessione e passare le variabili impostate come utente e password

sessionsession_start();

 

if (isset($_SESSION['username'])) { // test se è già stato inserito un username nella variabile della sessione

 // print "session exists";

 $username = $_SESSION['username'];

  $password = $_SESSION['password'];

 $ok = 'Benvenuto';//print $username;

 //echo $_SESSION['username'];

 

} else {

 

 // print "username in session NOT exists";

 $username = $_POST['username']; 

 $password = $_POST['password'];

 $username = filter_var($username,FILTER_SANITIZE_STRING);

 $password = filter_var($password,FILTER_SANITIZE_STRING);

 if ($username =='UTENTE-DI-ACCESSO' and $password =='PASSWORD-DI-ACCESSO') { //CREDENZIALI DI ACCESSO

 $ok = 'Benvenuto';  $_SESSION['username'] = $username;

 $_SESSION['password'] = $password;

 }else{ 

 $error = 'Utenza o password errata.';

}}

?>

 

<html>

<head>

<title>Pannello RPi-WEB</title>

</head>

<body>

<?php if ($error)://AUTENTICAZIONE NON CORRETTA (richieste credenziali)

?>

 <p style="color: red"><?php echo $error ?></p>

 <form method="post" action="">

 <input type="text" name="username" placeholder="Inserisci lo username" />

 <br>

 <input type="password" name="password" placeholder="Inserisci la password"/>

 <br>

 <input type="submit" value="Accedi" />

 

Quì è possibile inserire il codice che verrà visualizzato solo se l'utente NON ha inserito le credenziali corrette

 

<?php else: ?>

 <?php if ($ok): //AUTENTICAZIONE CORRETTA

   ?>

   <p style="color: black"><?php echo $ok ?></p>

 

Quì è possibile inserire il codice che verrà visualizzato solo se l'utente ha inserito le credenziali corrette

 

  <?php endif ?>

 <?php endif ?>

</body>

</html>

 

 

 

Previous Next
  • 1
  • 2
  • 3
  • 4
  • 5
Raspberry-Pi pilotare stampe su Nicelabel Automation   Con Raspberry-Pi pilotare le stampe su Nicelabel Automation   Il software Nicelabel Automation opportunamente configurato permette di mandare in stampa un'etichetta semplicemente con una richiesta HTTP, TCP-IP o con il deploy di un file. Questo è il pannello del... Read more
Raspberry-Pi pagina WEB per gestione GPIO   Raspberry-Pi pagina WEB per gestione GPIO (PIN entrate e uscite) con PHP   Il Raspberry è un micro computer a scheda singola sviluppato nel Regno Unito dalla Raspberry Pi Foundation per ospitare sistemi operativi basati sul kernel Linux o RISC OS. Per questo sistema... Read more
Sostituzione CANDELETTE FIAT 1.3 Multijet DOBLO FIAT Sostituzione CANDELETTE FIAT 1.3 Multijet DOBLO FIAT     Per i motori 1.3 Multijet diesel quando appare la spia corrispondente ai problemi alle candelette vuol dire che sono da sostituire perchè malfunzionanti e potrebbero procurare dei problemi di avvio del motore con... Read more
SOSTITUZIONE DISCHI E FERODI FRENI DOBLO FIAT SOSTITUZIONE DISCHI E FERODI FRENI DOBLO FIAT       Il Doblò Fiat con motore 1.3 Multijet può montare i dischi da 257 o 284 mm nel mio caso sostituisco i 284mm e i ferodi. Alzando l'auto con il crick e togliendo la ruota questo è l'apparato... Read more
RESET ECU DOBLO FIAT (SERVICE, CAMBIO OLIO) RESET ECU DOBLO FIAT   Dopo aver fatto il tagliando dobbiamo tener conto delle spie che si sono attivate o si attiveranno come il "SERVICE" e "CAMBIARE OLIO". Sono scadenziate circa ogni 20000 km e continuano a lampeggiare e informare della cosa fino a quando non vengono resettate anche... Read more
IPHONE 6s plus SOSTITUZIONE BATTERIA IPHONE 6s plus SOSTITUZIONE BATTERIA   La sostituzione della batteria di un Iphone 6S Plus è similare agli altri telefoni della apple, con l'attrezzatura giusta e il ricambio è possibile anche sostituirla da se.     Si svitano le viti a fianco del connettore di... Read more
TAGLIANDO OLIO e FILTRI DOBLO FIAT  TAGLIANDO OLIO e FILTRI FIAT DOBLO MULTIJET       Il tagliando completo per il Doblò con motore 1.3 Multijet diesel consiste nella sostituzione di tutti i filtri (olio, aria, abitacolo e carburante) e dell'olio motore.       CAMBIO FILTRO e... Read more
NVR con Rasberry Pi - MOTIONEYE NVR con Rasberry Pi - MOTIONEYE -       L'NVR o network video recorder (registratori video di rete) è un accessorio che serve per registrare il flusso video di telecamere e gestirne le notifiche. Vista la diffusione di un infinità di telecamere... Read more
VUOI SAPERE I TUOI DATI DI CONNESSIONE   Vuoi sapere l'INDIRIZZO IP con cui navighi e i dati della tua LINEA INTERNET?       Aprendo il seguente link http://mioip.centrodigravita.it si aprirà una pagina che mostrerà il tuo indirizzo IP con cui navighi e altri dati come l'operatore internet e il... Read more
IPHONE 6 come smontare il DISPLAY-AURICOLARE-PULSANTE - IPHONE 6 - SOSTITUZIONE PARTI INTERNE         Capita molto spesso che per una banale caduta si rompa il vetro del telefono. Se si ha un pò di manualità la sostituzione è abbastanza semplice basta seguire le istruzioni e... Read more
WEBCAM/IPCAM sul sito con PHP  Pubblicare immagini della WEBCAM/IPCAM sul proprio sito con PHP       Quasi la totalità delle "IPCAM" in commercio hanno la possibilità di esportare le immagini tramite FTP con uno schedulatore o a tempo. Questo ci permette di pensare di pubblicare queste... Read more
OPENWRT protezione Bambini / Parental Control OPENWRT protezione Bambini / Parental Control         Il software OpenWrt non ha una app per la gestione del Parental Control ma si possono attivare delle accortezze per poter vigilare sull'uso di internet dei propri figli.     IL... Read more
WEBCAM in Brianza realtime    Immagini in tempo reale dalla WEBCAM in BRIANZA Le immagini sono aggiornate ogni 5 minuti per poter "toccare con mano" il meteo e la bellezza della verde Brianza.           Read more
Attivare le VLAN su OPENWRT con il TP-LINK 1043nd Attivare le VLAN su OPENWRT con il TP-LINK 1043nd         Dopo aver aggiornato il Firmware del TP-LINK 1043nd con OPENWRT alla versione 15.1 è possibile configurarlo per la gestione delle VLAN o LAN Virtuali. Questo permette la segmentazione... Read more
STAMPA e COSTRUZIONE di una TURBOVENTOLA o TURBOFAN a 2 STADI in Plastica     STAMPA e COSTRUZIONE di una TURBOVENTOLA o TURBOFAN   in Plastica       Utilizzando una Stampante 3D e circa 1 Kg di filamento plastico ho stampato le parti che vanno a formare una TURBOVENTOLA ossia un motore a turbina con una... Read more
Costruire una stampante 3D (Arduino)   Costruire una stampante 3D (Arduino)       In commercio esistono numerose stampanti 3D già assemblate e pronte per la stampa ma il bello è riuscire a costruirsela "Fai-da-Te ". Oltre alla ferramenta reperibile da qualsiasi parte, dobbiamo procurarci le... Read more
CENTRALINO VOIP ASTERISK con ADATTATORE PATTON INSTALLARE CENTRALINO VOIP  ASTERISK con ADATTATORE ISDN - PSTN PATTON SMARTNODE       Il modo più semplice per installare un centralino VOIP ASTERISK su di una macchina è utilizzare il pacchetto di installazione ASTERISK NOW... Read more
Aggiungere FOTOCELLULE al PORTONE BASCULANTE PANELCO Aggiungere FOTOCELLULE al PORTONE BASCULANTE PANELCO Il portone basculante per garage PANELCO ha incorporato un sistema di sicurezza contro l'accidentale urto in caso di chiusura o apertura dello stesso che si basa su di un ecoder.Questo controlla l'effettivo spostamento della porta e in caso... Read more
La CASA DOMOTICA   LA CASA DOMOTICA In commercio esistono numerose apparecchiature che permettono di controllare in remoto qualsiasi oggetto elettronico in casa. Ma è possibile crearne uno utilizzando il microcontrollore ARDUINO? Questo è il mio progetto di casa domotica dove tramite pagina web è... Read more
Resettare un Access point TP-LINK in FAIL SAFE Resettare un Access point TP-LINK in FAIL SAFE     Seguendo le WIKI dell'Open-wrt questi sono i passaggi per resettare un Access point con installato il firmware Open-WRT. Il reset può essere necessario in caso di smarrimento della password di root... in caso di reset tramite... Read more
Estrazione di TUTTI i FILE e CARTELLE da MICROSOFT SHAREPOINT con WGET Estrazione di TUTTI i FILE e CARTELLE da MICROSOFT SHAREPOINT con WGET   Per poter esportare i file da un server SHAREPOINT ci sono numerosi programmi a pagamento che richiedono una compatibilità con la varzione installata sul server. Un metodo molto efficace è quello di utilizzare il... Read more
Ripristino TP-LINK 941 OPEN-WRT tramite seriale e ARDUINO Ripristino TP-LINK 941 OPEN-WRT tramite seriale e ARDUINO       Con un errata configurazione della ETH0 da interfaccia WEB luci OPEN-WR si blocca  l'accesso alla configurazione (web, telnet, ssh) da tutte le porte di rete del TP-LINK e quindi se non... Read more
TP-LINK 1043 V3 forzare installazione OPEN-WRT 15.1 TP-LINK 1043 V3 forzare installazione OPEN-WRT Versione15.1          Per aggiornare il firmware alla versione OPENWRT per il modello 1043 con Versione Hardware 3 non è presente il file nel database:... Read more
Vmware ESXi 6 AVVIO AUTOMATICO VM da CRONTAB Vmware ESXi 6 AVVIO AUTOMATICO VM da CRONTAB         Questi sono i passaggi per poter eseguire uno script programmato su di un server Vmware ESXi 6. Nel caso specifico eseguo uno script dove viene avviata una Virtual Machine. Prima di eseguire i... Read more
Costruire un "Laghetto" per Tartarughe   Costruire un "Laghetto" per Tartarughe Ecco come ho costruito un bel laghetto per le mie povere tartarughe costrette a vivere in una piccola vaschetta. LO STAMPO Come materiale ho deciso di utilizzare la... Read more
IL VINO fatto in CASA  IL VINO fatto in CASA       Cos' è possibile produrre con 600 viti (non di inox :-)) e un pò di quintali di uva? NATURALMENTE un OTTIMO VINO !!!  Ma è opportuno avere attrezzi, tempo e una serie di accorgimenti che si affinano solo... Read more
Fare La BIRRA in CASA   LA BIRRA fatta in CASA E' possibile farsi una buona birra casalinga e magari risparmiare sul costo? In commercio ci sono numerosi KIT per preparare la birra artigianalmente. Molti siti internet, consorzi e fai-da-te hanno sempre a disposizione tutte le... Read more
PROGETTO ROBO-PIE PROGETTO ROBO-PIE (ca) Il progetto "CA" nasce dall'esigenza di avere un OCCHIO remoto che possa controllare l'interno o l'esterno della casa anche senza esserci. L'idea è di ultilizzare apparecchiature comuni già in mio possesso e creare questo ROBOT... Read more
Costruire Cavalletto per FOTO PANORAMICHE (Panoramic heads) Costruire Cavalletto per FOTO PANORAMICHE (Panoramic heads)     Come si fanno i panorami 3D? Come prima cosa serve l'attrezzatura, una buona fotocamera digitale, un cavalletto e il software si stitching. La cosa fondamentale nel cavalletto è la "testa"... Read more