Add support for 1.8V-powered devices (#6234)

This commit is contained in:
bisbastuner 2024-02-18 19:44:24 +01:00 committed by GitHub
parent 8a52ba3ea3
commit 142b33fc90
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 44 additions and 9 deletions

View file

@ -11,6 +11,7 @@ MULTI_CONF = True
CONF_BME680_BSEC_ID = "bme680_bsec_id" CONF_BME680_BSEC_ID = "bme680_bsec_id"
CONF_TEMPERATURE_OFFSET = "temperature_offset" CONF_TEMPERATURE_OFFSET = "temperature_offset"
CONF_IAQ_MODE = "iaq_mode" CONF_IAQ_MODE = "iaq_mode"
CONF_SUPPLY_VOLTAGE = "supply_voltage"
CONF_SAMPLE_RATE = "sample_rate" CONF_SAMPLE_RATE = "sample_rate"
CONF_STATE_SAVE_INTERVAL = "state_save_interval" CONF_STATE_SAVE_INTERVAL = "state_save_interval"
@ -22,6 +23,12 @@ IAQ_MODE_OPTIONS = {
"MOBILE": IAQMode.IAQ_MODE_MOBILE, "MOBILE": IAQMode.IAQ_MODE_MOBILE,
} }
SupplyVoltage = bme680_bsec_ns.enum("SupplyVoltage")
SUPPLY_VOLTAGE_OPTIONS = {
"1.8V": SupplyVoltage.SUPPLY_VOLTAGE_1V8,
"3.3V": SupplyVoltage.SUPPLY_VOLTAGE_3V3,
}
SampleRate = bme680_bsec_ns.enum("SampleRate") SampleRate = bme680_bsec_ns.enum("SampleRate")
SAMPLE_RATE_OPTIONS = { SAMPLE_RATE_OPTIONS = {
"LP": SampleRate.SAMPLE_RATE_LP, "LP": SampleRate.SAMPLE_RATE_LP,
@ -40,6 +47,9 @@ CONFIG_SCHEMA = cv.All(
cv.Optional(CONF_IAQ_MODE, default="STATIC"): cv.enum( cv.Optional(CONF_IAQ_MODE, default="STATIC"): cv.enum(
IAQ_MODE_OPTIONS, upper=True IAQ_MODE_OPTIONS, upper=True
), ),
cv.Optional(CONF_SUPPLY_VOLTAGE, default="3.3V"): cv.enum(
SUPPLY_VOLTAGE_OPTIONS, upper=True
),
cv.Optional(CONF_SAMPLE_RATE, default="LP"): cv.enum( cv.Optional(CONF_SAMPLE_RATE, default="LP"): cv.enum(
SAMPLE_RATE_OPTIONS, upper=True SAMPLE_RATE_OPTIONS, upper=True
), ),
@ -67,6 +77,7 @@ async def to_code(config):
cg.add(var.set_device_id(str(config[CONF_ID]))) cg.add(var.set_device_id(str(config[CONF_ID])))
cg.add(var.set_temperature_offset(config[CONF_TEMPERATURE_OFFSET])) cg.add(var.set_temperature_offset(config[CONF_TEMPERATURE_OFFSET]))
cg.add(var.set_iaq_mode(config[CONF_IAQ_MODE])) cg.add(var.set_iaq_mode(config[CONF_IAQ_MODE]))
cg.add(var.set_supply_voltage(config[CONF_SUPPLY_VOLTAGE]))
cg.add(var.set_sample_rate(config[CONF_SAMPLE_RATE])) cg.add(var.set_sample_rate(config[CONF_SAMPLE_RATE]))
cg.add( cg.add(
var.set_state_save_interval(config[CONF_STATE_SAVE_INTERVAL].total_milliseconds) var.set_state_save_interval(config[CONF_STATE_SAVE_INTERVAL].total_milliseconds)

View file

@ -52,17 +52,33 @@ void BME680BSECComponent::setup() {
void BME680BSECComponent::set_config_() { void BME680BSECComponent::set_config_() {
if (this->sample_rate_ == SAMPLE_RATE_ULP) { if (this->sample_rate_ == SAMPLE_RATE_ULP) {
if (this->supply_voltage_ == SUPPLY_VOLTAGE_3V3) {
const uint8_t config[] = { const uint8_t config[] = {
#include "config/generic_33v_300s_28d/bsec_iaq.txt" #include "config/generic_33v_300s_28d/bsec_iaq.txt"
}; };
this->bsec_status_ = this->bsec_status_ =
bsec_set_configuration(config, BSEC_MAX_PROPERTY_BLOB_SIZE, this->work_buffer_, sizeof(this->work_buffer_)); bsec_set_configuration(config, BSEC_MAX_PROPERTY_BLOB_SIZE, this->work_buffer_, sizeof(this->work_buffer_));
} else { } else { // SUPPLY_VOLTAGE_1V8
const uint8_t config[] = {
#include "config/generic_18v_300s_28d/bsec_iaq.txt"
};
this->bsec_status_ =
bsec_set_configuration(config, BSEC_MAX_PROPERTY_BLOB_SIZE, this->work_buffer_, sizeof(this->work_buffer_));
}
} else { // SAMPLE_RATE_LP
if (this->supply_voltage_ == SUPPLY_VOLTAGE_3V3) {
const uint8_t config[] = { const uint8_t config[] = {
#include "config/generic_33v_3s_28d/bsec_iaq.txt" #include "config/generic_33v_3s_28d/bsec_iaq.txt"
}; };
this->bsec_status_ = this->bsec_status_ =
bsec_set_configuration(config, BSEC_MAX_PROPERTY_BLOB_SIZE, this->work_buffer_, sizeof(this->work_buffer_)); bsec_set_configuration(config, BSEC_MAX_PROPERTY_BLOB_SIZE, this->work_buffer_, sizeof(this->work_buffer_));
} else { // SUPPLY_VOLTAGE_1V8
const uint8_t config[] = {
#include "config/generic_18v_3s_28d/bsec_iaq.txt"
};
this->bsec_status_ =
bsec_set_configuration(config, BSEC_MAX_PROPERTY_BLOB_SIZE, this->work_buffer_, sizeof(this->work_buffer_));
}
} }
} }
@ -145,6 +161,7 @@ void BME680BSECComponent::dump_config() {
ESP_LOGCONFIG(TAG, " Temperature Offset: %.2f", this->temperature_offset_); ESP_LOGCONFIG(TAG, " Temperature Offset: %.2f", this->temperature_offset_);
ESP_LOGCONFIG(TAG, " IAQ Mode: %s", this->iaq_mode_ == IAQ_MODE_STATIC ? "Static" : "Mobile"); ESP_LOGCONFIG(TAG, " IAQ Mode: %s", this->iaq_mode_ == IAQ_MODE_STATIC ? "Static" : "Mobile");
ESP_LOGCONFIG(TAG, " Supply Voltage: %sV", this->supply_voltage_ == SUPPLY_VOLTAGE_3V3 ? "3.3" : "1.8");
ESP_LOGCONFIG(TAG, " Sample Rate: %s", BME680_BSEC_SAMPLE_RATE_LOG(this->sample_rate_)); ESP_LOGCONFIG(TAG, " Sample Rate: %s", BME680_BSEC_SAMPLE_RATE_LOG(this->sample_rate_));
ESP_LOGCONFIG(TAG, " State Save Interval: %ims", this->state_save_interval_ms_); ESP_LOGCONFIG(TAG, " State Save Interval: %ims", this->state_save_interval_ms_);

View file

@ -21,6 +21,11 @@ enum IAQMode {
IAQ_MODE_MOBILE = 1, IAQ_MODE_MOBILE = 1,
}; };
enum SupplyVoltage {
SUPPLY_VOLTAGE_3V3 = 0,
SUPPLY_VOLTAGE_1V8 = 1,
};
enum SampleRate { enum SampleRate {
SAMPLE_RATE_LP = 0, SAMPLE_RATE_LP = 0,
SAMPLE_RATE_ULP = 1, SAMPLE_RATE_ULP = 1,
@ -35,6 +40,7 @@ class BME680BSECComponent : public Component, public i2c::I2CDevice {
void set_temperature_offset(float offset) { this->temperature_offset_ = offset; } void set_temperature_offset(float offset) { this->temperature_offset_ = offset; }
void set_iaq_mode(IAQMode iaq_mode) { this->iaq_mode_ = iaq_mode; } void set_iaq_mode(IAQMode iaq_mode) { this->iaq_mode_ = iaq_mode; }
void set_state_save_interval(uint32_t interval) { this->state_save_interval_ms_ = interval; } void set_state_save_interval(uint32_t interval) { this->state_save_interval_ms_ = interval; }
void set_supply_voltage(SupplyVoltage supply_voltage) { this->supply_voltage_ = supply_voltage; }
void set_sample_rate(SampleRate sample_rate) { this->sample_rate_ = sample_rate; } void set_sample_rate(SampleRate sample_rate) { this->sample_rate_ = sample_rate; }
void set_temperature_sample_rate(SampleRate sample_rate) { this->temperature_sample_rate_ = sample_rate; } void set_temperature_sample_rate(SampleRate sample_rate) { this->temperature_sample_rate_ = sample_rate; }
@ -109,6 +115,7 @@ class BME680BSECComponent : public Component, public i2c::I2CDevice {
std::string device_id_; std::string device_id_;
float temperature_offset_{0}; float temperature_offset_{0};
IAQMode iaq_mode_{IAQ_MODE_STATIC}; IAQMode iaq_mode_{IAQ_MODE_STATIC};
SupplyVoltage supply_voltage_;
SampleRate sample_rate_{SAMPLE_RATE_LP}; // Core/gas sample rate SampleRate sample_rate_{SAMPLE_RATE_LP}; // Core/gas sample rate
SampleRate temperature_sample_rate_{SAMPLE_RATE_DEFAULT}; SampleRate temperature_sample_rate_{SAMPLE_RATE_DEFAULT};