Data logger per temperatura con Raspberry Pi

Il system on a chip (SoC) del Raspberry Pi ha un sensore di temperatura che può essere impiegato per eseguire misure di temperatura dalla command line. Esso fornisce informazioni su quanto calore il chip ha generato durante il funzionamento, oltre all'informazione della temperatura ambiente. Lo scopo del progetto è quello di creare un semplice script che possa essere eseguito automaticamente durante il boot del Raspberry Pi, acquisire misure dal sensore a intervalli predefiniti, e scriverle in un log file che può essere esaminato successivamente.

Cosa imparerete

Completando questo progetto imparerete a:

  • creare uno script per la shell,
  • scrivere le letture di temperatura su file,
  • aggiungere un timestamp ai log,
  • avviare un programma in modo automatico.

Cosa vi occorre

Dal punto di vista hardware non ci sono particolari requisiti: è sufficiente disporre della scheda Raspberry Pi con le periferiche di base. Per quanto riguarda il software, è sufficiente una distribuzione aggiornata di Raspbian su scheda SD. Per ottenere maggiori informazioni in merito, potete fare riferimento a questa guida su come aggiornare Raspbian. Eventualmente, per ottenere dei timestamp accurati nei vostri log, vi potrebbe fare comodo un accessorio come il Real Time Clock.

Creiamo uno script per memorizzare la temperatura

La temperatura del chip può essere letta da command line e può anche essere scritta in un file. Uno script per la shell, tuttavia, può eseguire una sequenza di comandi e con un interprete bash consente l'esecuzione ripetuta di questa procedura. Utilizzeremo perciò uno script per registrare la temperatura in un log file a intervalli di tempo prestabiliti.

Visualizzare la temperatura

Per visualizzare la temperatura corrente del vostro Raspberry Pi, potete digitare il seguente comando nella command line: /opt/vc/bin/vcgencmd measure_temp (Figura 1).

Fonte: www.raspberrypi.org

Figura 1: Command line per la misura di temperatura [Fonte: www.raspberrypi.org]

Creazione dello script

Quando si scrive uno script per la shell, la prima riga deve contenere informazioni su quale interprete deve essere utilizzato per eseguire lo script. In questo caso utilizzeremo uno script bash, in quanto esso consente l'utilizzo di cicli utili per l'esecuzione ripetuta delle misure. Per specificare l'interprete, la prima riga dello script deve contenere:#!/bin/bash.

Se volete modificare lo script direttamente nella command line, potete usare l'editor integrato nano:

  1. Digitate nano temperature_log.sh per creare un file chiamato temperature_log.sh e modificatelo. Se il file esiste già, nano vi permetterà comunque di aggiornarlo.
  2. Utilizzate il cursore per spostarvi e selezionare il punto in cui volete inserire il codice.
  3. Quando avete finito di modificare il file, premete Ctrl + O per salvare il file.
  4. Premete Enter  per salvare il file (potete cambiare il nome del file, se lo desiderate).
  5. Premete Ctrl + X per uscire da nano.

Per maggiori informazioni su come utilizzare l'editor nano, potete digitare nano oppure leggere questa guida documentazione online di nano. Le righe seguenti contengono una sequenza di comandi che permette di visualizzare la temperatura:

#!/bin/bash

/opt/vc/bin/vcgencmd measure_temp

Per eseguire lo script, occorre impostare i suoi permessi. Digitate

chmod +x temperature_log.sh 

per dare permessi di esecuzione allo script. Successivamente, potete eseguire lo script digitando

./temperature_log.sh,

a condizione che lo script si trovi nella directory in cui vi trovate. Se ad esempio lo script si trova nella vostra home, vi basta dare il comando

~/temperature_log.sh 

per eseguire lo script da qualunque cartella.

Letture ripetute della temperatura

Per memorizzare continuativamente la temperatura, dovremo usare un loop nel nostro script. Esistono due opzioni: potete creare un loop che si ripete indefinitamente, oppure uno che viene ripetuto un certo numero di volte, in funzione di ciò che volete fare.

