Skip to content

Lire température d'un DS18B20

Description

Lecture de la température à l'aide d'un capteur DS18B20, capteur 1-wire ayant un précision de 0.0625°C.

Le montage

Sur plaque essai avec le Pi Pico vertical :

Ce montage est compatible/identique avec l'utilisation d'un capteur étanche

Sur plaque essai avec le Pi Pico vertical et module "prêt à câbler" :

La lib

Lib 1-wire

La lecture du DS18B20 en micropython nécessite de la lib' 1-wire suivante (officielle projet Micropython) :

https://github.com/micropython/micropython/blob/master/drivers/onewire/onewire.py

Ouvrir un Terminal dans le répertoire libs de votre répertoires de codes Micropython. Téléchargement en ligne de commande avec :

wget https://raw.githubusercontent.com/micropython/micropython/master/drivers/onewire/onewire.py

A copier coller sur la carte avec notre utilitaire selon :

./copy.sh /dev/ttyACM0 onewire.py

Lib 18x20

La lecture du DS18B20 en micropython nécessite de la lib' 1-wire suivante (officielle projet Micropython) :

https://github.com/micropython/micropython/blob/master/drivers/onewire/ds18x20.py

Ouvrir un Terminal dans le répertoire libs de votre répertoires de codes Micropython. Téléchargement en ligne de commande avec :

wget https://raw.githubusercontent.com/micropython/micropython/master/drivers/onewire/ds18x20.py

A copier coller sur la carte avec notre utilitaire selon :

./copy.sh /dev/ttyACM0 ds18x20.py

Code

Ce code assure la lecture simple du capteur à intervalle régulier via un Timer :

from machine import Pin, Timer

import onewire
import ds18x20

led=Pin(25,Pin.OUT) # la broche GP25 dispose d'une LED onboard

bus1wire=onewire.OneWire(Pin(18)) # declare bus1wire sur broche

adr=bus1wire.scan() # recupère coordonnees capteurs presents
#print(adr)

ds=ds18x20.DS18X20(bus1wire) # declare capteur

timer=Timer()

def loop(timer):
        #global led
        #led.toggle()
        roms=ds.scan() # lit le contenu du capteur
        ds.convert_temp()

        for rom in roms:
                print(ds.read_temp(rom))

# fin loop

timer.init(freq=1, callback=loop)

# d'apres http://www.esp32learning.com/micropython/esp32-and-ds18b20-sensor-and-micropython-example.php

Une variante du code précédent avec cette fois la mesure de délai de la lecture du capteur (on trouve 34ms pour la lecture de la température) :

from machine import Pin, Timer
import utime

import onewire
import ds18x20

led=Pin(25,Pin.OUT) # la broche GP25 dispose d'une LED onboard

bus1wire=onewire.OneWire(Pin(18)) # declare bus1wire sur broche

adr=bus1wire.scan() # recupère coordonnees capteurs presents
#print(adr)

ds=ds18x20.DS18X20(bus1wire) # declare capteur

timer=Timer()

def loop(timer):
        #global led
        #led.toggle()

        start=utime.ticks_us() # pour comptage delai mesure

        roms=ds.scan() # lit le contenu du capteur
        ds.convert_temp()

        for rom in roms:
                print(ds.read_temp(rom))

        print(utime.ticks_diff(utime.ticks_us(),start)/1e3) # delai mesure en ms

# fin loop

timer.init(freq=1, callback=loop)

Liens utiles :