ITC Sistemi Blog

Intrattenimento e curiosità sul mondo dell'IT
itc-sistemi-raspberry-1

Leggere temperatura da sensore DS18B20 con Raspberry e GPIO

GPIO ITCsistemi - Lettura temperatura con DS18B20 e Raspberry 

Configurare il sistema operativo per interagire con la sonda di temperature DS18B20

•Abiltare i moduli del kernel per interagire con il sensore editando il file:

/etc/modules

•Aggiungere i due moduli:


w1_gpio
w1_therm

quindi, salvare.

 

•Nel file /boot/config.txt aggiungere:


dtoverlay=w1-gpio

quindi, salvare.

 

• Riavviare il RaspBerry per far caricare i moduli nuovi al boot.

 

Test e lettura dei dati

A questo punto se tutto funziona a dovere, potremo vedere il sensore tra i devices:

pi@itc-Pi:~$ ls /sys/bus/w1/devices/
28-0417c46565ff w1_bus_master1

Ogni sensore collegato al BUS ha un ID univoco e per per ogni sonda collegata al GPIO si potrà vedere una directory avente nome l’id del sensore in /sys/bus/w1/devices/.

 

Leggendo il file virtuale w1_slave con cat è possibile eseguire la lettura della temperatura:

pi@itc-Pi:~$ cat /sys/bus/w1/devices/28-0417c46565ff/w1_slave
b5 01 4b 46 7f ff 0c 10 cd : crc=cd YES
b5 01 4b 46 7f ff 0c 10 cd t=27312

27312 è la temperatura rilevata “grezza”, nel senso che il valore ritornato non è in formato decimale.

 

Script di lettura

#!/usr/bin/php
<?php
// DaxTech.net 2018
#
# check parameter
#
if( !isset($argv[1]) or (count($argv) != 2) )
{
   die(json_encode(array('error'=>'true', 'message'=>'wrong parameters','errorCode'=>'-2')));
}

#
# get dev id
#
$devId = trim($argv[1]);

#
# exec raw read
#
$rawRead = shell_exec("echo \$(cat /sys/bus/w1/devices/$devId/w1_slave | grep -E -o \".{0,0}t=.{0,5}\" | cut -c 3-)");
$rawRead = str_replace("\n", '', $rawRead);

#
# check 4 errors
#
if(!is_numeric($rawRead))
{
die(json_encode(array('error'=>'true', 'message'=>"read error: $rawRead",'errorCode'=>'-1')));
}

#
# parse float - 25875 > 25.8
#
$value = floatval($rawRead);
$value = round(($value / 1000), 1);

#
# do output
#
die(json_encode(array('error'=>'false', 'message'=>"$value",'errorCode'=>'0')));

?>

Lo script fa uso dell’inteprete php-cli percui non funzionerà se non si installa il pacchetto php-cli (apt install php-cli).

 

Installare lo script

Installare lo script in una directory di environment così da poterlo usare in qualunque cartella ci si trovi:

nano /usr/local/bin/GPIOtemperature

Incollare lo script, salvare

Flaggare il file come eseguibile:

chmod +x /usr/local/bin/GPIOtemperature

Utilizzo script

Lo script prevede un argomento: l’ID del sensore che deve leggere, esempio:


pi@itc-Pi:~ $ GPIOtemperature 28-0417c46565ff
{"error":"false","message":"27.4","errorCode":"0"}

Se non ci sono stati problemi, lo script restituisce il testo in formato JSON ( utile se si vuole leggere il valore da un’altra applicazione ) contenente la temperatura letta e se ci sono stati errori di lettura. Ovviamente è possibile modificare lo script a piacimento per far ritornare un valore prettamente testuale, se lo si desidera.

Lascia un commento

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