mirror of
https://github.com/esphome/esphome.git
synced 2024-12-01 03:04:12 +01:00
temporary channels logging
This commit is contained in:
parent
1061629b16
commit
210535d69f
2 changed files with 71 additions and 95 deletions
|
@ -7,6 +7,34 @@ namespace as7343 {
|
||||||
|
|
||||||
static const char *const TAG = "as7343";
|
static const char *const TAG = "as7343";
|
||||||
|
|
||||||
|
static constexpr uint8_t NUM_USEFUL_CHANNELS = 13;
|
||||||
|
static constexpr uint8_t CHANNEL_IDX[NUM_USEFUL_CHANNELS] = {
|
||||||
|
AS7343_CHANNEL_405_F1, AS7343_CHANNEL_425_F2, AS7343_CHANNEL_450_FZ, AS7343_CHANNEL_475_F3, AS7343_CHANNEL_515_F4,
|
||||||
|
AS7343_CHANNEL_555_FY, AS7343_CHANNEL_550_F5, AS7343_CHANNEL_600_FXL, AS7343_CHANNEL_640_F6, AS7343_CHANNEL_690_F7,
|
||||||
|
AS7343_CHANNEL_745_F8, AS7343_CHANNEL_855_NIR, AS7343_CHANNEL_CLEAR,
|
||||||
|
};
|
||||||
|
static constexpr float CHANNEL_SENS[NUM_USEFUL_CHANNELS] = {0.19402, 0.26647, 0.35741, 0.41753, 0.52235,
|
||||||
|
0.59633, 0.56242, 0.65645, 0.68882, 0.79980,
|
||||||
|
0.70423, 0.40366, 0.38516};
|
||||||
|
static constexpr float CHANNEL_NM[NUM_USEFUL_CHANNELS] = {405, 425, 450, 475, 515, 555, 550,
|
||||||
|
600, 640, 690, 745, 855, 718};
|
||||||
|
static constexpr float CHANNEL_NM_WIDTH[NUM_USEFUL_CHANNELS] = {30, 22, 55, 30, 40, 100, 35, 80, 50, 55, 60, 54, 0};
|
||||||
|
|
||||||
|
static constexpr float CONST_H = 6.6260695e-34f;
|
||||||
|
static constexpr float CONST_C = 299792458;
|
||||||
|
// constexpr std::array<float, NUM_USEFUL_CHANNELS> fill_photon_energy() {
|
||||||
|
// std::array<float, NUM_USEFUL_CHANNELS> v{0};
|
||||||
|
// for(int i = 0; i < NUM_USEFUL_CHANNELS; ++i) {
|
||||||
|
// v[i] = CHANNEL_NM[i]> 0 ? CONST_H * CONST_C / (CHANNEL_NM[i] * 1e9) : 0;
|
||||||
|
// }
|
||||||
|
// return v;
|
||||||
|
// }
|
||||||
|
|
||||||
|
// constexpr std::array<float, NUM_USEFUL_CHANNELS> v = fill_photon_energy();
|
||||||
|
static constexpr float PHOTON_ENERGIES[NUM_USEFUL_CHANNELS] = {
|
||||||
|
4.9048E-19f, 4.67399E-19f, 4.41432E-19f, 4.18199E-19f, 3.85718E-19f, 3.57918E-19f, 3.61172E-19f,
|
||||||
|
3.31074E-19f, 3.10382E-19f, 2.87891E-19f, 2.66637E-19f, 2.32333E-19f, 2.76664E-19f};
|
||||||
|
|
||||||
void AS7343Component::setup() {
|
void AS7343Component::setup() {
|
||||||
ESP_LOGCONFIG(TAG, "Setting up AS7343...");
|
ESP_LOGCONFIG(TAG, "Setting up AS7343...");
|
||||||
LOG_I2C_DEVICE(this);
|
LOG_I2C_DEVICE(this);
|
||||||
|
@ -73,6 +101,20 @@ float AS7343Component::get_setup_priority() const { return setup_priority::DATA;
|
||||||
void AS7343Component::update() {
|
void AS7343Component::update() {
|
||||||
this->read_channels(this->channel_readings_);
|
this->read_channels(this->channel_readings_);
|
||||||
|
|
||||||
|
{
|
||||||
|
ESP_LOGD(TAG, "nm: %.0f, %.0f, %.0f, %.0f, %.0f, %.0f, %.0f, %.0f, %.0f, %.0f, %.0f, %.0f, %.0f, ", CHANNEL_NM[0],
|
||||||
|
CHANNEL_NM[1], CHANNEL_NM[2], CHANNEL_NM[3], CHANNEL_NM[4], CHANNEL_NM[5], CHANNEL_NM[6], CHANNEL_NM[7],
|
||||||
|
CHANNEL_NM[8], CHANNEL_NM[9], CHANNEL_NM[10], CHANNEL_NM[11], CHANNEL_NM[12]);
|
||||||
|
ESP_LOGD(TAG, "counts: %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, ",
|
||||||
|
this->channel_readings_[CHANNEL_IDX[0]], this->channel_readings_[CHANNEL_IDX[1]],
|
||||||
|
this->channel_readings_[CHANNEL_IDX[2]], this->channel_readings_[CHANNEL_IDX[3]],
|
||||||
|
this->channel_readings_[CHANNEL_IDX[4]], this->channel_readings_[CHANNEL_IDX[5]],
|
||||||
|
this->channel_readings_[CHANNEL_IDX[6]], this->channel_readings_[CHANNEL_IDX[7]],
|
||||||
|
this->channel_readings_[CHANNEL_IDX[8]], this->channel_readings_[CHANNEL_IDX[9]],
|
||||||
|
this->channel_readings_[CHANNEL_IDX[10]], this->channel_readings_[CHANNEL_IDX[11]],
|
||||||
|
this->channel_readings_[CHANNEL_IDX[12]]);
|
||||||
|
}
|
||||||
|
|
||||||
if (this->f1_ != nullptr) {
|
if (this->f1_ != nullptr) {
|
||||||
this->f1_->publish_state(this->channel_readings_[AS7343_CHANNEL_405_F1]);
|
this->f1_->publish_state(this->channel_readings_[AS7343_CHANNEL_405_F1]);
|
||||||
}
|
}
|
||||||
|
@ -140,108 +182,40 @@ bool AS7343Component::setup_astep(uint16_t astep) {
|
||||||
return this->write_byte_16((uint8_t) AS7343Registers::ASTEP_LSB, swap_bytes(astep));
|
return this->write_byte_16((uint8_t) AS7343Registers::ASTEP_LSB, swap_bytes(astep));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
float AS7343Component::calculate_par_v1() {
|
||||||
|
float par = 0;
|
||||||
|
for (uint8_t i = 0; i < NUM_USEFUL_CHANNELS; i++) {
|
||||||
|
par += this->channel_readings_[CHANNEL_IDX[i]] * CHANNEL_SENS[i];
|
||||||
|
}
|
||||||
|
return par;
|
||||||
|
}
|
||||||
|
|
||||||
|
float AS7343Component::calculate_par_v2() {
|
||||||
|
// static const float CONST_H = 6.6260695e-34f;
|
||||||
|
// static const float CONST_C = 299792458;
|
||||||
|
// static float photon_energy[NUM_USEFUL_CHANNELS];
|
||||||
|
// float max_photon_energy = 0;
|
||||||
|
// for (uint8_t i = 0; i < NUM_USEFUL_CHANNELS; i++) {
|
||||||
|
// // calculate photon energy
|
||||||
|
// float energy = CONST_H * CONST_C / (CHANNEL_NM[i] * 1e-9);
|
||||||
|
// photon_energy[i] = energy;
|
||||||
|
// if (energy > max_photon_energy) {
|
||||||
|
// max_photon_energy = energy;
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// constexpr std::array<float, NUM_USEFUL_CHANNELS> v = fill_photon_energy();
|
||||||
|
|
||||||
|
float par = 0;
|
||||||
|
return par;
|
||||||
|
}
|
||||||
|
|
||||||
bool AS7343Component::read_channels(uint16_t *data) {
|
bool AS7343Component::read_channels(uint16_t *data) {
|
||||||
this->enable_spectral_measurement(true);
|
this->enable_spectral_measurement(true);
|
||||||
this->wait_for_data();
|
this->wait_for_data();
|
||||||
|
|
||||||
return this->read_bytes_16((uint8_t) AS7343Registers::DATA_O, this->channel_readings_, AS7343_NUM_CHANNELS);
|
return this->read_bytes_16((uint8_t) AS7343Registers::DATA_O, this->channel_readings_, AS7343_NUM_CHANNELS);
|
||||||
|
|
||||||
// this->set_smux_low_channels(true);
|
|
||||||
// this->enable_spectral_measurement(true);
|
|
||||||
// this->wait_for_data();
|
|
||||||
// bool low_success = this->read_bytes_16(AS7343_CH0_DATA_L, data, 6);
|
|
||||||
|
|
||||||
// this->set_smux_low_channels(false);
|
|
||||||
// this->enable_spectral_measurement(true);
|
|
||||||
// this->wait_for_data();
|
|
||||||
// bool high_sucess = this->read_bytes_16(AS7343_CH0_DATA_L, &data[6], 6);
|
|
||||||
|
|
||||||
// return low_success && high_sucess;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// void AS7343Component::set_smux_low_channels(bool enable) {
|
|
||||||
// // this->enable_spectral_measurement(false);
|
|
||||||
// // this->set_smux_command(AS7343_SMUX_CMD_WRITE);
|
|
||||||
|
|
||||||
// // if (enable) {
|
|
||||||
// // this->configure_smux_low_channels();
|
|
||||||
|
|
||||||
// // } else {
|
|
||||||
// // this->configure_smux_high_channels();
|
|
||||||
// // }
|
|
||||||
// // this->enable_smux();
|
|
||||||
// }
|
|
||||||
|
|
||||||
// bool AS7343Component::set_smux_command(AS7343SmuxCommand command) {
|
|
||||||
// // uint8_t data = command << 3; // Write to bits 4:3 of the register
|
|
||||||
// // return this->write_byte(AS7343_CFG6, data);
|
|
||||||
// }
|
|
||||||
|
|
||||||
// void AS7343Component::configure_smux_low_channels() {
|
|
||||||
// // SMUX Config for F1,F2,F3,F4,NIR,Clear
|
|
||||||
// // this->write_byte(0x00, 0x30); // F3 left set to ADC2
|
|
||||||
// // this->write_byte(0x01, 0x01); // F1 left set to ADC0
|
|
||||||
// // this->write_byte(0x02, 0x00); // Reserved or disabled
|
|
||||||
// // this->write_byte(0x03, 0x00); // F8 left disabled
|
|
||||||
// // this->write_byte(0x04, 0x00); // F6 left disabled
|
|
||||||
// // this->write_byte(0x05, 0x42); // F4 left connected to ADC3/f2 left connected to ADC1
|
|
||||||
// // this->write_byte(0x06, 0x00); // F5 left disbled
|
|
||||||
// // this->write_byte(0x07, 0x00); // F7 left disbled
|
|
||||||
// // this->write_byte(0x08, 0x50); // CLEAR connected to ADC4
|
|
||||||
// // this->write_byte(0x09, 0x00); // F5 right disabled
|
|
||||||
// // this->write_byte(0x0A, 0x00); // F7 right disabled
|
|
||||||
// // this->write_byte(0x0B, 0x00); // Reserved or disabled
|
|
||||||
// // this->write_byte(0x0C, 0x20); // F2 right connected to ADC1
|
|
||||||
// // this->write_byte(0x0D, 0x04); // F4 right connected to ADC3
|
|
||||||
// // this->write_byte(0x0E, 0x00); // F6/F8 right disabled
|
|
||||||
// // this->write_byte(0x0F, 0x30); // F3 right connected to AD2
|
|
||||||
// // this->write_byte(0x10, 0x01); // F1 right connected to AD0
|
|
||||||
// // this->write_byte(0x11, 0x50); // CLEAR right connected to AD4
|
|
||||||
// // this->write_byte(0x12, 0x00); // Reserved or disabled
|
|
||||||
// // this->write_byte(0x13, 0x06); // NIR connected to ADC5
|
|
||||||
// }
|
|
||||||
|
|
||||||
// void AS7343Component::configure_smux_high_channels() {
|
|
||||||
// // SMUX Config for F5,F6,F7,F8,NIR,Clear
|
|
||||||
// // this->write_byte(0x00, 0x00); // F3 left disable
|
|
||||||
// // this->write_byte(0x01, 0x00); // F1 left disable
|
|
||||||
// // this->write_byte(0x02, 0x00); // reserved/disable
|
|
||||||
// // this->write_byte(0x03, 0x40); // F8 left connected to ADC3
|
|
||||||
// // this->write_byte(0x04, 0x02); // F6 left connected to ADC1
|
|
||||||
// // this->write_byte(0x05, 0x00); // F4/ F2 disabled
|
|
||||||
// // this->write_byte(0x06, 0x10); // F5 left connected to ADC0
|
|
||||||
// // this->write_byte(0x07, 0x03); // F7 left connected to ADC2
|
|
||||||
// // this->write_byte(0x08, 0x50); // CLEAR Connected to ADC4
|
|
||||||
// // this->write_byte(0x09, 0x10); // F5 right connected to ADC0
|
|
||||||
// // this->write_byte(0x0A, 0x03); // F7 right connected to ADC2
|
|
||||||
// // this->write_byte(0x0B, 0x00); // Reserved or disabled
|
|
||||||
// // this->write_byte(0x0C, 0x00); // F2 right disabled
|
|
||||||
// // this->write_byte(0x0D, 0x00); // F4 right disabled
|
|
||||||
// // this->write_byte(0x0E, 0x24); // F8 right connected to ADC2/ F6 right connected to ADC1
|
|
||||||
// // this->write_byte(0x0F, 0x00); // F3 right disabled
|
|
||||||
// // this->write_byte(0x10, 0x00); // F1 right disabled
|
|
||||||
// // this->write_byte(0x11, 0x50); // CLEAR right connected to AD4
|
|
||||||
// // this->write_byte(0x12, 0x00); // Reserved or disabled
|
|
||||||
// // this->write_byte(0x13, 0x06); // NIR connected to ADC5
|
|
||||||
// }
|
|
||||||
|
|
||||||
// bool AS7343Component::enable_smux() {
|
|
||||||
// // this->set_register_bit(AS7343_ENABLE, 4);
|
|
||||||
|
|
||||||
// // uint16_t timeout = 1000;
|
|
||||||
// // for (uint16_t time = 0; time < timeout; time++) {
|
|
||||||
// // // The SMUXEN bit is cleared once the SMUX operation is finished
|
|
||||||
// // bool smuxen = this->read_register_bit(AS7343_ENABLE, 4);
|
|
||||||
// // if (!smuxen) {
|
|
||||||
// // return true;
|
|
||||||
// // }
|
|
||||||
|
|
||||||
// // delay(1);
|
|
||||||
// // }
|
|
||||||
|
|
||||||
// // return false;
|
|
||||||
// }
|
|
||||||
|
|
||||||
bool AS7343Component::wait_for_data(uint16_t timeout) {
|
bool AS7343Component::wait_for_data(uint16_t timeout) {
|
||||||
for (uint16_t time = 0; time < timeout; time++) {
|
for (uint16_t time = 0; time < timeout; time++) {
|
||||||
if (this->is_data_ready()) {
|
if (this->is_data_ready()) {
|
||||||
|
|
|
@ -94,6 +94,8 @@ class AS7343Component : public PollingComponent, public i2c::I2CDevice {
|
||||||
|
|
||||||
// uint16_t read_channel(AS7343AdcChannel channel);
|
// uint16_t read_channel(AS7343AdcChannel channel);
|
||||||
bool read_channels(uint16_t *data);
|
bool read_channels(uint16_t *data);
|
||||||
|
float calculate_par_v1();
|
||||||
|
float calculate_par_v2();
|
||||||
// void set_smux_low_channels(bool enable);
|
// void set_smux_low_channels(bool enable);
|
||||||
// bool set_smux_command(AS7343SmuxCommand command);
|
// bool set_smux_command(AS7343SmuxCommand command);
|
||||||
// void configure_smux_low_channels();
|
// void configure_smux_low_channels();
|
||||||
|
|
Loading…
Reference in a new issue