upd measure on connect
This commit is contained in:
parent
7616115618
commit
d9ed3f2334
@ -5,6 +5,8 @@
|
|||||||
#include "host/ble_uuid.h"
|
#include "host/ble_uuid.h"
|
||||||
#include "nimble/hci_common.h"
|
#include "nimble/hci_common.h"
|
||||||
#include "os/os_mbuf.h"
|
#include "os/os_mbuf.h"
|
||||||
|
#include "scd4x_data.h"
|
||||||
|
#include "scd4x_i2c.h"
|
||||||
#include "sdkconfig.h"
|
#include "sdkconfig.h"
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
#ifdef CONFIG_BT_NIMBLE_ENABLED
|
#ifdef CONFIG_BT_NIMBLE_ENABLED
|
||||||
@ -18,6 +20,9 @@
|
|||||||
#include "services/gatt/ble_svc_gatt.h"
|
#include "services/gatt/ble_svc_gatt.h"
|
||||||
#include "nimble/nimble_port_freertos.h"
|
#include "nimble/nimble_port_freertos.h"
|
||||||
|
|
||||||
|
#include "scd4x_util.h"
|
||||||
|
#include "scd4x_i2c.h"
|
||||||
|
|
||||||
static configuration_data_t* main_app_conf;
|
static configuration_data_t* main_app_conf;
|
||||||
|
|
||||||
static uint8_t ble_addr_type;
|
static uint8_t ble_addr_type;
|
||||||
@ -506,6 +511,7 @@ static int gatt_svr_chr_access_magfield_update(uint16_t conn_handle, uint16_t at
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void ble_advertise(void){
|
static void ble_advertise(void){
|
||||||
|
scd4x_power_down();
|
||||||
main_app_conf->sensor->enabled = false;
|
main_app_conf->sensor->enabled = false;
|
||||||
ESP_ERROR_CHECK(ble_gap_adv_set_fields(&adv_fields));
|
ESP_ERROR_CHECK(ble_gap_adv_set_fields(&adv_fields));
|
||||||
ESP_ERROR_CHECK(ble_gap_adv_start(ble_addr_type, NULL, BLE_HS_FOREVER, &adv_params, ble_gap_event, NULL));
|
ESP_ERROR_CHECK(ble_gap_adv_start(ble_addr_type, NULL, BLE_HS_FOREVER, &adv_params, ble_gap_event, NULL));
|
||||||
|
@ -20,6 +20,7 @@
|
|||||||
#include "ledController.h"
|
#include "ledController.h"
|
||||||
#include "power_inout.h"
|
#include "power_inout.h"
|
||||||
#include "scd4x_i2c.h"
|
#include "scd4x_i2c.h"
|
||||||
|
#include "scd4x_util.h"
|
||||||
#include "sdkconfig.h"
|
#include "sdkconfig.h"
|
||||||
#include "sensirion_i2c_hal.h"
|
#include "sensirion_i2c_hal.h"
|
||||||
#include "scd4x_data.h"
|
#include "scd4x_data.h"
|
||||||
@ -92,52 +93,35 @@ void fetch_sensor_task(void* pvParameters){
|
|||||||
configuration_data_t* mainConf = (configuration_data_t*) pvParameters;
|
configuration_data_t* mainConf = (configuration_data_t*) pvParameters;
|
||||||
scd4x_config_t* conf = mainConf->sensor;
|
scd4x_config_t* conf = mainConf->sensor;
|
||||||
scd4x_data_t* measures = conf->measure;
|
scd4x_data_t* measures = conf->measure;
|
||||||
uint8_t sensorStarted = false;
|
int sensorStarted = false;
|
||||||
while(1){
|
while(1){
|
||||||
ESP_LOGI("MAIN", "witing for %d sec", conf->delay);
|
ESP_LOGI("MAIN", "witing for %d sec", conf->delay);
|
||||||
vTaskDelay(conf->delay * 1000 / portTICK_PERIOD_MS);
|
for(int i=0, oldEnable=conf->enabled; i<conf->delay || !conf->enabled; i++){
|
||||||
|
vTaskDelay(1000 / portTICK_PERIOD_MS);
|
||||||
|
if(conf->enabled != oldEnable) break;
|
||||||
|
ESP_LOGI("MAIN", "waiting");
|
||||||
|
}
|
||||||
|
ESP_LOGI("MAIN", "sensor status changed");
|
||||||
|
|
||||||
if(!conf->enabled){
|
if(!conf->enabled){
|
||||||
if(sensorStarted){
|
if(sensorStarted){
|
||||||
sensorStarted = false;
|
|
||||||
scd4x_power_down();
|
scd4x_power_down();
|
||||||
|
sensorStarted = false;
|
||||||
|
}
|
||||||
|
else continue;
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
continue;
|
if(!sensorStarted){
|
||||||
}
|
scd4x_wait_wake_up();
|
||||||
}
|
scd4x_measure_single_shot();
|
||||||
if(conf->enabled && !sensorStarted){
|
update_scd4x_measures(measures);
|
||||||
scd4x_wake_up();
|
start_scd4x_measure(conf);
|
||||||
for(int i=0; i<5; i++){
|
|
||||||
uint16_t s0, s1, s2;
|
|
||||||
int16_t res=scd4x_get_serial_number(&s0, &s1, &s2);
|
|
||||||
if(res == 0) break;
|
|
||||||
vTaskDelay(500 / portTICK_PERIOD_MS);
|
|
||||||
ESP_LOGI("MAIN", "get serial, res %d; serial %d %d %d", res, s0, s1, s2);
|
|
||||||
}
|
|
||||||
sensorStarted = true;
|
|
||||||
switch(conf->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->mode == SCD4X_SS_MODE) scd4x_measure_single_shot();
|
if(conf->mode == SCD4X_SS_MODE) scd4x_measure_single_shot();
|
||||||
ESP_LOGI("MAIN", "reading sensor");
|
ESP_LOGI("MAIN", "reading sensor");
|
||||||
uint16_t dataReady;
|
update_scd4x_measures(measures);
|
||||||
scd4x_get_data_ready_status(&dataReady);
|
|
||||||
if(!(dataReady & 0x07FF)){
|
|
||||||
ESP_LOGI("MAIN", "no new sensor data");
|
|
||||||
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, mainConf->led_nb, conf->measure->co2);
|
update_led_status(mainConf->leds, mainConf->led_nb, conf->measure->co2);
|
||||||
ble_sensor_notify();
|
ble_sensor_notify();
|
||||||
ESP_LOGI("MAIN", "co2 : %u ppm, temp : %ld m°C, hum : %ld mRH", conf->measure->co2, conf->measure->temperature, conf->measure->humidity);
|
ESP_LOGI("MAIN", "co2 : %u ppm, temp : %ld m°C, hum : %ld mRH", conf->measure->co2, conf->measure->temperature, conf->measure->humidity);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user