Outils pour utilisateurs

Outils du site


jardin_bmp280_script

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
Prochaine révision
Révision précédente
jardin_bmp280_script [2025/06/27 11:44] adminjardin_bmp280_script [2025/06/27 12:27] (Version actuelle) admin
Ligne 1: Ligne 1:
 +Dans cette partie, nous allons modifier nos scripts existants pour tester la sonde bmp280 aussi bien dans le **terminal** que sur le **serveur web (flask)**.
 +
 ====== Modification du script meteo_dht22.py ====== ====== Modification du script meteo_dht22.py ======
  
Ligne 24: Ligne 26:
 BLUE = "\033[94m" BLUE = "\033[94m"
 MAGENTA = "\033[95m" MAGENTA = "\033[95m"
 +CYAN = "\033[96m"
 RESET = "\033[0m" RESET = "\033[0m"
  
Ligne 56: Ligne 59:
         print(f"{RED}Point de rosée:{RESET} {round(point_de_rosee, 1)}°C")         print(f"{RED}Point de rosée:{RESET} {round(point_de_rosee, 1)}°C")
         print(f"{MAGENTA}Humidex:{RESET} {round(humidex, 1)}")         print(f"{MAGENTA}Humidex:{RESET} {round(humidex, 1)}")
-        print(f"{BLUE}Pression atmosphérique:{RESET} {round(pression, 2)}")+        print(f"{CYAN}Pression atmosphérique:{RESET} {round(pression, 2)} hPa")
         print("----")         print("----")
     else:     else:
Ligne 63: Ligne 66:
     #Pause de 20 secondes     #Pause de 20 secondes
     time.sleep(20)     time.sleep(20)
 +</code>
 +
 +====== Modification du script capteur.py ======
 +
 +<code>
 +#importations
 +import adafruit_dht
 +import adafruit_bmp280
 +import board
 +import busio #Biblithèque permettant d'ouvrir une communication sur un bus matériel
 +import math
 +from datetime import datetime
 +
 +#Initialisation du bus I2C
 +i2c = busio.I2C(board.SCL, board.SDA)
 +
 +#Initialisation de la sonde
 +bmp280 = adafruit_bmp280.Adafruit_BMP280_I2C(i2c, address=0x76)
 +
 +def lire_donnees_capteur():
 +    try:
 +        dhtDevice = adafruit_dht.DHT22(board.D4)
 +        humidity = dhtDevice.humidity
 +        temperature = dhtDevice.temperature
 +        dhtDevice.exit()
 +        if humidity is not None and temperature is not None:
 +            return round(humidity, 1), round(temperature, 1)
 +        else:
 +            return None, None
 +
 +    except RuntimeError as error:
 +        print("Erreur de lecture :", error)
 +        return None, None
 +
 +    except Exception as error:
 +        dhtDevice.exit() #Libérer le GPIO même en cas de crash
 +        raise error #Le programme crashe, car c'est une erreur critique
 +
 +def calculer_point_de_rosee(temperature, humidity):
 +    #Formule pour calculer le point de rosée
 +    alpha = 17.27
 +    beta = 237.7
 +    gamma = (alpha * temperature) / (beta + temperature) + math.log(humidity / 100)
 +    point_de_rosee = (beta * gamma) / (alpha - gamma)
 +    return round(point_de_rosee, 1)
 +
 +def calculer_humidex(temperature, point_de_rosee):
 +    #Formule pour calculer l'indice humidex
 +    humidex = temperature + (5/9) * (6.11 * math.exp(5417.7530 * ((1/273.16) - (1/273.15 + point_de_rosee))) - 10)
 +    return round(humidex, 1)
 +
 +def lire_pression():
 +    try:
 +        pression = bmp280.pressure
 +        return round(pression, 1)
 +    except Exception as error:
 +        print("Erreur de lecture BMP280 :", error)
 +        return None
 +
 +def recuperer_date_heure():
 +    return datetime.now().strftime("%d-%m-%Y %H:%M:%S")
 +</code>
 +
 +====== Modification du script app.py ======
 +
 +<code>
 +#importations
 +from flask import Flask, render_template_string
 +from capteur import (
 +    lire_donnees_capteur,
 +    calculer_point_de_rosee,
 +    calculer_humidex,
 +    recuperer_date_heure,
 +    lire_pression
 +)
 +
 +# Définition de l'application Flask
 +app = Flask(__name__)
 +
 +@app.route('/')
 +def index():
 +    humidity, temperature = lire_donnees_capteur()
 +    if humidity is not None and temperature is not None:
 +        point_de_rosee = calculer_point_de_rosee(temperature, humidity)
 +        humidex = calculer_humidex(temperature, point_de_rosee)
 +        date_heure = recuperer_date_heure()
 +        pression = lire_pression()
 +
 +        html = f"""
 +        <h1>Données météo locales</h1>
 +        <ul>
 +            <li>Date et heure : {date_heure}</li>
 +            <li>Température : {temperature} °C</li>
 +            <li>Humidité : {humidity} %</li>
 +            <li>Point de rosée : {point_de_rosee} °C</li>
 +            <li>Humidex : {humidex}</li>
 +            <li>Pression atmosphérique : {pression} hPa</li>
 +        </ul>
 +        """
 +    else:
 +        html = "<p>Erreur de lecture du capteur.</p>"
 +
 +    return render_template_string(html)
 +
 +if __name__ == '__main__':
 +    app.run(host='0.0.0.0', port=5000, debug=True)
 </code> </code>
jardin_bmp280_script.1751024675.txt.gz · Dernière modification : de admin