Accueil > MICROPYTHON > MicroPython : capteur DS18B20 (sur esp8266 & esp32)

MicroPython : capteur DS18B20 (sur esp8266 & esp32)

vendredi 24 avril 2020, par thebault

Caractéristiques du capteur

- capteur de température de -10°C à +85°C avec une précision de +/-0,5°C
- capteur avec sortie numérique. La température est codée sur 9 à 12 bit (codage à virgule fixe avec 1 à 4 bits après la virgule). Le programme ci-dessous se limite à un codage sur 12 bit
- communication sur une seule broche via le protocole 1-wire (onewire) https://fr.wikipedia.org/wiki/1-Wire
- chaque capteur/périphérique sur le bus 1-wire est reconnu grâce à un numéro de série sur 64 bit gravé dans une ROM
- alimentation de 3V à 5,5V


Branchements

Remarque ESP8266 : les numéros de broches indiqués sur les cartes ne correspondent pas à la numérotation GPIO (General Purpose Input Ouptut).
Voir https://randomnerdtutorials.com/esp8266-pinout-reference-gpios/
Dans les schémas suivants, la broche DATA du capteur est branchée sur la broche GPIO 14 de la carte de développement ESP8266.

JPEG - 881.2 ko
Schémas avec capteur DS18B20 monté sur plaque d’essai
JPEG - 648.7 ko
Schéma avec capteur DS18B20 + résistance de 4.7K sur circuit imprimé

Programme

Lien vers la documentation concernant la bibliothèque onewire : https://docs.micropython.org/en/latest/esp8266/tutorial/onewire.html

Le protocole 1-wire permet de brancher plusieurs capteurs sur le bus. Le programme suivant se limite au fonctionnement avec un seul capteur.

  1. from machine import Pin
  2. import onewire
  3. import ds18x20
  4. import time
  5.  
  6. ow = onewire.OneWire(Pin(14))
  7. sensor = ds18x20.DS18X20(ow)
  8. roms = sensor.scan()
  9. print('Numéro de série ROM : ',end='')
  10. for el in roms[0]:
  11. print('{:02X}'.format(el),end='')
  12. print()
  13. while True :
  14. sensor.convert_temp()
  15. time.sleep(1)
  16. print(sensor.read_temp(roms[0]))

Télécharger

Explications.
Dans un premier temps, il faut importer les bibliothèques :
- machine et la classe Pin : pour configurer les broches
- onewire : driver du bus au protocole 1-wire
- ds18x20 : driver spécifique au capteur ds18B20
- time : pour attendre la fin de la mesure du capteur

  1. from machine import Pin
  2. import onewire
  3. import ds18x20
  4. import time

Télécharger

On configure un bus de type 1-wire sur la broche 14. On crée un objet sensor de type ds18x20 afin de mettre en place le driver pour ce type de capteur.

  1. ow = onewire.OneWire(Pin(14))
  2. sensor = ds18x20.DS18X20(ow)

Télécharger

La méthode sensor.scan() permet de récupérer une liste (variable roms) de tableaux d’octets (donc du binaire) (type bytearray) correspondants aux numéros de série des capteurs. Chaque élément de la liste correspond au numéro de série d’un des capteurs branchés (si il y en a plusieurs).

  1. roms = sensor.scan()

Comme il n’y a qu’un seul capteur dans cet exemple, on ne va prendre que le premier élément roms[0] afin de le décoder.
Ces lignes de code ne sont pas nécessaires au bon fonctionnement mais permettent de récupérer et afficher le numéro de série du capteur.
Pour chaque octet du tableau , on affiche la valeur en hexadécimal grâce à la méthode string .format() (https://docs.python.org/3/library/string.html#format-string-syntax)

0  : 0 2 X
la première variable transmise à format, soit byte ce n’est pas un formatage par défaut (les options suivent) L’affichage est complèté par des "0" (si par exemple un octet vaut 3, on affiche 03) On affiche la valeur sur 2 caractères L’octet est affiché en hexadécimal (et en majuscule)
  1. print('Numéro de série ROM : ',end='')
  2. for byte in roms[0]:
  3. print('{0:02X}'.format(byte),end='')
  4. print()

Télécharger

On entre dans la boucle infinie.
Déclenchement de la mesure de température et conversion en binaire

  1. sensor.convert_temp()

La conversion sur 12 bit prends un temps minimum de 750ms. Le programme attend 1 seconde

  1. time.sleep(1)

Le programme lit la température du premier capteur (définis par son numéro de série dans la rom) et l’affiche

  1. temp = sensor.read_temp(roms[0])
  2. print(temp))

Télécharger


Résultat

Après exécution du programme, on obtient l’affichage suivant. Pour faire apparaître le traceur de courbes intégré à Thonny, il faut le sélectionner avec "Affichage -> Grapheur"

PNG - 32.9 ko
SPIP | | Plan du site | Suivre la vie du site RSS 2.0
Habillage visuel © digitalnature sous Licence GPL