Raspberry Pi visualizzare grafici

 

Raspberry Pi visualizzare grafici

raspberry pi visualizzare grafici

Sono “addicted” di andamenti grafici, secondo me sono l’unico modo per poter analizzare impianti, elettrodomestici, consumi oppure funzionamenti. Io a casa mia, registro e visualizzo persino quanta acqua passa nello sciacquone del water al momento del getto. Cosi un giorno, sperò di poter perfezionare quel gesto ;) e risparmiare acqua.

Oggi vi voglio mostrare alcuni modi per visualizzare grafici sul Raspberry Pi e per vedere andamenti di dati raccolti. E non solo, creiamo anche un’interfaccia grafica per poter interagire con il sistema.

 


Indice


 

Raspberry Pi visualizzare grafici con GNU Plot

 

Gnuplot è un potente programma (freeware) che può essere eseguito utilizzando il terminale oppure attraverso script (shell, phyton, php, ecc.). Con Gnuplot si possono creare grafici in 2D oppure in 3D, questi grafici sono salvabili , p.es. in formato png, gif, dfx e tanti altri.

Come fonte per la creazione dei grafici si possono utilizzare file di testo (csv, dat, txt, ecc.) oppure array (database query) e strutture ma anche XML oppure Json. Gnuplot offre anche varie funzioni matematiche, possibilità di formattare dati e tantissime altre cose. Il manuale di Gnuplot ha 240 pagine, penso che non devo aggiungere altro :mrgreen: .

Per installare (occupa all’incirca 12MB sul disco) Gnuplot sul Raspberry Pi bisogna immettere nel terminale:

Dopo l’installazione possiamo verificare il corretto funzionamento attraverso il terminale con

a questo punto dovrebbe comparire un grafico, dove Gnuplot specifica le funzioni disponibili per il terminale in uso (default è „wxt“). Per uscire da Gnuplot si usa „exit“.

Se Gnuplot funziona correttamente, potremmo creare un file, dati.txt, nella /home directory del nostro Raspberry Pi utilizzando il terminale:

Poi riapriamo Gnuplot e immettiamo:

Adesso dovrebbe comparire un imponente grafico, con tanto d’andamento e scala delle assi (x,y). Dopo questo minuscolo esempio, adesso abbiamo un’idea vaga, di quello che si può fare con Gnuplot. É ora di realizzare un’applicazione seria. Come base voglio utilizzare dati raccolti in precedenza, per visualizzare l’andamento di una temperatura. Gli scenari disponibili sono multipli (PHP, Phyton, C, Java, Shell). Io scelgo, visto che Gnuplot permette di salvare i grafici con estensioni png oppure jpg, di svrivere uno shell script che mi trasforma una volta al giorno, un grafico creato da Gnuplot in un’immagine. Questa immagine la posso integrare in HTML e JavaScript, in Java, in C, et voila.

Teoricamente, se sul Raspberry Pi non è installato neanche un webserver, basterebbe la porta seriale, per trasferire le immagini altrove, per poi elaborarle.

Il file di testo (temparatura.txt) con i dati raccolti da un sensore di temperatura si presenta cosi

C’è un timestamp in formato %Y-%m-%d %H:%M cioè Anno-Mese-Giorno Ore:Minuti, e poi c’è la temperatura non formattata, 24562 sono 24.6°C.

Il funzionamento dello script (plot.sh) è il seguente. Aprire il file (temperatura.txt), prende il timestamp, lo riformatta in %H:%M (ore:minuti) e lo applica sull’asse X. Poi prende la temperatura, la divide per 1000, la applica sull’asse Y e infine crea il grafico.

Questo grafico (temperatura.png) viene salvato nella cartella che creiamo, con il timestamp (data) del giorno.


Come prima cosa, dobbiamo cambiare i permessi al file „plot.sh“ per farlo eseguibile

Adesso possiamo eseguire il file con sudo ./plot.sh. Io vorrei però automatizzare il processo, qunidi immetto „crontab -e“ nel terminale e aggiungo la seguente riga

Secondo me, Gnuplot non è adatto per creare grafici „in corsa“, cioè per creare grafici on the fly. Quindi ho preferito di eseguire lo script una volta al giorno (23:59).

Per incorporare questa immagine in <b<>HTML, esiste l’ <img> Tag. Con JavaScript possiamo cambiare gli attributi a questo oggetto (img) con src.

Utilizzando un pò di JavaScript possiamo creare una funzionalità, che ci permette di selezionare singoli giorni, incremendo e decremendo la data. Un esempio, come si potrebbe presentare una visu molto semplice, si trova qua.

 


 

Interagire col webserver attraverso CGI

 

CGI (Common Gateway Interface) è un’interfaccia che permette l’interazione fra un webserver (Apache/Tomcat) e un file eseguibile (programma) attraverso HTML. Oltre a CGI ci sono anche FastCGI e i moduli per Perl e Phyton che permettono anche loro di interagire con un webserver.

Con Gnuplot abbiamo visto come possiamo creare e visualizzare semplici grafici. Adesso facciamo il prossimo passo visualizzando valori in tempo reale.

Come primo esempio leggiamo la temperatura della CPU del Raspberry, e la visualizziamo nel browser.

A questo punto dobbiamo anche controllare se il webserver è già installato sul vostro Raspberry. Se no, possiamo installare Apache con

Quando si installa Apache di solito, la default directroy per contenuti http è /var/www/ e quella per gli script cgi è /usr/lib/cgi-bin/. Controllare sempre anche i permessi che abbiamo verso queste cartelle e i file contenuti in esse.

 

