Python et Raspberry PI - 15/07/2023

Informations :

  • Orateurs : 1
  • Nombre de participants : 4

Compte-rendu :

Au cours de cette séance, nous avons créé des graphiques pour tracer la température lue sur le capteur DS18B20 que nous avions déjà utilisé au cours d'une séance précédente.
La librairie utilisée pour construire des graphiques est : matplotlib. Cette librairie doit s'installer : en effet, elle n'est pas disponible dans les librairies standards de Python.

Les étapes sont les suivantes :

  • Installation de la librairie, avec la commande : pip install matplotlib
  • Création du programme

Le programme va exécuter les opérations suivantes :

  • Création d'une figure qui contiendra le graphique.
  • Création du graphique qui contiendra la courbe.
  • Création des axes X (temps) et Y (valeurs de températures).
  • Création du capteur pour lire la température.
  • Codage d'une fonction qui sera appelée régulièrement :
    • Lecture de la température depuis le capteur.
    • Ajout des données "temps" et "température" aux axes X et Y.
    • Limitation du nombre de données à afficher à 20 points.
    • Efface le graphique actuel.
    • Trace les nouvelles valeurs enregistrées dans les tableaux des axes.
    • Formatage du graphique : inclinaison des légendes, mise en place des titres.
  • Réglage de la fonction qui sera appelée régulièrement (toutes les secondes).
  • Affichage de la figure.

Le fait de limiter le nombre de points à 20, permet de voir les 20 dernières mesures de température, au fur et à mesure de l'exécution du programme, la courbe est mise à jour : le graphique est dynamique.

Le code source est le suivant :


# Librairie de fonctions de gestion de temps
import time
# Librairie de fonctions pour la date
from datetime import datetime
# Librairie de fonctions pour l'affichage des graphiques
from matplotlib import pyplot
# Librairie de fonctions pour l'animation des graphiques
from matplotlib import animation
# Librairie de fonctions de gestion du capteur DS18B20
from w1thermsensor import W1ThermSensor


# Création de la figure qui va contenir le graphique
fig = pyplot.figure()

# Création du graphique
graph = fig.add_subplot(1, 1, 1)

# Création des axes X et Y : tableau de valeurs
axe_x = []
axe_y = []

# Création du capteur (branché sur la PIN GPIO 4)
sensor = W1ThermSensor()

# Cette fonction sera appelée périodiquement
def animate(i, axe_x, axe_y):
    # Récupération de la température
    # depuis le capteur
    temperature = sensor.get_temperature()

    # Affichage de la température
    print(temperature)

    # Ajout des données aux axes X et Y
    axe_x.append(datetime.now().strftime('%H:%M:%S.%f'))
    axe_y.append(temperature)

    # Limite les axes X et Y à 20 éléments
    axe_x = axe_x[-20:]
    axe_y = axe_y[-20:]

    # Efface le graphique actuel
    graph.clear()
    # Trace les données
    graph.plot(axe_x, axe_y)

    # Formate le graphique
    pyplot.xticks(rotation=45, ha='right')
    pyplot.subplots_adjust(bottom=0.30)
    pyplot.title('Temperature')
    pyplot.ylabel('Temperature (deg C)')

# Réglage de la fonction qui sera appelée régulièrement
ani = animation.FuncAnimation(
    fig,
    animate,
    fargs=(axe_x, axe_y),
    interval=1000)

# On affiche la figure
pyplot.show()
                    

Le capteur est branché sur la PIN GPIO 4 du Raspberry PI avec une résistance de 5K, comme indiqué dans le compte-rendu de la séance du 01/07/2023.

Prochaines séances :

  • 23/07/2023 (10H00..12H00) : Vacances !
  • 23/07/2023 (18H00..20H00) : Vacances !