Il codice seguente esegue le istruzioni comprese tra do e done in modo continuativo:

while :
do
    /opt/vc/bin/vcgencmd measure_temp
done

Questo ciclo, invece, ripeterà il codice tra do e done per 30 volte:

for i in {1..30}
do
    /opt/vc/bin/vcgencmd measure_temp
done

Questo loop non ripete la misura ma non esiste alcun ritardo tra ogni misura; effettua ogni misura immediatamente, una dopo l'altra. Per eseguire le misure solo a intervalli specificati, dovremo aspettare per un certo tempo prima di compiere ogni misurazione. Ciò può essere fatto inserendo la riga sleep 10 subito dopo l'istruzione di visualizzazione della temperatura; lo script aspetterà per 10 secondi prima di eseguire una nuova misura.

Ecco uno script di esempio:

#!/bin/bash

while :
do
    /opt/vc/bin/vcgencmd measure_temp
    sleep 10
done

Scrittura su file

Il comando echo permette di scrivere qualcosa nella command line, per cui impostando come uscita del comando un file, si può anche scrivere il testo nel file stesso. L'esempio seguente scrive inizialmente "test", poi scrive "test" nel file test.txt, e infine mostra il contenuto del file test.txt (figura 2):

Fonte: www.raspberrypi.org

Figura 2: Scrittura nel file [Fonte: www.raspberrypi.org]

Per memorizzare più temperature nello stesso file, occorre aggiungere una nuova linea al file invece di sovrascriverne il contenuto. Ciò può essere realizzato digitando echo test >>test.txt.

Creazione del timestamp

Quando si creano i file di log, è una buona idea includere un timestamp nel nome del file, in modo tale che possa essere possibile identificare velocemente i vari log. Se non disponete di un Real Time Clock o di un accesso alla rete il tempo non sarà corretto, ma permetterà comunque di mantenere i file di log nell'ordine corretto. Se digitate il comando date +%F_%H-%M-%S, otterrete la data e l'ora correnti del Raspberry Pi in un formato leggibile. Questo può essere utilizzato come parte del nome del file e consentirà un ordinamento corretto dei file stessi. Per esempio: 2014-07-30_10-59-56. In questo comando, %F indica la data completa nel formato tipo 2014-07-30, %H indica l'ora nel range 00..23, %M indica i minuti nel range 00..59, e %S indica i secondi nel range 00..59. Cominceremo a dire all'interprete di eseguire il comando date, e poi utilizzeremo l'output del comando per formattarlo meglio: 'date +%F_%H-%M-%S'. Possiamo poi creare una variabile timestamp per contenere il risultato: timestamp='date +%F_%H-%M-%S'.

Aggiunta del timestamp al log

All'inizio dello script creeremo il file di log, inizializzato con una piccola riga di intestazione:

Digitate 

echo "Temperature Log - $(date)" >/home/pi/log/temperature_log_$timestamp.txt 

per creare un file di log chiamato temperature_log_<timestamp> nella directory /home/pi/logs/.

Nel comando precedente, $(date) restituisce la data nel formato di default mentre $timestamp restituisce il valore della variaibile timestamp. Possiamo utilizzare una tecnica simile per memorizzare la temperatura in una variabile all'interno del loop, scrivendo temp='/opt/vc/bin/vcgencmd measure_temp'. Opzionalmente, possiamo eliminare la parte temp= dell'output della misura di temperatura digitando temp=${temp:5:16}; ciò prenderà il valore della variabile a partire dal quinto carattere fino a 16 caratteri. Questo valore può poi essere appeso al file scrivendo:

echo $temp >>/home/pi/logs/temperature_log_$timestamp.txt.

Ecco uno script di esempio:

#!/bin/bash

timestamp=`date +%F_%H-%M-%S`
echo "Temperature Log - $(date)" >/home/pi/logs/temperature_log_$timestamp.txt
while :
do
    temp=`/opt/vc/bin/vcgencmd measure_temp`
    temp=${temp:5:16}
    echo $temp >>/home/pi/logs/temperature_log_$timestamp.txt
    sleep 10
