From 71ed4c4bf979f4e0a7cf781c8df9e8fef98db7e4 Mon Sep 17 00:00:00 2001 From: adrien balleyguier Date: Sun, 26 Apr 2026 15:49:57 +0200 Subject: [PATCH] feat(nodes): adding thermometer and hygrometer Changed sensor value retrieval to return error_code --- nodes/prj.conf | 2 ++ nodes/src/ble_advertiser.c | 7 ++++++- nodes/src/ble_advertiser.h | 8 +++++++- nodes/src/co2_level.c | 4 ++-- nodes/src/co2_level.h | 2 +- nodes/src/error_code.h | 3 +++ nodes/src/hygrometer.c | 18 +++++++++++++++--- nodes/src/hygrometer.h | 6 +++++- nodes/src/supervisor.c | 11 ++++++----- nodes/src/thermometer.c | 18 +++++++++++++++--- nodes/src/thermometer.h | 6 +++++- nodes/src/window_status.c | 2 +- nodes/src/window_status.h | 2 +- 13 files changed, 69 insertions(+), 20 deletions(-) diff --git a/nodes/prj.conf b/nodes/prj.conf index 91c3c15..4210a15 100644 --- a/nodes/prj.conf +++ b/nodes/prj.conf @@ -1 +1,3 @@ CONFIG_GPIO=y +CONFIG_SENSOR=y +CONFIG_I2C=y diff --git a/nodes/src/ble_advertiser.c b/nodes/src/ble_advertiser.c index 5406e40..46b857e 100644 --- a/nodes/src/ble_advertiser.c +++ b/nodes/src/ble_advertiser.c @@ -4,6 +4,11 @@ enum error_code ble_init(){ return success; } -enum error_code ble_advertise(){ +enum error_code ble_advertise( + int co2_lvl_value_ptr, + int hygro_value_ptr, + int thermo_value_ptr, + enum window_status window_value_ptr +){ return success; } diff --git a/nodes/src/ble_advertiser.h b/nodes/src/ble_advertiser.h index 32f8d18..5b8c329 100644 --- a/nodes/src/ble_advertiser.h +++ b/nodes/src/ble_advertiser.h @@ -2,8 +2,14 @@ #define BLE_ADVERTISER_H #include "error_code.h" +#include "window_status.h" enum error_code ble_init(); -enum error_code ble_advertise(); +enum error_code ble_advertise( + int co2_lvl_value_ptr, + int hygro_value_ptr, + int thermo_value_ptr, + enum window_status window_value_ptr +); #endif //BLE_ADVERTISER_H diff --git a/nodes/src/co2_level.c b/nodes/src/co2_level.c index ca70455..a2beaf1 100644 --- a/nodes/src/co2_level.c +++ b/nodes/src/co2_level.c @@ -6,6 +6,6 @@ enum error_code co2_lvl_init(){ return success; } -int co2_lvl_get_value(){ - return 0; +enum error_code co2_lvl_get_value(int* holder){ + return success; } diff --git a/nodes/src/co2_level.h b/nodes/src/co2_level.h index b56c9d8..e2b73a2 100644 --- a/nodes/src/co2_level.h +++ b/nodes/src/co2_level.h @@ -6,6 +6,6 @@ extern const int CO2_LEVEL_EMPTY_ROOM; // [ppm] enum error_code co2_lvl_init(); -int co2_lvl_get_value(); +enum error_code co2_lvl_get_value(int* holder); #endif //CO2_LEVEL_H diff --git a/nodes/src/error_code.h b/nodes/src/error_code.h index ba43b4c..ea69fd1 100644 --- a/nodes/src/error_code.h +++ b/nodes/src/error_code.h @@ -1,9 +1,12 @@ #ifndef ERROR_CODE_H #define ERROR_CODE_H +#include + enum error_code{ success = 0, init_failed, + read_failed, error_unknown, error_code_last, // iteration purpose }; diff --git a/nodes/src/hygrometer.c b/nodes/src/hygrometer.c index eaef5f3..471ecfe 100644 --- a/nodes/src/hygrometer.c +++ b/nodes/src/hygrometer.c @@ -1,9 +1,21 @@ #include "hygrometer.h" +static const struct device* dev = DEVICE_DT_GET_ONE(st_hts221); + enum error_code hygro_init(){ - return success; + enum error_code ret = init_failed; + if(device_is_ready(dev)){ + ret = success; + }else{} + return ret; } -int hygro_get_value(){ - return 0; +enum error_code hygro_get_value(int* holder){ + enum error_code ret = read_failed; + struct sensor_value humidity; + if(sensor_channel_get(dev, SENSOR_CHAN_AMBIENT_TEMP, &humidity) >= 0){ + *holder = sensor_value_to_deci(&humidity); + ret = success; + }else{} + return ret; } diff --git a/nodes/src/hygrometer.h b/nodes/src/hygrometer.h index 433411c..199ed94 100644 --- a/nodes/src/hygrometer.h +++ b/nodes/src/hygrometer.h @@ -1,9 +1,13 @@ #ifndef HYGROMETER_H #define HYGROMETER_H +#include +#include +#include + #include "error_code.h" enum error_code hygro_init(); -int hygro_get_value(); +enum error_code hygro_get_value(int* holder); #endif //HYGROMETER_H diff --git a/nodes/src/supervisor.c b/nodes/src/supervisor.c index 34c08f9..1e6bfe0 100644 --- a/nodes/src/supervisor.c +++ b/nodes/src/supervisor.c @@ -28,15 +28,16 @@ enum error_code supervisor_run(){ int hygro_value = -1; int thermo_value = -1; enum window_status window_value = unknown; + enum error_code co2_lvl_status, hygro_status, thermo_status, window_status; int current_sleep_time = SLEEP_MIN_DURATION; while(1){ - co2_lvl_value = co2_lvl_get_value(); - hygro_value = hygro_get_value(); - thermo_value = thermo_get_value(); - window_value = window_get_value(); + co2_lvl_status = co2_lvl_get_value(&co2_lvl_value); + hygro_status = hygro_get_value(&hygro_value); + thermo_status = thermo_get_value(&thermo_value); + window_status = window_get_value(&window_value); // maybe change arguments order // todo : manage special values - ble_advertise(co2_lvl_value, hygro_value, thermo_value, window_value); + ble_advertise(co2_lvl_value, hygro_value, thermo_value, window_status); if((co2_lvl_value > CO2_LEVEL_EMPTY_ROOM) || (window_value == open)){ // there are people in the room, or someone forgot to close the window current_sleep_time = SLEEP_MIN_DURATION; diff --git a/nodes/src/thermometer.c b/nodes/src/thermometer.c index cb8e4de..623d55a 100644 --- a/nodes/src/thermometer.c +++ b/nodes/src/thermometer.c @@ -1,9 +1,21 @@ #include "thermometer.h" +static const struct device* dev = DEVICE_DT_GET_ONE(st_hts221); + enum error_code thermo_init(){ - return success; + enum error_code ret = init_failed; + if(device_is_ready(dev)){ + ret = success; + }else{} + return ret; } -int thermo_get_value(){ - return 0; +enum error_code thermo_get_value(int* holder){ + enum error_code ret = read_failed; + struct sensor_value temp; + if(sensor_channel_get(dev, SENSOR_CHAN_AMBIENT_TEMP, &temp) >= 0){ + *holder = sensor_value_to_deci(&temp); + ret = success; + }else{} + return ret; } diff --git a/nodes/src/thermometer.h b/nodes/src/thermometer.h index d0cb5f0..37db431 100644 --- a/nodes/src/thermometer.h +++ b/nodes/src/thermometer.h @@ -1,9 +1,13 @@ #ifndef THERMOMETER_H #define THERMOMETER_H +#include +#include +#include + #include "error_code.h" enum error_code thermo_init(); -int thermo_get_value(); +enum error_code thermo_get_value(int* holder); #endif //THERMOMETER_H diff --git a/nodes/src/window_status.c b/nodes/src/window_status.c index 5f5d3ef..27b2208 100644 --- a/nodes/src/window_status.c +++ b/nodes/src/window_status.c @@ -4,6 +4,6 @@ enum error_code window_init(){ return success; } -int window_get_value(){ +enum error_code window_get_value(enum window_status* holder){ return 0; } diff --git a/nodes/src/window_status.h b/nodes/src/window_status.h index 2e57d81..104e0c4 100644 --- a/nodes/src/window_status.h +++ b/nodes/src/window_status.h @@ -11,6 +11,6 @@ enum window_status{ }; enum error_code window_init(); -int window_get_value(); +enum error_code window_get_value(enum window_status* holder); #endif //WINDOW_STATUS_