setup from nvs
This commit is contained in:
parent
1b012543d4
commit
ecf4120d95
@ -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);
|
||||
|
@ -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);
|
||||
}
|
||||
|
@ -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
|
@ -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
|
||||
|
|
@ -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();
|
||||
}
|
||||
|
@ -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);
|
||||
|
Loading…
x
Reference in New Issue
Block a user