diff --git a/src/main.c b/src/main.c index 2af066814134f4e6644e659c9b4d926442d53a78..b26e42cff85731e758855f93874f3fb99d5c61dc 100644 --- a/src/main.c +++ b/src/main.c @@ -211,6 +211,37 @@ static int update_bme280_data(const struct device *dev) { return 0; } + +static int update_pm_data(const struct device *dev) { + struct sensor_value pm25, pm10; + int ret; + ret = sensor_sample_fetch(dev); + if (ret < 0) { + LOG_ERR("Erreur lors de la récupération des données du PM : %d", ret); + return ret; + } + + ret = sensor_channel_get(dev, SENSOR_CHAN_PM_2_5, &pm25); + if (ret < 0) { + LOG_ERR("Erreur lors de la récupération de pm25 : %d", ret); + return ret; + } + ret = sensor_channel_get(dev, SENSOR_CHAN_PM_10, &pm10); + if (ret < 0) { + LOG_ERR("Erreur lors de la récupération de pm10 : %d", ret); + return ret; + } + + // val1 is integer part, val2 is in 1/1000000 + LOG_INF("pm25 est : %d ", pm25.val1); + data.pm25 = pm25.val1; + + LOG_INF("pm10 est : %d", pm10.val1); + data.pm10 = pm10.val1; + + return 0; +} + /* Fonction d'envoi des données avec réessais */ static int send_data_with_retry(uint8_t *payload, size_t size) { int ret, retry_count = 0; @@ -255,9 +286,10 @@ K_SEM_DEFINE(sensor_data_sem, 0, 1); /* Thread dédié à la lecture des capteurs (BME280 et ADC) */ void sensor_thread(void *arg1, void *arg2, void *arg3) { int adc_value; - int ret; + int ret, ret1; double tension_batterie, capacite_restante; const struct device *bme_dev = DEVICE_DT_GET_ANY(bosch_bme280); + const struct device *pm_dev = DEVICE_DT_GET_ANY(pm); if (!device_is_ready(bme_dev)) { LOG_ERR("Capteur BME280 non disponible"); return; @@ -279,11 +311,18 @@ void sensor_thread(void *arg1, void *arg2, void *arg3) { data.battery = (uint8_t)capacite_restante; LOG_INF("Tension de la batterie : %0.2f V, Capacité restante : %0.2f%%", tension_batterie, capacite_restante); } - /* Mise à jour des données du capteur BME280 */ - ret = update_bme280_data(bme_dev); + /* Mise à jour des données du capteur BME280 et PM */ + ret = update_bme280_data(bme_dev); + ret1 = update_pm_data(pm_dev); + if (ret < 0) { LOG_ERR("Erreur de récupération des données BME280."); } + + if (ret1 < 0) { + LOG_ERR("Erreur de récupération des données pm."); + } + /* Signaler au thread LoRa que de nouvelles données sont disponibles */ k_sem_give(&sensor_data_sem); k_sleep(DELAY);