Dear all,
I am trying to integrate a Bosch BME680 sensor running on the precompiled, closed source "BSEC" library as a custom sensor for ESPHome for an ESP32 for getting an IAQ reading instead of the resistance reading only. In other words, I do not want to use the ESPHome-driver for the sensor but the precompiled Bosch BSEC library wrapped in a custom ESPHome sensor component.
However, I cannot get ESPHome to compile/link the libraries correctly. What am I missing here?
Thank you very much for getting me kickstarted with with the precompiled library on ESPHome.
Best regards,
Chris
Configuration YAML:
esphome:
name: multisensor_1
platform: ESP32
board: nodemcu-32s
includes:
- 'CE_BSEC.h'
libraries:
- 'BSEC Software Library'
i2c:
sda: 21
scl: 22
scan: True
id: id_i2c
sensor:
## this is the BOSCH Implementation
- platform: custom
lambda: |-
auto IAQSensor = new CE_BSEC();
App.register_component(IAQSensor);
return { IAQSensor->TSensor, IAQSensor->PSensor, IAQSensor->HSensor, IAQSensor->AQSensor };
sensors:
- name: "BME680 Temperature"
unit_of_measurement: 'V'
accuracy_decimals: 1
- name: "BME680 Pressure"
unit_of_measurement: 'hPa'
accuracy_decimals: 1
- name: "BME680 relative Humidity"
unit_of_measurement: '%'
accuracy_decimals: 1
- name: "BME680 IAQ"
accuracy_decimals: 1
Custom sensor CE_BSEC.h
#include "esphome.h"
#include "bsec.h"
class CE_BSEC : public PollingComponent, public Sensor {
public:
// constructor
Bsec iaqSensor;
Sensor *TSensor = new Sensor();
Sensor *PSensor = new Sensor();
Sensor *HSensor = new Sensor();
Sensor *AQSensor = new Sensor();
CE_BSEC() : PollingComponent(60000) { }
void setup() override {
// This will be called by App.setup()
iaqSensor.begin(0x77, Wire);
}
void update() override {
float Temp = iaqSensor.temperature;
TSensor->publish_state(Temp);
float Press = iaqSensor.pressure;
PSensor->publish_state(Press);
float Hum = iaqSensor.humidity;
HSensor->publish_state(Hum);
float Qual = iaqSensor.iaq;
AQSensor->publish_state(Qual);
}
};
Compiling .pioenvs/multisensor_1/src/main.cpp.o
Linking .pioenvs/multisensor_1/firmware.elf
.pioenvs/multisensor_1/lib0fa/libBSEC Software Library_ID6979.a(bsec.cpp.o):(.literal._ZN4Bsec11beginCommonEv+0x4): undefined reference to `bsec_init'
.pioenvs/multisensor_1/lib0fa/libBSEC Software Library_ID6979.a(bsec.cpp.o):(.literal._ZN4Bsec11beginCommonEv+0x8): undefined reference to `bsec_get_version'
.pioenvs/multisensor_1/lib0fa/libBSEC Software Library_ID6979.a(bsec.cpp.o): In function `Bsec::beginCommon()':
/config/multisensor_1/.piolibdeps/multisensor_1/BSEC Software Library_ID6979/src/bsec.cpp:257: undefined reference to `bsec_init'
.pioenvs/multisensor_1/lib0fa/libBSEC Software Library_ID6979.a(bsec.cpp.o): In function `Bsec::getVersion()':
/config/multisensor_1/.piolibdeps/multisensor_1/BSEC Software Library_ID6979/src/bsec.cpp:257: undefined reference to `bsec_get_version'
collect2: error: ld returned 1 exit status
*** [.pioenvs/multisensor_1/firmware.elf] Error 1