mirror of
https://github.com/wled/WLED.git
synced 2025-07-21 09:46:32 +00:00
Merge pull request #4620 from gsieben/USERMOD-BME68X-Update-to-Version-1.0.2
Update USERMOD BME68X to version 1.0.2
This commit is contained in:
commit
b0b3196e52
@ -2,20 +2,17 @@
|
|||||||
* @file usermod_BMW68X.h
|
* @file usermod_BMW68X.h
|
||||||
* @author Gabriel A. Sieben (GeoGab)
|
* @author Gabriel A. Sieben (GeoGab)
|
||||||
* @brief Usermod for WLED to implement the BME680/BME688 sensor
|
* @brief Usermod for WLED to implement the BME680/BME688 sensor
|
||||||
* @version 1.0.0
|
* @version 1.0.2
|
||||||
* @date 19 Feb 2024
|
* @date 28 March 2025
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#warning ********************Included USERMOD_BME68X ********************
|
|
||||||
|
|
||||||
#define UMOD_DEVICE "ESP32" // NOTE - Set your hardware here
|
#define UMOD_DEVICE "ESP32" // NOTE - Set your hardware here
|
||||||
#define HARDWARE_VERSION "1.0" // NOTE - Set your hardware version here
|
#define HARDWARE_VERSION "1.0" // NOTE - Set your hardware version here
|
||||||
#define UMOD_BME680X_SW_VERSION "1.0.1" // NOTE - Version of the User Mod
|
#define UMOD_BME680X_SW_VERSION "1.0.2" // NOTE - Version of the User Mod
|
||||||
#define CALIB_FILE_NAME "/BME680X-Calib.hex" // NOTE - Calibration file name
|
#define CALIB_FILE_NAME "/BME680X-Calib.hex" // NOTE - Calibration file name
|
||||||
#define UMOD_NAME "BME680X" // NOTE - User module name
|
#define UMOD_NAME "BME680X" // NOTE - User module name
|
||||||
#define UMOD_DEBUG_NAME "UM-BME680X: " // NOTE - Debug print module name addon
|
#define UMOD_DEBUG_NAME "UM-BME680X: " // NOTE - Debug print module name addon
|
||||||
|
|
||||||
/* Debug Print Text Coloring */
|
|
||||||
#define ESC "\033"
|
#define ESC "\033"
|
||||||
#define ESC_CSI ESC "["
|
#define ESC_CSI ESC "["
|
||||||
#define ESC_STYLE_RESET ESC_CSI "0m"
|
#define ESC_STYLE_RESET ESC_CSI "0m"
|
||||||
@ -33,10 +30,10 @@
|
|||||||
|
|
||||||
/* Debug Print Special Text */
|
/* Debug Print Special Text */
|
||||||
#define INFO_COLUMN ESC_CURSOR_COLUMN(60)
|
#define INFO_COLUMN ESC_CURSOR_COLUMN(60)
|
||||||
#define OK INFO_COLUMN "[" ESC_FGCOLOR_GREEN "OK" ESC_STYLE_RESET "]"
|
#define GOGAB_OK INFO_COLUMN "[" ESC_FGCOLOR_GREEN "OK" ESC_STYLE_RESET "]"
|
||||||
#define FAIL INFO_COLUMN "[" ESC_FGCOLOR_RED "FAIL" ESC_STYLE_RESET "]"
|
#define GOGAB_FAIL INFO_COLUMN "[" ESC_FGCOLOR_RED "FAIL" ESC_STYLE_RESET "]"
|
||||||
#define WARN INFO_COLUMN "[" ESC_FGCOLOR_YELLOW "WARN" ESC_STYLE_RESET "]"
|
#define GOGAB_WARN INFO_COLUMN "[" ESC_FGCOLOR_YELLOW "WARN" ESC_STYLE_RESET "]"
|
||||||
#define DONE INFO_COLUMN "[" ESC_FGCOLOR_CYAN "DONE" ESC_STYLE_RESET "]"
|
#define GOGAB_DONE INFO_COLUMN "[" ESC_FGCOLOR_CYAN "DONE" ESC_STYLE_RESET "]"
|
||||||
|
|
||||||
#include "bsec.h" // Bosch sensor library
|
#include "bsec.h" // Bosch sensor library
|
||||||
#include "wled.h"
|
#include "wled.h"
|
||||||
@ -328,7 +325,7 @@ void UsermodBME68X::setup() {
|
|||||||
/* Check, if i2c is activated */
|
/* Check, if i2c is activated */
|
||||||
if (i2c_scl < 0 || i2c_sda < 0) {
|
if (i2c_scl < 0 || i2c_sda < 0) {
|
||||||
settings.enabled = false; // Disable usermod once i2c is not running
|
settings.enabled = false; // Disable usermod once i2c is not running
|
||||||
DEBUG_PRINTLN(F(UMOD_DEBUG_NAME "I2C is not activated. Please activate I2C first." FAIL));
|
DEBUG_PRINTLN(F(UMOD_DEBUG_NAME "I2C is not activated. Please activate I2C first." GOGAB_FAIL));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -352,7 +349,7 @@ void UsermodBME68X::setup() {
|
|||||||
loadState(); // Load the old calibration data
|
loadState(); // Load the old calibration data
|
||||||
checkIaqSensorStatus(); // Check the sensor status
|
checkIaqSensorStatus(); // Check the sensor status
|
||||||
// HomeAssistantDiscovery();
|
// HomeAssistantDiscovery();
|
||||||
DEBUG_PRINTLN(F(INFO_COLUMN DONE));
|
DEBUG_PRINTLN(F(INFO_COLUMN GOGAB_DONE));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -564,7 +561,7 @@ void UsermodBME68X::HomeAssistantDiscovery() {
|
|||||||
MQTT_PublishHASensor(_nameStabStatus, "", _unitNone, settings.publishSensorState - 1, 1);
|
MQTT_PublishHASensor(_nameStabStatus, "", _unitNone, settings.publishSensorState - 1, 1);
|
||||||
MQTT_PublishHASensor(_nameRunInStatus, "", _unitNone, settings.publishSensorState - 1, 1);
|
MQTT_PublishHASensor(_nameRunInStatus, "", _unitNone, settings.publishSensorState - 1, 1);
|
||||||
|
|
||||||
DEBUG_PRINTLN(UMOD_DEBUG_NAME DONE);
|
DEBUG_PRINTLN(UMOD_DEBUG_NAME GOGAB_DONE);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -750,7 +747,7 @@ void UsermodBME68X::addToConfig(JsonObject& root) {
|
|||||||
sensors_json[FPSTR(_nameVoc)] = settings.decimals.Voc;
|
sensors_json[FPSTR(_nameVoc)] = settings.decimals.Voc;
|
||||||
sensors_json[FPSTR(_nameGasPer)] = settings.decimals.gasPerc;
|
sensors_json[FPSTR(_nameGasPer)] = settings.decimals.gasPerc;
|
||||||
|
|
||||||
DEBUG_PRINTLN(F(OK));
|
DEBUG_PRINTLN(F(GOGAB_OK));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -831,7 +828,7 @@ bool UsermodBME68X::readFromConfig(JsonObject& root) {
|
|||||||
configComplete &= getJsonValue(top["Sensors"][FPSTR(_nameVoc)], settings.decimals.Voc, 0 );
|
configComplete &= getJsonValue(top["Sensors"][FPSTR(_nameVoc)], settings.decimals.Voc, 0 );
|
||||||
configComplete &= getJsonValue(top["Sensors"][FPSTR(_nameGasPer)], settings.decimals.gasPerc, 0 );
|
configComplete &= getJsonValue(top["Sensors"][FPSTR(_nameGasPer)], settings.decimals.gasPerc, 0 );
|
||||||
|
|
||||||
DEBUG_PRINTLN(F(OK));
|
DEBUG_PRINTLN(F(GOGAB_OK));
|
||||||
|
|
||||||
/* Set the selected temperature unit */
|
/* Set the selected temperature unit */
|
||||||
if (settings.tempScale) {
|
if (settings.tempScale) {
|
||||||
@ -845,10 +842,10 @@ bool UsermodBME68X::readFromConfig(JsonObject& root) {
|
|||||||
DEBUG_PRINT(F(UMOD_DEBUG_NAME "Deleting Calibration File"));
|
DEBUG_PRINT(F(UMOD_DEBUG_NAME "Deleting Calibration File"));
|
||||||
flags.DeleteCaibration = false;
|
flags.DeleteCaibration = false;
|
||||||
if (WLED_FS.remove(CALIB_FILE_NAME)) {
|
if (WLED_FS.remove(CALIB_FILE_NAME)) {
|
||||||
DEBUG_PRINTLN(F(OK));
|
DEBUG_PRINTLN(F(GOGAB_OK));
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
DEBUG_PRINTLN(F(FAIL));
|
DEBUG_PRINTLN(F(GOGAB_FAIL));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1026,11 +1023,11 @@ void UsermodBME68X::checkIaqSensorStatus() {
|
|||||||
flags.InitSuccessful = false;
|
flags.InitSuccessful = false;
|
||||||
if (iaqSensor.bsecStatus < BSEC_OK) {
|
if (iaqSensor.bsecStatus < BSEC_OK) {
|
||||||
InfoPageStatusLine += " Error Code : " + String(iaqSensor.bsecStatus);
|
InfoPageStatusLine += " Error Code : " + String(iaqSensor.bsecStatus);
|
||||||
DEBUG_PRINTLN(FAIL);
|
DEBUG_PRINTLN(GOGAB_FAIL);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
InfoPageStatusLine += " Warning Code : " + String(iaqSensor.bsecStatus);
|
InfoPageStatusLine += " Warning Code : " + String(iaqSensor.bsecStatus);
|
||||||
DEBUG_PRINTLN(WARN);
|
DEBUG_PRINTLN(GOGAB_WARN);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
@ -1041,16 +1038,16 @@ void UsermodBME68X::checkIaqSensorStatus() {
|
|||||||
flags.InitSuccessful = false;
|
flags.InitSuccessful = false;
|
||||||
if (iaqSensor.bme68xStatus < BME68X_OK) {
|
if (iaqSensor.bme68xStatus < BME68X_OK) {
|
||||||
InfoPageStatusLine += "error code: " + String(iaqSensor.bme68xStatus);
|
InfoPageStatusLine += "error code: " + String(iaqSensor.bme68xStatus);
|
||||||
DEBUG_PRINTLN(FAIL);
|
DEBUG_PRINTLN(GOGAB_FAIL);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
InfoPageStatusLine += "warning code: " + String(iaqSensor.bme68xStatus);
|
InfoPageStatusLine += "warning code: " + String(iaqSensor.bme68xStatus);
|
||||||
DEBUG_PRINTLN(WARN);
|
DEBUG_PRINTLN(GOGAB_WARN);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
InfoPageStatusLine += F("OK");
|
InfoPageStatusLine += F("OK");
|
||||||
DEBUG_PRINTLN(OK);
|
DEBUG_PRINTLN(GOGAB_OK);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1063,12 +1060,12 @@ void UsermodBME68X::loadState() {
|
|||||||
DEBUG_PRINT(F(UMOD_DEBUG_NAME "Read the calibration file: "));
|
DEBUG_PRINT(F(UMOD_DEBUG_NAME "Read the calibration file: "));
|
||||||
File file = WLED_FS.open(CALIB_FILE_NAME, FILE_READ);
|
File file = WLED_FS.open(CALIB_FILE_NAME, FILE_READ);
|
||||||
if (!file) {
|
if (!file) {
|
||||||
DEBUG_PRINTLN(FAIL);
|
DEBUG_PRINTLN(GOGAB_FAIL);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
file.read(bsecState, BSEC_MAX_STATE_BLOB_SIZE);
|
file.read(bsecState, BSEC_MAX_STATE_BLOB_SIZE);
|
||||||
file.close();
|
file.close();
|
||||||
DEBUG_PRINTLN(OK);
|
DEBUG_PRINTLN(GOGAB_OK);
|
||||||
iaqSensor.setState(bsecState);
|
iaqSensor.setState(bsecState);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1084,14 +1081,14 @@ void UsermodBME68X::saveState() {
|
|||||||
DEBUG_PRINT(F(UMOD_DEBUG_NAME "Write the calibration file "));
|
DEBUG_PRINT(F(UMOD_DEBUG_NAME "Write the calibration file "));
|
||||||
File file = WLED_FS.open(CALIB_FILE_NAME, FILE_WRITE);
|
File file = WLED_FS.open(CALIB_FILE_NAME, FILE_WRITE);
|
||||||
if (!file) {
|
if (!file) {
|
||||||
DEBUG_PRINTLN(FAIL);
|
DEBUG_PRINTLN(GOGAB_FAIL);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
iaqSensor.getState(bsecState);
|
iaqSensor.getState(bsecState);
|
||||||
file.write(bsecState, BSEC_MAX_STATE_BLOB_SIZE);
|
file.write(bsecState, BSEC_MAX_STATE_BLOB_SIZE);
|
||||||
file.close();
|
file.close();
|
||||||
stateUpdateCounter++;
|
stateUpdateCounter++;
|
||||||
DEBUG_PRINTF("(saved %d times)" OK "\n", stateUpdateCounter);
|
DEBUG_PRINTF("(saved %d times)" GOGAB_OK "\n", stateUpdateCounter);
|
||||||
flags.SaveState = false; // Clear save state flag
|
flags.SaveState = false; // Clear save state flag
|
||||||
|
|
||||||
char contbuffer[30];
|
char contbuffer[30];
|
||||||
|
@ -1,53 +1,58 @@
|
|||||||
# Usermod BME68X
|
# Usermod BME68X
|
||||||
|
|
||||||
This usermod was developed for a BME680/BME68X sensor. The BME68X is not compatible with the BME280/BMP280 chip. It has its own library. The original 'BSEC Software Library' from Bosch was used to develop the code. The measured values are displayed on the WLED info page.
|
This usermod was developed for a BME680/BME68X sensor. The BME68X is not compatible with the BME280/BMP280 chip. It has its own library. The original 'BSEC Software Library' from Bosch was used to develop the code. The measured values are displayed on the WLED info page.
|
||||||
|
|
||||||
<p align="center"><img src="pics/pic1.png" style="width:60%;"></p>
|
<p align="center"><img src="pics/pic1.png" style="width:60%;"></p>
|
||||||
|
|
||||||
In addition, the values are published on MQTT if this is active. The topic used for this is: 'wled/[MQTT Client ID]'. The Client ID is set in the WLED MQTT settings.
|
In addition, the values are published on MQTT if this is active. The topic used for this is: 'wled/[MQTT Client ID]'. The Client ID is set in the WLED MQTT settings.
|
||||||
|
|
||||||
<p align="center"><img src="pics/pic2.png"></p>
|
<p align="center"><img src="pics/pic2.png"></p>
|
||||||
|
|
||||||
If you use HomeAssistance discovery, the device tree for HomeAssistance is created. This is published under the topic 'homeassistant/sensor/[MQTT Client ID]' via MQTT.
|
If you use HomeAssistance discovery, the device tree for HomeAssistance is created. This is published under the topic 'homeassistant/sensor/[MQTT Client ID]' via MQTT.
|
||||||
|
|
||||||
<p align="center"><img src="pics/pic3.png"></p>
|
<p align="center"><img src="pics/pic3.png"></p>
|
||||||
|
|
||||||
A device with the following sensors appears in HomeAssistant. Please note that MQTT must be activated in HomeAssistant.
|
A device with the following sensors appears in HomeAssistant. Please note that MQTT must be activated in HomeAssistant.
|
||||||
|
|
||||||
<p align="center"><img src="pics/pic4.png" style="width:60%;"></p>
|
<p align="center"><img src="pics/pic4.png" style="width:60%;"></p>
|
||||||
|
|
||||||
|
|
||||||
## Features
|
## Features
|
||||||
|
|
||||||
Raw sensor types
|
Raw sensor types
|
||||||
|
|
||||||
Sensor Accuracy Scale Range
|
Sensor Accuracy Scale Range
|
||||||
--------------------------------------------------------------------------------------------------
|
-----------------------------
|
||||||
|
|
||||||
Temperature +/- 1.0 °C/°F -40 to 85 °C
|
Temperature +/- 1.0 °C/°F -40 to 85 °C
|
||||||
Humidity +/- 3 % 0 to 100 %
|
Humidity +/- 3 % 0 to 100 %
|
||||||
Pressure +/- 1 hPa 300 to 1100 hPa
|
Pressure +/- 1 hPa 300 to 1100 hPa
|
||||||
Gas Resistance Ohm
|
Gas Resistance Ohm
|
||||||
|
|
||||||
The BSEC Library calculates the following values via the gas resistance
|
The BSEC Library calculates the following values via the gas resistance
|
||||||
|
|
||||||
Sensor Accuracy Scale Range
|
Sensor Accuracy Scale Range
|
||||||
--------------------------------------------------------------------------------------------------
|
-----------------------------
|
||||||
|
|
||||||
IAQ value between 0 and 500
|
IAQ value between 0 and 500
|
||||||
Static IAQ same as IAQ but for permanently installed devices
|
Static IAQ same as IAQ but for permanently installed devices
|
||||||
CO2 PPM
|
CO2 PPM
|
||||||
VOC PPM
|
VOC PPM
|
||||||
Gas-Percentage %
|
Gas-Percentage %
|
||||||
|
|
||||||
|
|
||||||
In addition the usermod calculates
|
In addition the usermod calculates
|
||||||
|
|
||||||
Sensor Accuracy Scale Range
|
Sensor Accuracy Scale Range
|
||||||
--------------------------------------------------------------------------------------------------
|
-----------------------------
|
||||||
|
|
||||||
Absolute humidity g/m³
|
Absolute humidity g/m³
|
||||||
Dew point °C/°F
|
Dew point °C/°F
|
||||||
|
|
||||||
### IAQ (Indoor Air Quality)
|
### IAQ (Indoor Air Quality)
|
||||||
|
|
||||||
The IAQ is divided into the following value groups.
|
The IAQ is divided into the following value groups.
|
||||||
|
|
||||||
<p align="center"><img src="pics/pic5.png"></p>
|
<p align="center"><img src="pics/pic5.png"></p>
|
||||||
|
|
||||||
For more detailed information, please consult the enclosed Bosch product description (BME680.pdf).
|
For more detailed information, please consult the enclosed Bosch product description (BME680.pdf).
|
||||||
|
|
||||||
|
|
||||||
## Calibration of the device
|
## Calibration of the device
|
||||||
|
|
||||||
The gas sensor of the BME68X must be calibrated. This differs from the BME280, which does not require any calibration.
|
The gas sensor of the BME68X must be calibrated. This differs from the BME280, which does not require any calibration.
|
||||||
@ -67,10 +72,10 @@ The IAQ index is therefore only meaningful if IAQ Accuracy = 3. In addition to t
|
|||||||
|
|
||||||
Reasonably reliable values are therefore only achieved when accuracy displays the value 3.
|
Reasonably reliable values are therefore only achieved when accuracy displays the value 3.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## Settings
|
## Settings
|
||||||
|
|
||||||
The settings of the usermods are set in the usermod section of wled.
|
The settings of the usermods are set in the usermod section of wled.
|
||||||
|
|
||||||
<p align="center"><img src="pics/pic6.png"></p>
|
<p align="center"><img src="pics/pic6.png"></p>
|
||||||
|
|
||||||
The possible settings are
|
The possible settings are
|
||||||
@ -88,6 +93,7 @@ The possible settings are
|
|||||||
- **Del Calibration Hist:** If a check mark is set here, the calibration file saved in the file system is deleted when the settings are saved.
|
- **Del Calibration Hist:** If a check mark is set here, the calibration file saved in the file system is deleted when the settings are saved.
|
||||||
|
|
||||||
### Sensors
|
### Sensors
|
||||||
|
|
||||||
Applies to all sensors. The number of decimal places is set here. If the sensor is set to -1, it will no longer be published. In addition, the IAQ values can be activated here in verbal form.
|
Applies to all sensors. The number of decimal places is set here. If the sensor is set to -1, it will no longer be published. In addition, the IAQ values can be activated here in verbal form.
|
||||||
|
|
||||||
It is recommended to use the Static IAQ for the IAQ values. This is recommended by Bosch for statically placed devices.
|
It is recommended to use the Static IAQ for the IAQ values. This is recommended by Bosch for statically placed devices.
|
||||||
@ -99,6 +105,7 @@ Data is published over MQTT - make sure you've enabled the MQTT sync interface.
|
|||||||
In addition to outputting via MQTT, you can read the values from the Info Screen on the dashboard page of the device's web interface.
|
In addition to outputting via MQTT, you can read the values from the Info Screen on the dashboard page of the device's web interface.
|
||||||
|
|
||||||
Methods also exist to read the read/calculated values from other WLED modules through code.
|
Methods also exist to read the read/calculated values from other WLED modules through code.
|
||||||
|
|
||||||
- getTemperature(); The scale °C/°F is depended to the settings
|
- getTemperature(); The scale °C/°F is depended to the settings
|
||||||
- getHumidity();
|
- getHumidity();
|
||||||
- getPressure();
|
- getPressure();
|
||||||
@ -118,15 +125,36 @@ Methods also exist to read the read/calculated values from other WLED modules th
|
|||||||
- getStabStatus();
|
- getStabStatus();
|
||||||
- getRunInStatus();
|
- getRunInStatus();
|
||||||
|
|
||||||
|
## Compilation
|
||||||
|
|
||||||
|
To enable, compile with `BME68X` in `custom_usermods` (e.g. in `platformio_override.ini`)
|
||||||
|
|
||||||
|
Example:
|
||||||
|
|
||||||
|
```[env:esp32_mySpecial]
|
||||||
|
extends = env:esp32dev
|
||||||
|
custom_usermods = ${env:esp32dev.custom_usermods} BME68X
|
||||||
|
```
|
||||||
|
|
||||||
## Revision History
|
## Revision History
|
||||||
|
|
||||||
### Version 1.0.0
|
### Version 1.0.0
|
||||||
|
|
||||||
- First version of the BME68X_v user module
|
- First version of the BME68X_v user module
|
||||||
|
|
||||||
### Version 1.0.1
|
### Version 1.0.1
|
||||||
|
|
||||||
- Rebased to WELD Version 0.15
|
- Rebased to WELD Version 0.15
|
||||||
- Reworked some default settings
|
- Reworked some default settings
|
||||||
- A problem with the default settings has been fixed
|
- A problem with the default settings has been fixed
|
||||||
|
|
||||||
|
### Version 1.0.2
|
||||||
|
|
||||||
|
* Rebased to WELD Version 0.16
|
||||||
|
* Fixed: Solved compilation problems related to some macro naming interferences.
|
||||||
|
|
||||||
## Known problems
|
## Known problems
|
||||||
|
|
||||||
- MQTT goes online at device start. Shortly afterwards it goes offline and takes quite a while until it goes online again. The problem does not come from this user module, but from the WLED core.
|
- MQTT goes online at device start. Shortly afterwards it goes offline and takes quite a while until it goes online again. The problem does not come from this user module, but from the WLED core.
|
||||||
- If you save the settings often, WLED can get stuck.
|
- If you save the settings often, WLED can get stuck.
|
||||||
- If many LEDS are connected to WLED, reading the sensor can cause a small but noticeable hang. The "Pause While WLED Active" option was introduced as a workaround.
|
- If many LEDS are connected to WLED, reading the sensor can cause a small but noticeable hang. The "Pause While WLED Active" option was introduced as a workaround.
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
{
|
{
|
||||||
"name:": "BME68X_v2",
|
"name:": "BME68X",
|
||||||
"build": { "libArchive": false},
|
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"boschsensortec/BSEC Software Library":"^1.8.1492"
|
"boschsensortec/BSEC Software Library":"^1.8.1492"
|
||||||
}
|
}
|
Loading…
x
Reference in New Issue
Block a user