From 4f81adb83a97a74787f1774e87b7961e437c32ee Mon Sep 17 00:00:00 2001 From: leo Date: Mon, 28 Mar 2022 22:52:12 +0200 Subject: [PATCH] nvs --- .../ledController/include/ledController.h | 2 + default_conf.csv | 8 ++ main/CO2_Sense.c | 94 +++++++++--------- main/CO2_Sense.h | 6 ++ main/Kconfig.projbuild | 24 +++++ nvs.bin | Bin 0 -> 24576 bytes sdkconfig | 13 +++ 7 files changed, 101 insertions(+), 46 deletions(-) create mode 100644 default_conf.csv create mode 100644 main/CO2_Sense.h create mode 100644 main/Kconfig.projbuild create mode 100644 nvs.bin 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 0000000000000000000000000000000000000000..5874d99bf9ecc54663d62bd1f40ddbc21ed26c0c GIT binary patch literal 24576 zcmeI#ze@sP9LMqJPK{~^+xiEhN$|%KGz10VUQ+}asUVn=1~~=7(GqP*i_uU+L_yI~ z=^xN2{aCWaC5YOJCh2+(l{@ZIxG9JCce&@h=lk)w*G=E1uIob9kG$GT3*6qE%Ci4% zy%&n2zt5h$uC1gpMoy=c_9kUU6(954W1Fd5BAv+Rmshiyq}((pblr1s9|*Q8WX-g$ zm8ha?dzG5AUkF8J82Q)byWM;ulh5Wl>8G8mh>OnqTCq(T0sor+kD`Z@{dsCmg#ZEwAb_q?p1Q0*~0R#|0009ILKmdXM6fow0PnY@sOgnD$=czdr0tg_000IagfB*srAb