upd measure on connect
This commit is contained in:
parent
7616115618
commit
d9ed3f2334
@ -5,6 +5,8 @@
|
||||
#include "host/ble_uuid.h"
|
||||
#include "nimble/hci_common.h"
|
||||
#include "os/os_mbuf.h"
|
||||
#include "scd4x_data.h"
|
||||
#include "scd4x_i2c.h"
|
||||
#include "sdkconfig.h"
|
||||
#include <stdint.h>
|
||||
#ifdef CONFIG_BT_NIMBLE_ENABLED
|
||||
@ -18,6 +20,9 @@
|
||||
#include "services/gatt/ble_svc_gatt.h"
|
||||
#include "nimble/nimble_port_freertos.h"
|
||||
|
||||
#include "scd4x_util.h"
|
||||
#include "scd4x_i2c.h"
|
||||
|
||||
static configuration_data_t* main_app_conf;
|
||||
|
||||
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){
|
||||
scd4x_power_down();
|
||||
main_app_conf->sensor->enabled = false;
|
||||
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));
|
||||
|
@ -20,6 +20,7 @@
|
||||
#include "ledController.h"
|
||||
#include "power_inout.h"
|
||||
#include "scd4x_i2c.h"
|
||||
#include "scd4x_util.h"
|
||||
#include "sdkconfig.h"
|
||||
#include "sensirion_i2c_hal.h"
|
||||
#include "scd4x_data.h"
|
||||
@ -92,52 +93,35 @@ void fetch_sensor_task(void* pvParameters){
|
||||
configuration_data_t* mainConf = (configuration_data_t*) pvParameters;
|
||||
scd4x_config_t* conf = mainConf->sensor;
|
||||
scd4x_data_t* measures = conf->measure;
|
||||
uint8_t sensorStarted = false;
|
||||
int sensorStarted = false;
|
||||
while(1){
|
||||
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(sensorStarted){
|
||||
sensorStarted = false;
|
||||
scd4x_power_down();
|
||||
sensorStarted = false;
|
||||
}
|
||||
else{
|
||||
continue;
|
||||
}
|
||||
else continue;
|
||||
}
|
||||
if(conf->enabled && !sensorStarted){
|
||||
scd4x_wake_up();
|
||||
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;
|
||||
else{
|
||||
if(!sensorStarted){
|
||||
scd4x_wait_wake_up();
|
||||
scd4x_measure_single_shot();
|
||||
update_scd4x_measures(measures);
|
||||
start_scd4x_measure(conf);
|
||||
}
|
||||
}
|
||||
|
||||
if(conf->mode == SCD4X_SS_MODE) scd4x_measure_single_shot();
|
||||
ESP_LOGI("MAIN", "reading sensor");
|
||||
uint16_t dataReady;
|
||||
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_scd4x_measures(measures);
|
||||
update_led_status(mainConf->leds, mainConf->led_nb, conf->measure->co2);
|
||||
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);
|
||||
|
Loading…
x
Reference in New Issue
Block a user