// capteur pression atmospherique temperature altitude BMP280 + AHT20 (temperature et humidite)

// carte ESP32C3 Dev Module

#include <Wire.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_AHTX0.h>
#include <Adafruit_BMP280.h>

Adafruit_AHTX0 aht;    // Creation de l'objet pour AHT20
Adafruit_BMP280 bmp;   // Creation de l'objet pour BMP280

// Pression au niveau de la mer (valeur standard : 1013.25 hPa)
const float seaLevelPressure = 1013.25;

void setup() {
  Serial.begin(115200);
  Wire.begin();  // Initialisation du bus I2C

  // Initialisation du capteur AHT20
  if (!aht.begin()) {
    Serial.println("Erreur de communication avec AHT20 !");
    while (1);  // Boucle infinie en cas d'erreur
  }
  
  // Initialisation du capteur BMP280
  if (!bmp.begin()) {
    Serial.println("Erreur de communication avec BMP280 !");
    while (1);  // Boucle infinie en cas d'erreur
  }

  Serial.println("Capteurs initialises avec succes !");
}

void loop() {
  // Lire la temperature et l'humidite de l'AHT20
  sensors_event_t humidity, temp;
  aht.getEvent(&humidity, &temp);  // Methode qui remplit temp et humidity avec les valeurs

  float temperatureAHT = temp.temperature;  // Temperature en oC
  float humidityAHT = humidity.relative_humidity;  // Humidite en %

  // Lire la temperature et la pression du BMP280
  float temperatureBMP = bmp.readTemperature();  // Temperature en oC
  float pressureBMP = bmp.readPressure() / 100.0F;  // Pression en hPa (ou mbar)

  // Calculer l'altitude en metres a partir de la pression
  float altitude = bmp.readAltitude(seaLevelPressure);  // Altitude en metres

  // Affichage des resultats sur le moniteur serie
  Serial.print("AHT20 - Temperature: ");
  Serial.print(temperatureAHT);
  Serial.print("oC, Humidite: ");
  Serial.print(humidityAHT);
  Serial.println("%");

  Serial.print("BMP280 - Temperature: ");
  Serial.print(temperatureBMP);
  Serial.print("oC, Pression: ");
  Serial.print(pressureBMP);
  Serial.print(" hPa, Altitude: ");
  Serial.print(altitude);
  Serial.println(" m");

  delay(2000);  // Attente de 2 secondes avant la prochaine lecture
}