Communication 1 wire
Liste des composants 1 wire
Branchement du DS18B20, sonde de température 1 fils, avec uniquement une résistance de 4,7kΩ en parallèle entre Data et Vcc.
Désignation des fils :
- Vcc : en rouge entre 3V et 5,5V
- GND : en noir
- Data : en bleu ou jaune
En effet, il suffit de charger les modules 1-wire nécessaires pour voir apparaitre un nouveau périphérique dans le répertoire
/sys/bus/w1/devices :
modprobe w1-gpio modprobe w1-thermavec
ls -l /sys/bus/w1/devices/ total 0 lrwxrwxrwx 1 root root 0 Dec 3 21:02 28-04146b20f8ff -> ../../../devices/w1_bus_master1/28-04146b20f8ff lrwxrwxrwx 1 root root 0 Dec 3 20:59 w1_bus_master1 -> ../../../devices/w1_bus_master1
28-04146b20f8ff est le numéro de composant unique
Si vous lisez le contenu de ce nouveau périphérique, vous devriez obtenir quelque chose de ce type :
cat /sys/bus/w1/devices/w1_bus_master1/28-04146b20f8ff/w1_slave 7a 01 4b 46 7f ff 06 10 0b : crc=0b YES 7a 01 4b 46 7f ff 06 10 0b t=23625
La température est directement affichée en degré Celsius t=23625, il faut tout de même diviser cette valeur par 1000.
Voici donc un petit script ds18b20.py dont le rôle est de lire le contenu de ce fichier et d’en extraire la température. Dans tous les cas, on ne peut qu’espérer une précision à 0,5°C.
Pour le branchement de plusieurs composant, n'oubliez pas qu'ils ont une adresse différente (unique).
Programme:
#!/usr/bin/python import os, glob, time, datetime os.system('modprobe w1-gpio') os.system('modprobe w1-therm') device_file='/sys/bus/w1/devices/28-000005305b19/w1_slave' # lit le contenu du peripherique et extrait la temperature puis la divise par 1000 def read_temp(): f = open(device_file, 'r') lines = f.readlines() f.close() temp_string = lines[1].strip()[-5:] temp_c = float(temp_string)/1000.0 return temp_c # boucle principale qui affiche la température toutes les 5 secondes while True: try: tC = read_temp() print(tC) time.sleep(5) except KeyboardInterrupt: quit()