Sotto riportato si trova lo schema di principio del funzionamento, fra http-request dal Client e la risposta dello script.

raspberry pi visualizzare grafici schema

Il nostro esempio è composto da due elementi. Uno script che interroga la temperatura del Raspberry. Questo script viene piazzato nella cartella /usr/lib/cgi-bin con permessi rwx (chmod 755).

#!/bin/sh
echo Content-Type: text/html
echo
echo ‘<html><body><pre>’
echo “Temperatura CPU Raspberry Pi”
read temperatura < /sys/class/thermal/thermal_zone0/temp
temperatura= echo “scale=1; $temperatura/1000″ | bc
echo ‘</pre></body></html>’

Il secondo elemento è una pagina html, piazzata nella cartella /var/www.

<head>
<meta http-equiv=”refresh” content=”1″>
</head>
clicca per visualizzare la temperatura CPU
<form action=”/cgi-bin/mioscript” method=”post”>
<input type=”submit” value=”clicca mi” />
</form>

 

Se tutto va bene, compare una pagina HTML in cui viene visualizzata la temperatura della CPU, è il refresh (elemento meta) della pagina, fa variare questo valore. Facendo il refresh della pagina attraverso meta, ci priviamo purtroppo della possibilità di poter immettere (elemento input, button, ecc.) qualcosa nella pagina html. Qunidi questa configurazione è del tipo read only.

Purtroppo per motivi di sicurezza / accesso a file, non posso mettere online un esempio serio.

Provo almeno a spiegare come funziona. Questa volta si aggiunge un file come interfaccia fra il file eseguibile (scritto in C) e l’applicazione cgi. Alla pagina HTML si aggiunge JavaScript per chiamare gli script, e Flot per visualizzare un grafico.

raspberry pi visualizzare grafici javascript

Raspberry Pi visualizzare grafici attraverso CGI e JavaScript

Coming Soon

 


 

Qt Framework

 

Qt è un framework multipiattaforma per lo sviluppo di programmi in C++. Con Qt si possono creare interfaccia grafiche, ma anche applicazioni client server per lo scambio dati fra dispositivi.

Il tema è un pò ampio e gonfierebbe secondo me troppo questo articolo, perciò scriverò un’articolo dedicato solo a Qt.


 

Raspberry Pi visualizzare grafici – altri modi

 

É impossibile elencare tutti i programmi, librerie disponibili per creare grafici, anche perchè non li conosco magari :) . Mi limito ad elencare tre librerie con cui ho già realizzato dei grafici.

JpGraph

 

JpGraph è una libreria basata su PHP. Con JpGraph si possono creare svariati tipi di grafici, linea, barra, torta ma anche diagrammi polari. La versione base è gratuita, invece esiste anche una versione PRO a pagamento. Per impostare il grafico si utilizza l’oggetto „graph“ e per creare per esempio una linea l’oggetto „p“ (semplice array).

L’utilizzo di JpGraph è molto semplice, ma si possono creare grafici di tutto rispetto. Per visualizzare il grafico, si utilizza come con Gnuplot il tag „img src=“““.

Flot

 

Flot è una libreria gratuita basata su JavaScript (jQuery). La homepage di Flot è fatta benissimo, c’è anche un Forum, è si trovano tanti esempi e consigli per iniziare a lavorare con Flot.

Highcharts

 

Highcharts è una libreria, per uso privato, gratuita, che si basa su JavaScript (jQuery). Highcharts è molto potente, con tantissime funzionalià e all’inizio ci vuole un pò per acquisire esperienza con questo strumento. Il Graph è un’oggetto, quindi se i dati (delle assi X/Y) arrivano da un’array bisogna trasformarli in un’oggetto (Json). Devo ammettere che Highcharts personalmente mi piace di più di tutte le altre librerie. La uso anche per visualizzare profili altimetrici per esempio.

Google Charts

 

Google Charts

 

Raspberry Pi visualizzare grafici

 
 

L’autore del blog

Werner Schrottenbaum è un appassionato di tecnologia e innovazione. Per scoprire di più, seguilo su Twitter e Google+.

Leave a comment




Allowed HTML Tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre lang="" line="" escaped="" cssfile="" class="" title="" data-url=""> <span class="" title="" data-url="">


Datalogger fotovolta

  Datalogger fotovoltaico con Linux     Ho un'amico, che utilizza per fare il ...

Raspberry Pi visuali

  Raspberry Pi visualizzare grafici Sono "addicted" di andamenti grafici, secondo me ...

Raspberry Pi porta s

  Raspberry Pi porta seriale   Per chi come me, viene dall'automazione industriale, ...

Raspberry Pi misurar

  Raspberry Pi misurare temperatura     Ci sono tanti modi per misurare consumi ...

Raspberry Pi convert

  Raspberry Pi convertitore A/D   Oggi vi presento un modulo A/D con ...

Datalogger fotovolta

  Datalogger fotovoltaico con Linux     Ho un'amico, che utilizza per fare il ...

Raspberry Pi visuali

  Raspberry Pi visualizzare grafici Sono "addicted" di andamenti grafici, secondo me ...

Raspberry Pi porta s

  Raspberry Pi porta seriale   Per chi come me, viene dall'automazione industriale, ...

Raspberry Pi misurar

  Raspberry Pi misurare temperatura     Ci sono tanti modi per misurare consumi ...

Raspberry Pi convert

  Raspberry Pi convertitore A/D   Oggi vi presento un modulo A/D con ...