From ecf4120d950c4f5640e97bf8f2a7fe5c5c9cb448 Mon Sep 17 00:00:00 2001 From: leo Date: Wed, 30 Mar 2022 23:37:28 +0200 Subject: [PATCH] setup from nvs --- components/APlib/include/APlib.h | 4 + components/configuration/configuration.c | 3 +- .../configuration/include/configuration.h | 4 +- components/sensirion_i2c_scd4x | 2 +- default_conf.csv | 4 +- main/CO2_Sense.c | 89 ++++++++++-------- main/CO2_Sense.h | 1 + nvs.bin | Bin 24576 -> 24576 bytes 8 files changed, 62 insertions(+), 45 deletions(-) diff --git a/components/APlib/include/APlib.h b/components/APlib/include/APlib.h index 178bf67..a7603b4 100644 --- a/components/APlib/include/APlib.h +++ b/components/APlib/include/APlib.h @@ -4,6 +4,10 @@ #include "nvs_flash.h" #include "esp_wifi.h" +#define C_WIFI_MODE_AP 1 +#define C_WIFI_MODE_OFF 0 +#define C_WIFI_NEED_HTTP 0b11 + void wifi_init_softap(wifi_config_t* wifi_config); wifi_config_t wifi_config_generator(char SSID[32], char pass[32], uint8_t channel); wifi_config_t* get_ap_config(nvs_handle_t nvs); diff --git a/components/configuration/configuration.c b/components/configuration/configuration.c index 7202c25..0202407 100644 --- a/components/configuration/configuration.c +++ b/components/configuration/configuration.c @@ -7,7 +7,8 @@ void init_conf_from_nvs(configuration_data_t* conf, nvs_handle_t nvs){ conf->leds = get_led_configuration(nvs); conf->sensor = get_sensor_configuration(nvs); conf->measure = conf->sensor->measure; - conf->ap_config = get_ap_config(nvs); + nvs_get_u8(nvs, "wireless_conf", &conf->wireless); + conf->wifi_config = get_ap_config(nvs); size_t str_size; nvs_get_str(nvs, "name", conf->hostname, &str_size); } diff --git a/components/configuration/include/configuration.h b/components/configuration/include/configuration.h index 304aa6b..6e12743 100644 --- a/components/configuration/include/configuration.h +++ b/components/configuration/include/configuration.h @@ -11,8 +11,8 @@ struct configuration_data { scd4x_data_t* measure; scd4x_config_t* sensor; led_disp_config_t* leds; - wifi_config_t* ap_config; - wifi_config_t* sta_config; + uint8_t wireless; + wifi_config_t* wifi_config; char hostname[16]; }; typedef struct configuration_data configuration_data_t; diff --git a/components/sensirion_i2c_scd4x b/components/sensirion_i2c_scd4x index df58dce..30a1c56 160000 --- a/components/sensirion_i2c_scd4x +++ b/components/sensirion_i2c_scd4x @@ -1 +1 @@ -Subproject commit df58dce808151d1ab7b8d436e4233acf946cb9b1 +Subproject commit 30a1c5637313ff0a93a2e06e5043c918e5a0c61d diff --git a/default_conf.csv b/default_conf.csv index 272cc7d..bbcb5f0 100644 --- a/default_conf.csv +++ b/default_conf.csv @@ -2,10 +2,10 @@ key,type,encoding,value main,namespace,, name,data,string,CO2Sense -wireless_conf,data,binary,00000001 +wireless_conf,data,u8,1 ap_ssid,data,string,CO2Sense ap_pass,data,string,testtest -sensor_conf,data,u16,20 +sensor_conf,data,u16,22 led_nb,data,u8,3 led1_conf,data,hex2bin,0400DC051027640001FF led2_conf,data,hex2bin,0500BC02DB05640001FF diff --git a/main/CO2_Sense.c b/main/CO2_Sense.c index 89e6f29..52d6724 100644 --- a/main/CO2_Sense.c +++ b/main/CO2_Sense.c @@ -37,61 +37,64 @@ void app_main(void){ // init LEDs driver init_led_driver(conf->leds, LED_NUMBER); + + // init server stuff if wifi enabled + if(conf->wireless & C_WIFI_NEED_HTTP){ + ESP_LOGI("main", "%i", conf->wireless); + // init tcpip + ESP_ERROR_CHECK(esp_netif_init()); + ESP_ERROR_CHECK(esp_event_loop_create_default()); - // init wifi AP - //wifi_config_t wifi_config = wifi_config_generator("CO2Sense","testtest",1); + // start avahi + init_avahi(conf->hostname); - ESP_ERROR_CHECK(esp_netif_init()); - ESP_ERROR_CHECK(esp_event_loop_create_default()); - - // start avahi - init_avahi(conf->hostname); - - wifi_init_softap(conf->ap_config); + // start httpd server + init_http_server(conf); + } + // start wifi + switch(conf->wireless){ + case C_WIFI_MODE_AP: + wifi_init_softap(conf->wifi_config); + break; + } - /*scd4x_data_t sensor_data = { - .co2 = 0, - .temperature = 0, - .humidity = 0, - };*/ - - init_http_server(conf); - - // init scd41 sensor - sensirion_i2c_hal_init(0,1); - - scd4x_wake_up(); - scd4x_stop_periodic_measurement(); - scd4x_reinit(); - - int16_t error = scd4x_start_periodic_measurement(); - if (error) { - ESP_LOGE("MAIN", "Error executing scd4x_start_periodic_measurement(): %i\n",error); - } - - // start fetch sensor task - /*scd4x_config_t sensor_conf = { - .delay = 5, - .measure = &sensor_data, - };*/ - TaskHandle_t sensor_fetch_handle; - xTaskCreate(fetch_sensor_task, "FETCH_SENSOR", 4096, conf->sensor, tskIDLE_PRIORITY, &sensor_fetch_handle); + // start sensor + init_scd4x(); + switch(conf->sensor->mode){ + case SCD4X_NORMAL_MODE: + ESP_ERROR_CHECK(scd4x_start_periodic_measurement()); + ESP_LOGI("scd4x init","started in normal mode"); + break; + case SCD4X_LP_MODE: + ESP_ERROR_CHECK(scd4x_start_low_power_periodic_measurement()); + ESP_LOGI("scd4x init","started in low power mode"); + break; + } + if(conf->sensor->mode & SCD4X_CAPTURE_ENABLED){ + TaskHandle_t sensor_fetch_handle; + xTaskCreate(fetch_sensor_task, "FETCH_SENSOR", 4096, conf, tskIDLE_PRIORITY, &sensor_fetch_handle); + } while(1){ vTaskDelay(1000 / portTICK_PERIOD_MS); - ESP_LOGI("MAIN", "co2 : %u ppm, temp : %d m°C, hum : %d mRH", conf->measure->co2, conf->measure->temperature, conf->measure->humidity); - update_led_status(conf->leds, LED_NUMBER, conf->measure->co2); } } void fetch_sensor_task(void* pvParameters){ - scd4x_config_t* conf = (scd4x_config_t*) pvParameters; + configuration_data_t* mainConf = (configuration_data_t*) pvParameters; + scd4x_config_t* conf = mainConf->sensor; scd4x_data_t* measures = conf->measure; while(1){ + if(conf->mode == SCD4X_SS_MODE) scd4x_measure_single_shot(); vTaskDelay(conf->delay * 1000 / portTICK_PERIOD_MS); + uint16_t dataReady; + scd4x_get_data_ready_status(&dataReady); + if(!(dataReady & 0x07FF)) continue; 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); + update_led_status(mainConf->leds, LED_NUMBER, conf->measure->co2); + ESP_LOGI("MAIN", "co2 : %u ppm, temp : %d m°C, hum : %d mRH", conf->measure->co2, conf->measure->temperature, conf->measure->humidity); } } @@ -130,3 +133,11 @@ void init_http_server(configuration_data_t* main_conf){ ESP_ERROR_CHECK(start_server(serv_config, main_conf)); } + +void init_scd4x(){ + sensirion_i2c_hal_init(0,1); + + scd4x_wake_up(); + scd4x_stop_periodic_measurement(); + scd4x_reinit(); +} diff --git a/main/CO2_Sense.h b/main/CO2_Sense.h index 28c95e2..090657a 100644 --- a/main/CO2_Sense.h +++ b/main/CO2_Sense.h @@ -6,4 +6,5 @@ void fetch_sensor_task(void* pvParameters); void init_nvs(void); void init_avahi(char* hostname); void init_http_server(configuration_data_t* main_conf); +void init_scd4x(); led_disp_config_t* generate_led_conf(nvs_handle_t nvs, unsigned int nb); diff --git a/nvs.bin b/nvs.bin index 1189cfbb671b84b273ebdb80cb1ced48b1db4f61..2806b38d9f8c96e1104d216b7351ae40f2c7dbd6 100644 GIT binary patch delta 84 zcmZoTz}Rqrae@lttH}?Uq$fHg$}%$kubB02X?bQ*YEEi#aeQ)qUK#@f1LJ=XnE0TIKK!c$G{-Ac_w2z-{cQW4vPc=0NxZKbpQYW delta 126 zcmZoTz}Rqrae@lds(+IgGD%HzNK|)XVt5nWCQ+VQl$w)TTpXXApO?nKz`()q|3CBG zOS%RSU$-4`$wGcYhROx)Kds-R*iQJk7roL>Yph=D<5b0lLr-y(qk E0Q3_m*#H0l