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

Prochaine révision
Révision précédente
jardin_bmp280_script [2025/06/26 14:54] – créée adminjardin_bmp280_script [2025/06/27 12:27] (Version actuelle) admin
Ligne 1: Ligne 1:
-====== Présentation de la sonde BMP280 ======+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)**.
  
-Le **BMP280** est un petit capteur environnemental, capable de mesurer :+====== Modification du script meteo_dht22.py ======
  
-  * La **pression atmosphérique** (en hPa) +<code> 
-  * La **température de l'air** (en °C)+#Importation 
 +import adafruit_dht 
 +import adafruit_bmp280 
 +import board 
 +import busio 
 +import time 
 +import math 
 +from datetime import datetime
  
-C’est un capteur léger, peu gourmand en énergie et parfaitement adapté aux stations météo autonomes.+#Déclaration du capteur 
 +dhtDevice = adafruit_dht.DHT22(board.D4)
  
-===== Câblage du BMP280 sur le Raspberry Pi =====+i2c busio.I2C(board.SCL, board.SDA)
  
-Le BMP280 communique avec le Raspberry Pi via le protocole **I2C**qui utilise **2 fils de données**, plus l'alimentation et la masse.+bmp280 = adafruit_bmp280.Adafruit_BMP280_I2C(i2caddress=0x76)
  
-| Broche BMP280   | Broche Raspberry Pi    | Rôle            |  +#Couleurs 
-|                                        |                 | +RED = "\033[91m" 
-| VCC             | Broche 17 (3.3V)       | Alimentation    | +GREEN = "\033[92m" 
-| GND             | Broche 9 (GND)         | Masse           | +YELLOW = "\033[93m" 
-| SCL             | Broche 5 (GPIO3)       | Horloge (Clock) | +BLUE = "\033[94m" 
-| SDA             | Broche 3 (GPIO2)       | Données (Data)  |+MAGENTA = "\033[95m" 
 +CYAN = "\033[96m" 
 +RESET = "\033[0m"
  
-===== Activation du protocole I2C sur Raspberry Pi =====+#Calcul du point de rosée 
 +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.0) 
 +    point_de_rosee (beta * gamma) / (alpha - gamma) 
 +    return point_de_rosee
  
-Le protocole I2C est désactivé par défaut sur Raspberry Pi OS. Il faut l’activer manuellement.+#Calcul de l'humidex 
 +def calculer_humidex(temperature, point_de_rosee): 
 +    # Formule pour calculer l'humidex 
 +    humidex = temperature + (5/9) * (6.11 * math.exp(5417.7530 * ((1/273.16) - (1/273.15 + point_de_rosee))) - 10) 
 +    return humidex
  
-**Ouvrir la configuration du Raspberry Pi :**+#Boucle et affichage 
 +while True: 
 +    humidity = dhtDevice.humidity 
 +    temperature = dhtDevice.temperature 
 +    pression = bmp280.pressure 
 +    if humidity is not None and temperature is not None: 
 +        now = datetime.now() 
 +        date_heure = now.strftime("%d-%m-%Y %H:%M:%S"
 +        point_de_rosee = calculer_point_de_rosee(temperature, humidity) 
 +        humidex = calculer_humidex(temperature, point_de_rosee) 
 +        print(f"{BLUE}Date et heure:{RESET} {date_heure}"
 +        print(f"{GREEN}Température:{RESET} {round(temperature, 1)}°C"
 +        print(f"{YELLOW}Humidité:{RESET} {round(humidity, 1)}%"
 +        print(f"{RED}Point de rosée:{RESET} {round(point_de_rosee, 1)}°C"
 +        print(f"{MAGENTA}Humidex:{RESET} {round(humidex, 1)}"
 +        print(f"{CYAN}Pression atmosphérique:{RESET} {round(pression, 2)} hPa"
 +        print("----"
 +    else: 
 +        print("Échec de la lecture du capteur")
  
-<code> +    #Pause de 20 secondes 
-sudo raspi-config+    time.sleep(20)
 </code> </code>
  
-{{ :raspberry:raspi-config.png?900 |}} +====== Modification du script capteur.py ======
- +
-**Aller dans le menu :**+
  
 <code> <code>
-3 Interface Options +#importations 
-I2C → Enable +import adafruit_dht 
-</code>+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
  
-{{ :raspberry:interface_option.png?900 |}}+#Initialisation du bus I2C 
 +i2c = busio.I2C(board.SCL, board.SDA)
  
-**Redémarrer le Raspberry Pi :** +#Initialisation de la sonde 
-<code> +bmp280 = adafruit_bmp280.Adafruit_BMP280_I2C(i2c, address=0x76)
-sudo reboot +
-</code>+
  
-===== Vérification de la détection du BMP280 =====+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
  
-Installer les **outils I2C** :+    except RuntimeError as error: 
 +        print("Erreur de lecture :", error) 
 +        return None, None
  
-<code> +    except Exception as error: 
-sudo apt install i2c-tools +        dhtDevice.exit() #Libérer le GPIO même en cas de crash 
-</code>+        raise error #Le programme crashe, car c'est une erreur critique
  
-**Scanner le bus I2C** pour vérifier que le capteur est bien détecté :+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)
  
-<code> +def calculer_humidex(temperature, point_de_rosee): 
-i2cdetect -1 +    #Formule pour calculer l'indice humidex 
-</code>+    humidex = temperature + (5/9) * (6.11 * math.exp(5417.7530 * ((1/273.16) (1/273.15 + point_de_rosee))) - 10) 
 +    return round(humidex, 1)
  
-Exemple de retour :+def lire_pression(): 
 +    try: 
 +        pression = bmp280.pressure 
 +        return round(pression, 1) 
 +    except Exception as error: 
 +        print("Erreur de lecture BMP280 :", error) 
 +        return None
  
-{{ :raspberry:scan_i2c.png?600 |}}                       +def recuperer_date_heure(): 
 +    return datetime.now().strftime("%d-%m-%Y %H:%M:%S"
 +</code>
  
-👉 Ici, on voit bien 76, ce qui indique que le BMP280 est bien détecté.+====== Modification du script app.py ======
  
-===== Test de la sonde en mode interactif =====+<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 
 +)
  
-Dans votre **environnement virtuel Python**, commencer par installer la **bibliothèque pour la sonde BMP280** :+# Définition de l'application Flask 
 +app = Flask(__name__)
  
-<code> +@app.route('/') 
-pip3 install adafruit-circuitpython-bmp280 +def index(): 
-</code>+    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()
  
-Test en mode interactif +        html = f""" 
-<code+        <h1>Données météo locales</h1> 
-import board +        <ul> 
-import busio +            <li>Date et heure {date_heure}</li> 
-import adafruit_bmp280+            <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>"
  
-i2c = busio.I2C(board.SCL, board.SDA) +    return render_template_string(html)
-bm280 = adafruit_bmp280.Adafruit_BMP280_I2C(i2c, address=0x76)+
  
-print(bme280.pressure) +if __name__ == '__main__': 
-print(bme280.temperature)+    app.run(host='0.0.0.0', port=5000, debug=True)
 </code> </code>
- 
-Si le scan de votre bus i2c à donné 77 comme résultat, remplacer //address=0x76// par //address=0x77// 
- 
----- 
- 
-Suite vers [[jardin_bmp280_script|Ajout de la sonde BMP280 à nos scripts]] 
jardin_bmp280_script.1750949694.txt.gz · Dernière modification : de admin