setup from nvs

This commit is contained in:
leo 2022-03-30 23:37:28 +02:00
parent 1b012543d4
commit ecf4120d95
Signed by: leo
GPG Key ID: 0DD993BFB2B307DB
8 changed files with 62 additions and 45 deletions

View File

@ -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);

View File

@ -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);
}

View File

@ -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;

@ -1 +1 @@
Subproject commit df58dce808151d1ab7b8d436e4233acf946cb9b1
Subproject commit 30a1c5637313ff0a93a2e06e5043c918e5a0c61d

View File

@ -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

1 # Default nvs configuration
2 key,type,encoding,value
3 main,namespace,,
4 name,data,string,CO2Sense
5 wireless_conf,data,binary,00000001 wireless_conf,data,u8,1
6 ap_ssid,data,string,CO2Sense
7 ap_pass,data,string,testtest
8 sensor_conf,data,u16,20 sensor_conf,data,u16,22
9 led_nb,data,u8,3
10 led1_conf,data,hex2bin,0400DC051027640001FF
11 led2_conf,data,hex2bin,0500BC02DB05640001FF

View File

@ -38,60 +38,63 @@ void app_main(void){
// init LEDs driver
init_led_driver(conf->leds, LED_NUMBER);
// init wifi AP
//wifi_config_t wifi_config = wifi_config_generator("CO2Sense","testtest",1);
// 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());
// start avahi
init_avahi(conf->hostname);
wifi_init_softap(conf->ap_config);
/*scd4x_data_t sensor_data = {
.co2 = 0,
.temperature = 0,
.humidity = 0,
};*/
// start httpd server
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 wifi
switch(conf->wireless){
case C_WIFI_MODE_AP:
wifi_init_softap(conf->wifi_config);
break;
}
// start fetch sensor task
/*scd4x_config_t sensor_conf = {
.delay = 5,
.measure = &sensor_data,
};*/
// 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->sensor, tskIDLE_PRIORITY, &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();
}

View File

@ -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);

BIN
nvs.bin

Binary file not shown.