05-11-2020 02:16 PM
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
Solved! Go to Solution.
09-18-2020 12:22 PM
I've since had time to package this up a bit better so the component is now available on github at https://github.com/trvrnrth/esphome-bsec-bme680
Of most note is that it no longer relies on a patched arduino framework for ESP8266 boards and instead makes use of a re-packaged libalgobsec.a library which makes the entire setup much easier. This was described at https://community.bosch-sensortec.com/t5/MEMS-sensors-forum/BSEC-library-installation-instructions-f... and I have also PRed those changes at https://github.com/BoschSensortec/BSEC-Arduino-library/pull/51 for review.
01-12-2021 10:01 PM
Hi trvnrth,
I've just realized, that most of your code is writen in python. I'm moving most of my sensors to MicroPython but I'm struggeling with the BME680 (the BSEC C++ code side). Can you provide some pointers on how you integrated the BSEC library into your python code? Or maybe repurpose your code for MicroPython too? I'm sure the community there would highly appreciate it (I'm just a python beginner).
Thanks
Desh
01-23-2021 03:29 PM
The python you see is for the ESPHome code generation framework. The actual sensor handling is still C++. I'm afraid I've not touched MicroPython so can't really help you out there.
06-06-2021 12:47 AM
Hi All,
do anyone know what is the libary id for using the BME688? I am trying to get the same thing running with PlatformIO and tryign to use the BSEC 2.0 library. but it does not seem to download it... ( for the 680, this was in the platform.ini suggested in the thread "BSEC Software Library_ID6979")
Karthik