Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente Prochaine révision Les deux révisions suivantes | ||
raspberry_pi:ds18b20_temperature_numerique [06/10/2016 17:05] sky99 |
raspberry_pi:ds18b20_temperature_numerique [06/10/2016 17:10] sky99 |
||
---|---|---|---|
Ligne 119: | Ligne 119: | ||
Pour ce script, je ne vais pas réinventer la roue, et on va utiliser un script inspiré du [[https://learn.adafruit.com/adafruits-raspberry-pi-lesson-11-ds18b20-temperature-sensing/software|code d'exemple d'Adafruit]] : | Pour ce script, je ne vais pas réinventer la roue, et on va utiliser un script inspiré du [[https://learn.adafruit.com/adafruits-raspberry-pi-lesson-11-ds18b20-temperature-sensing/software|code d'exemple d'Adafruit]] : | ||
- | <file python readTemp.py> | + | <file python readTemp1.py> |
#!/usr/bin/env python | #!/usr/bin/env python | ||
import os | import os | ||
Ligne 159: | Ligne 159: | ||
</file> | </file> | ||
+ | J'ai modifié leur code pour ajouter un [[https://fr.wikipedia.org/wiki/Shebang|shebang]] au début, l'ajout de [[http://stackoverflow.com/questions/15318208/capture-control-c-in-python|la gestion d'une exception pour capturer le CTRL+C]], qui permet de quitter le script, sans afficher de messages d'erreur, et enfin le fait de n'afficher que la température en Celsius. Si vous voulez des degrés Fahrenheit, il suffira de modifier la ligne 34 pour remplacer le 0 en 1 entre les crochets, et pour afficher les deux il suffit d'enlever les crochets et le nombre. | ||
+ | Ce script affiche la température toutes les demi-secondes, et tourne en boucle pour ne se terminer que si l'on fait CTRL+C. En outre, il affichera la température de la première sonde DS18B20 trouvée, et donc ne sera pas adapté à l'affichage de plusieurs températures. On peut le modifier pour afficher une sonde bien précise qui n'est pas forcément la première, et également pour qu'il affiche la température une fois avant de quitter (pouvant ainsi être utilisé pour d'autres scripts) : | ||
+ | <file python readTemp2.py> | ||
+ | #!/usr/bin/env python | ||
+ | import os | ||
+ | import glob | ||
+ | import time | ||
+ | import sys | ||
+ | |||
+ | os.system('modprobe w1-gpio') | ||
+ | os.system('modprobe w1-therm') | ||
+ | |||
+ | base_dir = '/sys/bus/w1/devices/' | ||
+ | probe_addr='28-000006799670/' #remplacer ici par l'adresse de la sonde | ||
+ | device_folder = glob.glob(base_dir + probe_addr)[0] | ||
+ | device_file = device_folder + '/w1_slave' | ||
+ | |||
+ | def read_temp_raw(): | ||
+ | f = open(device_file, 'r') | ||
+ | lines = f.readlines() | ||
+ | f.close() | ||
+ | return lines | ||
+ | |||
+ | def read_temp(): | ||
+ | lines = read_temp_raw() | ||
+ | while lines[0].strip()[-3:] != 'YES': | ||
+ | time.sleep(0.2) | ||
+ | lines = read_temp_raw() | ||
+ | equals_pos = lines[1].find('t=') | ||
+ | if equals_pos != -1: | ||
+ | temp_string = lines[1][equals_pos+2:] | ||
+ | temp_c = float(temp_string) / 1000.0 | ||
+ | temp_f = temp_c * 9.0 / 5.0 + 32.0 | ||
+ | return temp_c, temp_f | ||
+ | |||
+ | print(read_temp()[0]) | ||
+ | </file> | ||
+ | |||
+ | A noter qu'on peut également se débarrasser des deux lignes 7 et 8 si l'on a chargé les modules au démarrage. | ||
+ | ===== Autres ressources ===== | ||
+ | |||
+ | |||
+ | |||
+ | S'il vous faut d'autres ressources, en voici quelques unes : | ||
+ | |||
+ | * [[https://learn.adafruit.com/adafruits-raspberry-pi-lesson-11-ds18b20-temperature-sensing/hardware|Le tutoriel d'Adafruit]], en Anglais, qui m'a servi de base; | ||
+ | * [[http://www.manuel-esteban.com/raspi-capteur-de-temperature-ds18b20/|Le tutoriel de Yaug's corner]], (en Français) qui fournit encore quelques liens; | ||
+ | * [[http://www.framboise314.fr/mesure-de-temperature-1-wire-ds18b20-avec-le-raspberry-pi/|Le tutoriel de framboise314]], toujours en Français, extrêmement complet, avec notamment des explications sur le bus 1-wire, et le mode parasite, et qui complète très bien cet article ou je me suis davantage concentré sur le code que sur le principe électronique général du capteur. | ||