setup from nvs
This commit is contained in:
parent
1b012543d4
commit
ecf4120d95
@ -4,6 +4,10 @@
|
|||||||
#include "nvs_flash.h"
|
#include "nvs_flash.h"
|
||||||
#include "esp_wifi.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);
|
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 wifi_config_generator(char SSID[32], char pass[32], uint8_t channel);
|
||||||
wifi_config_t* get_ap_config(nvs_handle_t nvs);
|
wifi_config_t* get_ap_config(nvs_handle_t nvs);
|
||||||
|
@ -7,7 +7,8 @@ void init_conf_from_nvs(configuration_data_t* conf, nvs_handle_t nvs){
|
|||||||
conf->leds = get_led_configuration(nvs);
|
conf->leds = get_led_configuration(nvs);
|
||||||
conf->sensor = get_sensor_configuration(nvs);
|
conf->sensor = get_sensor_configuration(nvs);
|
||||||
conf->measure = conf->sensor->measure;
|
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;
|
size_t str_size;
|
||||||
nvs_get_str(nvs, "name", conf->hostname, &str_size);
|
nvs_get_str(nvs, "name", conf->hostname, &str_size);
|
||||||
}
|
}
|
||||||
|
@ -11,8 +11,8 @@ struct configuration_data {
|
|||||||
scd4x_data_t* measure;
|
scd4x_data_t* measure;
|
||||||
scd4x_config_t* sensor;
|
scd4x_config_t* sensor;
|
||||||
led_disp_config_t* leds;
|
led_disp_config_t* leds;
|
||||||
wifi_config_t* ap_config;
|
uint8_t wireless;
|
||||||
wifi_config_t* sta_config;
|
wifi_config_t* wifi_config;
|
||||||
char hostname[16];
|
char hostname[16];
|
||||||
};
|
};
|
||||||
typedef struct configuration_data configuration_data_t;
|
typedef struct configuration_data configuration_data_t;
|
||||||
|
@ -1 +1 @@
|
|||||||
Subproject commit df58dce808151d1ab7b8d436e4233acf946cb9b1
|
Subproject commit 30a1c5637313ff0a93a2e06e5043c918e5a0c61d
|
@ -2,10 +2,10 @@
|
|||||||
key,type,encoding,value
|
key,type,encoding,value
|
||||||
main,namespace,,
|
main,namespace,,
|
||||||
name,data,string,CO2Sense
|
name,data,string,CO2Sense
|
||||||
wireless_conf,data,binary,00000001
|
wireless_conf,data,u8,1
|
||||||
ap_ssid,data,string,CO2Sense
|
ap_ssid,data,string,CO2Sense
|
||||||
ap_pass,data,string,testtest
|
ap_pass,data,string,testtest
|
||||||
sensor_conf,data,u16,20
|
sensor_conf,data,u16,22
|
||||||
led_nb,data,u8,3
|
led_nb,data,u8,3
|
||||||
led1_conf,data,hex2bin,0400DC051027640001FF
|
led1_conf,data,hex2bin,0400DC051027640001FF
|
||||||
led2_conf,data,hex2bin,0500BC02DB05640001FF
|
led2_conf,data,hex2bin,0500BC02DB05640001FF
|
||||||
|
|
@ -38,60 +38,63 @@ void app_main(void){
|
|||||||
// init LEDs driver
|
// init LEDs driver
|
||||||
init_led_driver(conf->leds, LED_NUMBER);
|
init_led_driver(conf->leds, LED_NUMBER);
|
||||||
|
|
||||||
// init wifi AP
|
// init server stuff if wifi enabled
|
||||||
//wifi_config_t wifi_config = wifi_config_generator("CO2Sense","testtest",1);
|
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());
|
||||||
|
|
||||||
ESP_ERROR_CHECK(esp_netif_init());
|
// start avahi
|
||||||
ESP_ERROR_CHECK(esp_event_loop_create_default());
|
init_avahi(conf->hostname);
|
||||||
|
|
||||||
// start avahi
|
// start httpd server
|
||||||
init_avahi(conf->hostname);
|
init_http_server(conf);
|
||||||
|
}
|
||||||
|
// start wifi
|
||||||
|
switch(conf->wireless){
|
||||||
|
case C_WIFI_MODE_AP:
|
||||||
|
wifi_init_softap(conf->wifi_config);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
wifi_init_softap(conf->ap_config);
|
// start sensor
|
||||||
|
init_scd4x();
|
||||||
/*scd4x_data_t sensor_data = {
|
switch(conf->sensor->mode){
|
||||||
.co2 = 0,
|
case SCD4X_NORMAL_MODE:
|
||||||
.temperature = 0,
|
ESP_ERROR_CHECK(scd4x_start_periodic_measurement());
|
||||||
.humidity = 0,
|
ESP_LOGI("scd4x init","started in normal mode");
|
||||||
};*/
|
break;
|
||||||
|
case SCD4X_LP_MODE:
|
||||||
init_http_server(conf);
|
ESP_ERROR_CHECK(scd4x_start_low_power_periodic_measurement());
|
||||||
|
ESP_LOGI("scd4x init","started in low power mode");
|
||||||
// init scd41 sensor
|
break;
|
||||||
sensirion_i2c_hal_init(0,1);
|
}
|
||||||
|
if(conf->sensor->mode & SCD4X_CAPTURE_ENABLED){
|
||||||
scd4x_wake_up();
|
TaskHandle_t sensor_fetch_handle;
|
||||||
scd4x_stop_periodic_measurement();
|
xTaskCreate(fetch_sensor_task, "FETCH_SENSOR", 4096, conf, tskIDLE_PRIORITY, &sensor_fetch_handle);
|
||||||
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);
|
|
||||||
|
|
||||||
while(1){
|
while(1){
|
||||||
vTaskDelay(1000 / portTICK_PERIOD_MS);
|
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){
|
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;
|
scd4x_data_t* measures = conf->measure;
|
||||||
while(1){
|
while(1){
|
||||||
|
if(conf->mode == SCD4X_SS_MODE) scd4x_measure_single_shot();
|
||||||
vTaskDelay(conf->delay * 1000 / portTICK_PERIOD_MS);
|
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);
|
int16_t error = scd4x_read_measurement(&measures->co2, &measures->temperature, &measures->humidity);
|
||||||
if (error)
|
if (error)
|
||||||
ESP_LOGE("sensor fetch", "Error executing scd4x_read_measurement(): %i\n", 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));
|
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();
|
||||||
|
}
|
||||||
|
@ -6,4 +6,5 @@ void fetch_sensor_task(void* pvParameters);
|
|||||||
void init_nvs(void);
|
void init_nvs(void);
|
||||||
void init_avahi(char* hostname);
|
void init_avahi(char* hostname);
|
||||||
void init_http_server(configuration_data_t* main_conf);
|
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);
|
led_disp_config_t* generate_led_conf(nvs_handle_t nvs, unsigned int nb);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user