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)