Bosch Sensortec Community

    cancel
    Showing results for 
    Search instead for 
    Did you mean: 
    SOLVED

    BME680 on ESPHome using Bosch's BSEC library

    BME680 on ESPHome using Bosch's BSEC library

    ChrisE
    Occasional Visitor

    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

     

    18 REPLIES 18

    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.

    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

    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.

    Karthikg
    Established Member

    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

     

    Icon--AD-black-48x48Icon--address-consumer-data-black-48x48Icon--appointment-black-48x48Icon--back-left-black-48x48Icon--calendar-black-48x48Icon--center-alignedIcon--Checkbox-checkIcon--clock-black-48x48Icon--close-black-48x48Icon--compare-black-48x48Icon--confirmation-black-48x48Icon--dealer-details-black-48x48Icon--delete-black-48x48Icon--delivery-black-48x48Icon--down-black-48x48Icon--download-black-48x48Ic-OverlayAlertIcon--externallink-black-48x48Icon-Filledforward-right_adjustedIcon--grid-view-black-48x48IC_gd_Check-Circle170821_Icons_Community170823_Bosch_Icons170823_Bosch_Icons170821_Icons_CommunityIC-logout170821_Icons_Community170825_Bosch_Icons170821_Icons_CommunityIC-shopping-cart2170821_Icons_CommunityIC-upIC_UserIcon--imageIcon--info-i-black-48x48Icon--left-alignedIcon--Less-minimize-black-48x48Icon-FilledIcon--List-Check-grennIcon--List-Check-blackIcon--List-Cross-blackIcon--list-view-mobile-black-48x48Icon--list-view-black-48x48Icon--More-Maximize-black-48x48Icon--my-product-black-48x48Icon--newsletter-black-48x48Icon--payment-black-48x48Icon--print-black-48x48Icon--promotion-black-48x48Icon--registration-black-48x48Icon--Reset-black-48x48Icon--right-alignedshare-circle1Icon--share-black-48x48Icon--shopping-bag-black-48x48Icon-shopping-cartIcon--start-play-black-48x48Icon--store-locator-black-48x48Ic-OverlayAlertIcon--summary-black-48x48tumblrIcon-FilledvineIc-OverlayAlertwhishlist