mirror of
https://github.com/esphome/esphome.git
synced 2024-11-25 16:38:16 +01:00
Add support for 1.8V-powered devices (#6234)
This commit is contained in:
parent
8a52ba3ea3
commit
142b33fc90
3 changed files with 44 additions and 9 deletions
|
@ -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)
|
||||||
|
|
|
@ -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_);
|
||||||
|
|
||||||
|
|
|
@ -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};
|
||||||
|
|
Loading…
Reference in a new issue