Menu Fermer

Raspberry Pi – DS18B20 et Flask (Python)

Le Dallas DS18B20 est un capteur de température digital qui utilise le protocole 1-wire. C’est décrit dans le chapitre 18 de mon livre Programmer en Java pour le Raspberry Pi (RPi).

Flask , un environnement de développement Web sous Python, est décrit dans mon article Python Flask et SQLite pour le Raspberry Pi 3 ou 4 – exemples de communication avec des ESP32 ou ESP8266.

Au chapitre 18, nous expliquons comment activer les modules du kernel du RPi afin de recevoir, dans un sous répertoire /sys/bus/w1/devices, la valeur de la température contenue dans un fichier nommé w1_slave. Une classe Java DS18x20read va extraire cette température d’une manière conventionnelle et évidemment sans ressource GPIO.

Le principe du livre est que pour chaque composant GPIO qui va utiliser la librairie Pi4J, nous montrons un exemple en Python afin de tester le circuit. Donc ici, pour le DS18B20, il n’y a pas d’exemple en Python pour montrer l’accès à cette température, pratiqué d’une manière traditionnelle en Java.

C’est donc le but de cet article, avec un petit exemple en Python sous Flask:

Fichier latemperature.py:


from flask import Flask, render_template
app = Flask(__name__)
 
@app.route("/latemperature")
def latemperature():
   latemperature = 0.000
   f = open('/sys/bus/w1/devices/28-021318ab83aa/w1_slave', 'r')
   lines = f.readlines()
   f.close()
   equals_pos = lines[1].find('t=')
   if equals_pos != -1:
     temp_string = lines[1][equals_pos+2:]
     print temp_string
     latemperature = float(temp_string) / 1000.0
 
   templateData = {
      'title' : 'Notre temperature',
      'relaystate': latemperature
      }
   return render_template('latemperature.html', **templateData)
 
if __name__ == "__main__":
   app.run(host='0.0.0.0', port=80, debug=True)

Et son template Flask latemperature.html dans le sous-répertoire templates où a été déposé le fichier Python précédent:

<!DOCTYPE html>
   <head>
      <title>{{ title }}</title>
   </head>
 
   <body>
      <h3>La temp&eacute;rature: {{ relaystate }}</h3>
   </body>

Pour comprendre les détails de ce code, il faudra évidemment se référer au chapitre 18 du livre et à l’article sur Flask. Le code Python pourrait évidemment être amélioré afin d’automatiser la recherche du répertoire /sys/bus/w1/devices où se trouve effectivement le fichier w1_slave, ici dans le sous-répertoire 28-021318ab83aa , qui est généré lors de l’installation du capteur DS18B20 sur le port GPIO du RPi (la broche physique 7 est la broche par défaut des données venant du DS18B20 … il y a évidemment une foule de petits détails impossible à décrire dans un si petit article).