====== 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}}