From c4f74c264adca9c425dd5a8e0d4a9d0f1c71b72c Mon Sep 17 00:00:00 2001
From: m24024310 <mohamed.menacer@etu.univ-amu.fr>
Date: Fri, 21 Mar 2025 15:16:18 +0100
Subject: [PATCH] dernier

---
 src/main.c | 45 ++++++++++++++++++++++++++++++++++++++++++---
 1 file changed, 42 insertions(+), 3 deletions(-)

diff --git a/src/main.c b/src/main.c
index 2af0668..b26e42c 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);
-- 
GitLab