
In questa seconda puntata del corso sull'IoT per Raspberry Pi esamineremo strategie alternative di soluzioni, utilizzando diversi linguaggi di programmazione. Inoltre, finalmente, scopriremo il modo di utilizzare le nostre applicazioni non solamente nell'ambito della singola rete locale ma di tutta la Wan. Vedremo come da qualsiasi parte del mondo sarà possibile attivare un carico dislocato nella nostra abitazione.
Applicazione a livello mondiale
Una applicazione IoT può essere realizzata in mille modi diversi. Non esiste una regola restrittiva sul linguaggio di programmazione da utilizzare oppure sulla tipologia di interfaccia utente da adottare. Il fatto che conta è quello di mettere in contatto, tra di loro, degli oggetti intelligenti (Things) dotati di un proprio indirizzo IP che si scambino dati senza l'intervento umano.
In questo articolo affronteremo la problematica con una diversa strategia, probabilmente più semplice della precedente. Utilizzeremo, infatti, altri linguaggi di programmazione per la realizzazione di una semplice applicazione "manuale". Ma, soprattutto, l'interfaccia di comando che andremo a creare sarà "realmente" visibile su Internet, da qualsiasi PC o dispositivo mobile presente in tutto il mondo. Scoprirete quanto sia emozionante accendere una lampada, situata in Italia, da una postazione remota, mobile o fissa, dislocata in Australia. Il tutto solamente con un tocco dello schermo tramite un dito.
Vogliamo ancora sottolineare che gli esempi riportati sono ancora da considerarsi propedeutici alla realizzazione di "vere" applicazioni IoT, più avanti nel corso, nelle quali esse saranno dotate di sensori finalizzati all'attivazione automatica dei processi e per lo scambio autonomo di dati tra gli oggetti.
Diagramma logico
Quello che vediamo in figura 1 costituisce un po' la logica dell'intero sistema esaminato in questo articolo. Si tratta di tanti tasselli che interagiscono tra di loro in modo da generare una complessa struttura funzionante su Internet.
Schema elettrico
Lo schema elettrico è uguale a quello della puntata precedente. Esso è composto dal Raspberry Pi 3, dal transistor di potenza (BD243), da una lampada di potenza a 12V. e da una batteria di pari tensione, come visibile nello schema elettrico di cui in figura 2. La massa comune dell'attuatore risulta elettricamente collegata a quella del Raspberry Pi.
In figura 3 è possibile osservare il cablaggio dei componenti.
Il Web Server
Anche in questo caso occorre utilizzare un web server, Apache2 per questo progetto, per condividere le pagine in HTML e PHP. Abbiamo visto le istruzioni per l'installazione nella prima parte del corso. Ricordiamo, in questa sede, quali sono le operazioni da compiere.
[...]
ATTENZIONE: quello che hai appena letto è solo un estratto, l'Articolo Tecnico completo è composto da ben 2333 parole ed è riservato agli ABBONATI. Con l'Abbonamento avrai anche accesso a tutti gli altri Articoli Tecnici che potrai leggere in formato PDF per un anno. ABBONATI ORA, è semplice e sicuro.

