====== Configuration de relevés de température ======
Sur la carte //SVXLink Card// est installé un capteur de température DS18B20 fonctionnant en bus 1-wire et raccordé au GPIO 04 de la carte Raspberry Pi.
Dans le fichier ''/boot/config.txt'' avec la commande
sudo nano /boot/config.txt
et ajouter en fin de fichier ces lignes
#gpio 1-wire
dtoverlay=w1-gpio,gpiopin=4
Dans le cas ou vous auriez installé un capteur DS18B20**-PAR** ou DS18S20**-PAR**, veuillez notez que le fichier ///boot/config.txt// doit être complété comme suit.
En effet ce composant a un fonctionnement "parasite". Il ne tire pas son alimentation nécessaire à son fonctionnement sur la patte habituelle VDD (patte 3) mais directement de la patte DATA (patte 2).
dtoverlay=w1-gpio-pullup,gpiopin=4,pullup=1
Redémarrer votre Raspberry Pi, puis reconnectez-vous.
sudo reboot
====== Lecture de la température ======
A présent, la sonde installée sur la carte va pouvoir être lue. Le répertoire ''/sys/bus/w1/devices/'' doit contenir un sous-répertoire composés de chiffres et lettres. Le nom de ce répertoire est le numéro de série (numéro unique au monde !) de votre sonde de température.
ls /sys/bus/w1/devices/
va renvoyer par exemple :
10-00080109d8c4 w1_bus_master1
Pour lire la valeur de la température, nous allons consulter le contenu d'un fichier se trouvant dans ce répertoire ''10-00080109d8c4'' avec la commande suivante
cat /sys/bus/w1/devices/10-00080109d8c4/w1_slave
Cela affiche deux lignes.
2e 00 4b 46 ff ff 10 10 a1 : crc=a1 YES
2e 00 4b 46 ff ff 10 10 a1 t=22750
La seconde ligne contient la température mesuré par le composant 1-wire. Dans notre cas //t=22750//. Il faut comprendre que la température mesurée est 22,75°C. En effet il faut divisé la valeur entière par 1000 pour déterminer la température.
====== Programme de lecture cyclique ======
Pour pourvoir constater la réactivité de ce capteur de température, nous vous proposons ce programme de test en python.
Pour le faire fonctionner créer le fichier et copier-coller le code après avoir lancer votre éditeur.
sudo nano test-temperature.py
Dans le code recopié, pensez à remplacer le numéro de capteur (ici 10-00080109d8c4) par le vôtre. Vous trouvez ce numéro en lancant la commande //ls /sys/bus/w1/devices///
#!/usr/bin/env python
# -*- coding: utf-8 -*-
sensorids = ["10-00080109d8c4"] #Indiquer ici le numéro de série de votre 18b20 : ls /sys/bus/w1/devices/
for sensor in range(len(sensorids)):
temperatures = []
while True:
text = '';
while text.split("\n")[0].find("YES") == -1:
tfile = open("/sys/bus/w1/devices/"+ sensorids[sensor] +"/w1_slave" )
text = tfile.read()
tfile.close()
secondline = text.split("\n")[1]
temperaturedata = secondline.split(" ")[9]
temperature = float(temperaturedata[2:])/1000
print("temperature = %.3f °C" % temperature)
Lancer le programme avec la commande
python test-temperature.py
Vous verrez ce résultat
{{ :documents:1wire-temperature.gif?nolink |}}
====== Température lu par le relais via code DTMF ======
A intégrer à ''/usr/share/svxlink/events.d/local/Logic.tcl''
#SEND DTMF CODE 26#
if {$cmd == "26"} {
puts "Reading temperature..."
foreach file [glob -nocomplain -directory /sys/bus/w1/devices/ */w1_slave] {
set r [exec cat $file | grep t= | cut -f2 -d= ]
set r [format {%0.1f} [expr {$r / 1000.0}]]
lappend temps $r;
}
set temp1 [lindex $temps 0];
set temp2 [lindex $temps 1];
set temp3 [lindex $temps 2];
puts "$temp1";
playMsg "svxcard/temperature" "temp1";
playNumber $temp1;
playMsg "WeatherStation" "degree";
puts "$temp2";
playMsg "svxcard/temperature" "temp2";
playNumber $temp2;
playMsg "WeatherStation" "degree";
puts "$temp3";
playMsg "svxcard/temperature" "temp3";
playNumber $temp3;
playMsg "WeatherStation" "degree";
return 1
}
{{youtube>oJn8cgmSC1c?medium}}