done

Automatizziamo lo script

Se volete eseguire lo script in modo automatico quando il Raspberry Pi esegue il boot, dovrete eseguirlo da uno degli script lanciati durante lo startup. Esistono due opzioni: potete aggiungerlo al vostro ~/.bashrc e verrà eseguito quando vi loggate, oppure potete aggiungerlo al vostro /etc/rc.local per eseguirlo automaticamente durante il boot, prima del log in. Fate molta attenzione quando modificate questi file (soprattutto nel secondo caso), poichè il Raspberry Pi potrebbe non essere in grado di eseguire il boot correttamente se questi file sono modificati in modo non corretto!

Opzione 1

Digitate nano ~/.bashrc per aprire il file in modifica (potete utilizzare un qualunque editor), e aggiungete la riga seguente alla fine del file: 

bash ~/temperature_log.sh &

La bash eseguirà lo script passato come argomento e il carattere & alla fine assicura che lo script verrà eseguito in background (Figura 3).

Fonte: www.raspberrypi.org

Figura 3: Script dell'opzione 1 [Fonte: www.raspberrypi.org]

Accertatevi di non dimenticare il carattere finale &, altrimenti lo script non funzionaerà in background e bloccherà il processo di boot in un loop!

Opzione 2

Digitate 

sudo nano /etc/rc.local 

per aprire il file in modifica (potete usare un qualunque editor di vostro piacimento), e aggiungete la seguente riga appena prima di exit o alla fine del file: 

( sleep 10; sudo bash /home/pi/temperature_log.sh ) &

La bash eseguirà lo script passato come argomento e il carattere alla fine assicura che lo script verrà eseguito in background. Le parentesi raggruppano assieme i comandi sleep e bash, così l'esecuzione inizierà con un ritardo di 10 secondi (Figura 2).

Fonte: www.raspberrypi.org

Figura 4: Script dell'opzione 2 [Fonte: www.raspberrypi.org ]

Accertatevi di non dimenticare il carattere finale &, altrimenti lo script non funzionerà in background e bloccherà il processo di boot in un loop!

Lo script finale

Lo script finale sarà qualcosa di simile al seguente:

#!/bin/bash

timestamp=`date +%F_%H-%M-%S`
echo "Temperature Log - $(date)" >/home/pi/logs/temperature_log_$timestamp.txt
while :
do
    temp=`/opt/vc/bin/vcgencmd measure_temp`
    temp=${temp:5:16}
    echo $temp >>/home/pi/logs/temperature_log_$timestamp.txt
    sleep 10
done

Ulteriori sviluppi

Come ulteriore sviluppo rispetto al progetto originale, proponiamo un altro script in cui la misura della temperatura viene eseguita a intervalli di 5 minuti. Il seguente script di esempio può essere utilizzato per prendere una misura di temperatura per un tempo compreso tra 10 secondi e 5 minuti, per poi spegnersi completamente:

#!/bin/bash

echo "Starting to record the temperature" 
timestamp=`date +%F_%H-%M-%S`
echo "Writing into /home/pi/logs/temperature_log_$timestamp.txt" 
echo "Temperature Log - $(date)" >/home/pi/logs/temperature_log_$timestamp.txt
for i in {1..30}
do
    temp=`/opt/vc/bin/vcgencmd measure_temp`
    temp=${temp:5:16}
    echo $temp >>/home/pi/logs/temperature_log_$timestamp.txt
    echo "Recorded temperature #$i:"
    tail -1 /home/pi/logs/temperature_log_$timestamp.txt
    sleep 10
done
echo "Finished recording the temperature, shutting down"
sudo shutdown -h now

Link all'articolo originale: https://www.raspberrypi.org/learning/temperature-log/

 

 

 

Scarica subito una copia gratis

Una risposta

  1. Maurizio 15 Giugno 2016

Scrivi un commento

Seguici anche sul tuo Social Network preferito!

Send this to a friend