Sono infinite le modalità di realizzazione di una applicazione IoT. Lo vedremo nei prossimi articoli.
Il 2020 si avvicina, ovvero il picco massimo di dispositivi IoT collegati, con nuove tecnologie pronte per essere implementate e offrire la massima flessibilità e prestazione in termini funzionali.
In riferimento all’articolo “Realizziamo applicazioni IoT con il Raspberry Pi 3: usciamo su Internet”
Eseguendo sudo ./accendi e sudo ./spegni la lampada si accende e si spegne, ma aprendo il browser sulla rete locale, anche se viene regolarmente visualizzata la pagina con i due pulsanti ACCENDI e SPEGNI, non ottengo l’accensione della lampada. cosa posso aver dimenticato? Grazie
Salve. I sorgenti sono nella cartella /var/www/html ?
Inoltre non vorrei che il tuo browser avesse attivato delle restrizione per l’esecuzione di script o altro…. Prova un altro browser….
Ho girato un po su internet per darmi un’infarinata su PHP e ho trovato questo esempio:
Risultato pagina bianca. Forse come Apache, anche PHP va installato. Detto e fatto, ottengo le pagine di info. Era necessario installarlo?
Riprovato a lanciare menu.php, ma ancora nulla, la lampada non si accende.
Altro tempo su internet, visto uso del comando ‘eco’, così l’ho inserito nel listato.
Rilanciato menu.php e premendo i pulsanti ottengo la scritta ON e OFF quindi il problema è sulla linea ‘system’
eppure i comandi ‘sudo /home/claudio/iot/accendi’ e
‘sudo /home/claudio/iot/spegni’ funzionano.
i comandi sono una cosa, l’allaccio del PHP con i comandi è un’altra cosa.
Se ottiene la pagina di info vuol dire che il PHP sta funzionando e che il Server è in funzione.
Potrebbe incollare qui il contenuto di menu.php ?
Provo a mandarlo virgolettato, lo avevo già mandato, ma non so perché, viene tagliato. Comunque avevo fatto un copia incolla e sostituito giovanni con claudio. Uso la versione Raspbian Stretch
”
Controllo di un carico
“
niente da fare, il codice viene tagliato
Invialo alla mia email personale.
[email protected]
Dunque, guardando il listato PHP non mi convince quel comando:
eco “ON”;
Provalo a togliere (anche eco “OFF”;)
La corretta sintassi è:
echo “Hello World”;
CIao
In effetti nel programma è scritto echo e sul monitor viene indicato ON toccando il pulsante ACCENDI e OFF con l’altro. Ho letto qualcosa sul “Safe Mode”, ma sembra che nella versione attuale di PHP non è implementata e quindi non attiva..
Dunque, ho provato il suo listato nel mio Raspberry,
e funziona, cambiando ovviamente il nome della cartella.
Al momento, l’unica proca che mi viene in mente
è quella di cambiare browser, ad esempio l’ottimo Firefox
Salve dove sono tutti codici?
Salve, anch’io lo sto provando ma non mi funziona, nè con Chrome nè con Firefox.
L’unica cosa che ho cambiato è la cartella:
da /home/giovanni/iot/accendi a /home/accendi
Grazie dell’eventuale supporto.
Matteo
Salve, anch’io lo sto provando ma non mi funziona, nè con Chrome nè con Firefox.
L’unica cosa che ho cambiato è la cartella:
da /home/giovanni/iot/accendi a /home/accendi
Grazie dell’eventuale supporto.
Matteo
Ciao.
Ho riprovato il programma. E’ TUTTO OK, funziona perfettamente.
Ho cambiato anche il percorso su /home ed è OK. Ovviamente devi anche copiare su /home gli eseguibili.
Il server è in funzione? SUl browser digita “http://localhost/”. Si compare la pagina di Apache2 è tutto OK.
L’unica cosa che faccio, in effetti, è quella di entrare
nel sistema, all’accensione, come “root”.
Pubblico qui sotto il listato PHP, sperando che si legga.
Controllo di un carico
Il listato non si legge, lo pubblico senza inserire i segni di “maggiore e minore”:
html
body bgcolor=”#339933″
center
font color=”#FFFFFF” size=”7″>Controllo di un carico/font
br
form method=”POST”
input type=”submit” name=”on” value=”ACCENDI” style=”font-size : 40px; width: 80%; height: 200px;”
br
input type=”submit” name=”off” value=”SPEGNI” style=”font-size : 40px; width: 80%; height: 200px;”
/form
/center
/body
/html
?php
if(isset($_POST[‘on’])) {
system(“/home/accendi”);
}
if(isset($_POST[‘off’])) {
system(“/home/spegni”);
}
?
PS.
Funziona con qualsiasi browser……
Scommetto che il problema è dalla mia parte…
Io digito l’ip del mio raspberry (ver.B – a 2 porte USB) con menu.php
192.168.137.5/menu.php
Il tutto funziona tranne che per i pulsanti e i relativi led
Sono ancora in modalità LAN
In effetti se digito 127.0.0.1 non mi si connette, e si che con 192.168.137.5 mi dice
IT WORKS
cosa potrebbe essere?
l’inserimento delle due linee echo “ON e echo “OFF” nei due if all’interno della parte PHP, mi ha permesso di vedere che tutto lo scambio tra il browser del PC e il Raspberry funziona, infatti a seconda di quale pulsante è selezionato compare a schermo ON o OFF. Il problema è proprio sulle due linee ‘system’ forse è qualche impostazione della board o la versione di uno dei programmi. Ho provato anche a ricaricare sistema/apache e PHP da zero, ma ancora non va.. continuerò a cercare magari qualche esempio che usa system e vedere se funziona.
Ciao, dove le inserisci le righe echo ON e echo OFF?
Mi faresti un esempio?
Inoltre secondo te il fatto che 127.0.0.1 non funzioni può essere un indizio?
Con l’IP di Raspberry la intranet funziona.
Ho provato a scrivere un file PHP con la sola linea system(“/home/claudio/iot/accendi”);
nulla da fare, mentre ‘sudo /home/claudio/iot/accendi’ funziona
ho capito forse il perchè… prova a dare il seguente comando ad accendi e spegni:
chmod u+s accendi
chmod u+s spègni
Dovrebbe funzionare.
Ciao
if(isset($_POST[‘on’])) {
echo “ON”;
system(“/home/claudio/iot/accendi”);
}
if(isset($_POST[‘off’])) {
echo “OFF”;
system(“/home/claudio/iot/spegni”);
}
la scritta appare in nero sul fondo grigio sotto i pulsanti
si anch’io ho fatto questo controllo, ma il led non vuole accendersi
Ho trovato su Internet un articolo che parlava della possibilità di un File PHP di interagire con GPIO, lo riporto sotto:
“L’ utente di servizio www-data (che per chi non lo sapesse è l’utente che viene configurato da Apache per l’ utilizzo dei vari servizi internet, compreso il PHP) non è un utente root, pertanto non può accedere a componenti di basso livello come appunto i GPIO.
Per ovviare a questo ostacolo occorre abilitare l’utente www-data ad eseguire comandi da superuser. Per fare ciò apriamo una finestra di terminale ed editiamo il file /etc/sudoers
sudo nano /etc/sudoers
Aggiungete al fondo (come da immagine) l’ istruzione www-data ALL=NOPASSWD: ALL”
può essere questo il problema?
prova con :
chmod u+s accendi
chmod u+s spègni
ciao
OK! grazie
Dopo aver risolto il problemino dell’accensione, non riesco ad uscire fuori (WAN) con il mio tablet.
Se digito come viene detto nell’alrticolo
/ilmioip/menu.php
mi esce la schermata del mio router.
E si che il DMZ è attivato.
Se quualcuno mi può essere di aiuto….