diff --git a/components/ledController/include/ledController.h b/components/ledController/include/ledController.h index 2738638..2fec394 100644 --- a/components/ledController/include/ledController.h +++ b/components/ledController/include/ledController.h @@ -1,6 +1,8 @@ #ifndef LED_CONT_H #define LED_CONT_H +#include "esp_err.h" + struct led_disp_config { uint8_t output; uint16_t min; diff --git a/default_conf.csv b/default_conf.csv new file mode 100644 index 0000000..9f39c78 --- /dev/null +++ b/default_conf.csv @@ -0,0 +1,8 @@ +# Default nvs configuration +key,type,encoding,value +main,namespace,, +wireless_conf,data,binary,00000001 +sensor_conf,data,binary,00000000 +led1_conf,data,hex2bin,0400DC051027640001FF +led2_conf,data,hex2bin,0500BC02DB05640001FF +led3_conf,data,hex2bin,06000000BB02640001FF diff --git a/main/CO2_Sense.c b/main/CO2_Sense.c index 7923250..b630d79 100644 --- a/main/CO2_Sense.c +++ b/main/CO2_Sense.c @@ -1,3 +1,4 @@ +#include "CO2_Sense.h" #include #include "freertos/FreeRTOS.h" #include "freertos/task.h" @@ -18,54 +19,23 @@ #include "sensirion_i2c_hal.h" #include "scd4x_data.h" -void fetch_sensor_task(void* pvParameters){ - scd4x_config_t* conf = (scd4x_config_t*) pvParameters; - scd4x_data_t* measures = conf->measure; - while(1){ - vTaskDelay(conf->delay * 1000 / portTICK_PERIOD_MS); - int16_t error = scd4x_read_measurement(&measures->co2, &measures->temperature, &measures->humidity); - if (error) - ESP_LOGE("sensor fetch", "Error executing scd4x_read_measurement(): %i\n", error); - } -} +#define LED1_PIN CONFIG_LED_1_PIN +#define LED2_PIN CONFIG_LED_2_PIN +#define LED3_PIN CONFIG_LED_3_PIN + +#define LED_NUMBER 3 + void app_main(void){ - // init LEDs driver - led_disp_config_t led_configs[] = { - [0] = { - .output = 4, - .min = 1500, - .max = 10000, - .intensity = 100, - .blink_duty_cycle = 1, - .blink_delay = 255, - }, - [1] = { - .output = 5, - .min = 700, - .max = 1499, - .intensity = 100, - .blink_duty_cycle = 1, - .blink_delay = 255, - }, - [2] = { - .output = 6, - .min = 0, - .max = 699, - .intensity = 100, - .blink_duty_cycle = 1, - .blink_delay = 255, - }, - }; - - init_led_driver(led_configs, sizeof(led_configs)/sizeof(led_disp_config_t)); + init_nvs(); + + nvs_handle_t nvs_handle; + ESP_ERROR_CHECK(nvs_open("main", NVS_READWRITE, &nvs_handle)); + // init LEDs driver + led_disp_config_t* led_configs = generate_led_conf(nvs_handle,LED_NUMBER); + init_led_driver(led_configs, LED_NUMBER); + // init wifi AP (and nvs) - esp_err_t ret = nvs_flash_init(); - if (ret == ESP_ERR_NVS_NO_FREE_PAGES || ret == ESP_ERR_NVS_NEW_VERSION_FOUND) { - ESP_ERROR_CHECK(nvs_flash_erase()); - ret = nvs_flash_init(); - } - ESP_ERROR_CHECK(ret); wifi_config_t wifi_config = wifi_config_generator("CO2Sense","testtest",1); wifi_init_softap(wifi_config); @@ -127,6 +97,38 @@ void app_main(void){ while(1){ vTaskDelay(1000 / portTICK_PERIOD_MS); ESP_LOGI("MAIN", "co2 : %u ppm, temp : %d m°C, hum : %d mRH", sensor_data.co2, sensor_data.temperature, sensor_data.humidity); - update_led_status(led_configs, sizeof(led_configs)/sizeof(led_disp_config_t), sensor_data.co2); + update_led_status(led_configs, LED_NUMBER, sensor_data.co2); } } + +void fetch_sensor_task(void* pvParameters){ + scd4x_config_t* conf = (scd4x_config_t*) pvParameters; + scd4x_data_t* measures = conf->measure; + while(1){ + vTaskDelay(conf->delay * 1000 / portTICK_PERIOD_MS); + int16_t error = scd4x_read_measurement(&measures->co2, &measures->temperature, &measures->humidity); + if (error) + ESP_LOGE("sensor fetch", "Error executing scd4x_read_measurement(): %i\n", error); + } +} + +void init_nvs(void){ + esp_err_t ret = nvs_flash_init(); + if (ret == ESP_ERR_NVS_NO_FREE_PAGES || ret == ESP_ERR_NVS_NEW_VERSION_FOUND) { + ESP_ERROR_CHECK(nvs_flash_erase()); + ret = nvs_flash_init(); + } + ESP_ERROR_CHECK(ret); + +} + +led_disp_config_t* generate_led_conf(nvs_handle_t nvs, unsigned int nb){ + led_disp_config_t* led_configs = malloc(nb * sizeof(led_disp_config_t)); + size_t conf_size = sizeof(led_disp_config_t); + for(int i = 0; i < nb; i++){ + char key[15]; + sprintf(key, "led%i_conf", i+1); + ESP_ERROR_CHECK(nvs_get_blob(nvs, key, &led_configs[i], &conf_size)); + } + return led_configs; +} diff --git a/main/CO2_Sense.h b/main/CO2_Sense.h new file mode 100644 index 0000000..5093e8d --- /dev/null +++ b/main/CO2_Sense.h @@ -0,0 +1,6 @@ +#include "ledController.h" +#include "nvs.h" + +void fetch_sensor_task(void* pvParameters); +void init_nvs(void); +led_disp_config_t* generate_led_conf(nvs_handle_t nvs, unsigned int nb); diff --git a/main/Kconfig.projbuild b/main/Kconfig.projbuild new file mode 100644 index 0000000..00165f7 --- /dev/null +++ b/main/Kconfig.projbuild @@ -0,0 +1,24 @@ +menu "CO2Sense config" + menu "LED pins" + config LED_1_PIN + int "pin" + range 0 10 + default 4 + help + The pin on which the 1st LED is connected + + config LED_2_PIN + int "pin" + range 0 10 + default 5 + help + The pin on which the 2nd LED is connected + + config LED_3_PIN + int "pin" + range 0 10 + default 6 + help + The pin on which the 3rd LED is connected + endmenu +endmenu diff --git a/nvs.bin b/nvs.bin new file mode 100644 index 0000000..5874d99 Binary files /dev/null and b/nvs.bin differ diff --git a/sdkconfig b/sdkconfig index c335edc..dbfa75b 100644 --- a/sdkconfig +++ b/sdkconfig @@ -299,6 +299,19 @@ CONFIG_PARTITION_TABLE_OFFSET=0x8000 CONFIG_PARTITION_TABLE_MD5=y # end of Partition Table +# +# CO2Sense config +# + +# +# LED pins +# +CONFIG_LED_1_PIN=4 +CONFIG_LED_2_PIN=5 +CONFIG_LED_3_PIN=6 +# end of LED pins +# end of CO2Sense config + # # Compiler options #