Funksensor mit Bosch sensortec BME680 / Luftgüte

Begonnen von juergs, 28 Oktober 2017, 18:05:43

Vorheriges Thema - Nächstes Thema

juergs

#465
Hallo Peter,

Schaltplan ... nicht direkt, aber die SW dazu.
Ein Reengineering sollte aber nicht so schwer sein.
Ist ja nur RX/TX und ggf. I2C als Bypass direkt zum BME680.

Mal schauen was ich machen kann... 8)

juergs

#466
Aktuelle Firmware für das Modul "GY-MCU680V1 BME680" zum Maple ist hier: BME680_Maple_TFT_Monitor
STM32F051K8 S.39
Details und hier

Wäre auch für die ESP-Wetterstation brauchbar...  ;) :)

Oder alternativ in der Cloud: https://thinger.io/ (Anm.: frei, sehr einfach und funktioniert!) Übersicht
Nur für 30 Tage: Azure Iot-Hub habe ich mit dem ESP8266 leider noch nicht erfolgreich zum Laufen gebracht ...

BME680 für 1,60$ das Stück ???

Schaltplan (auf die Schnelle) ohne Gewähr ...

PeMue

Hallo Jürgen,

ich wollte jetzt nicht, dass Du anfängst, einen Schaltplan zu zeichnen ;). Hat die Software die Bosch BSEC integriert, oder ist ein x-beliebiger IAQ Algorithmus umgesetzt?

Zitat von: juergs am 21 März 2019, 18:08:57
BME680 für 1,60$ das Stück ???
Da würde ich eher dieses Angebot bestellen. 10 Stück für 69 € ist günstig und m.E. relativ sicher.

Gruß Peter
RPi3Bv1.2 rpiaddon 1.66 6.0 1xHM-CC-RT-DN 1.4 1xHM-TC-IT-WM 1.1 2xHB-UW-Sen-THPL-O 0.15 1x-I 0.14OTAU  1xCUNO2 1.67 2xEM1000WZ 2xUniroll 1xASH2200 3xHMS100T(F) 1xRFXtrx 90 1xWT440H 3xTFA30.3150 5xFA21
RPi1Bv2 LCDCSM 1.63 5.8 2xMAX HKT 1xMAX RT V200KW1 Heizung Wasser

juergs

#468
Hallo Peter, Schaltplan hat mich auch interessiert  8)
Ich vermute, die SW hat BSEC integriert und zeigt eigentlich sehr plausible Werte an.
Ich habe den Output in meiner FW noch geringfügig geglättet.

Für den Maple habe ich diese Module bekommen:
Air602-WiFi-Module um den Maple mit Wifi-Fähigkeiten auszustatten ...

JackWolfskind

Zumindest wie man eCO2 und VOCeq aus BSEC bekommen, hat Bosch endlich mal erklärt:
https://community.bosch-sensortec.com/t5/MEMS-sensors-forum/BME680-BSEC-eCO2/m-p/5919
Habe das erstaunlicherweise noch niemanden testen gesehen...
HW Entwickler mit diversen Raspi Projekten z.B. FHEM, OpenHab, IOBroker, NodeRed, Airconnect,Waermepumpen und Lunos Lueftungssteuerung...

juergs

#470
Danke für die zusätzliche Informationsquelle.

Z.B. auch diese Info ist interessant:

The IAQ accuracy is actually reflecting the current state of the background calibration process, such as:

    IAQ Accuracy=0 could either mean:
        BSEC was just started, and the sensor is stabilizing (this lasts normally 5min in LP mode or 20min in ULP mode),
        there was a timing violation (i.e. BSEC was called too early or too late), which should be indicated by a warning/error flag by BSEC,
    IAQ Accuracy=1 means the background history of BSEC is uncertain. This typically means the gas sensor data was too stable for BSEC to clearly define its references,
    IAQ Accuracy=2 means BSEC found a new calibration data and is currently calibrating,
    IAQ Accuracy=3 means BSEC calibrated successfully.


Ich vermute, Du beziehst Dich mit Deinem Hinweis auf diese Frage?
https://forum.fhem.de/index.php/topic,97161.msg922102.html#msg922102
und
BME680 without VOC and CO2 data

juergs

#471
Habe eine eigene Arduino Library erstellt, die es ermöglicht aus dem BME680-Sensor, ohne die Einbindung der statischen BSEC-Libraries auch den Anteil der tVocs in PPM zu ermitteln bzw. auszugeben.
Da momentan verfügbare Libraries nur den Widerstand des Heizelements des Sensors ausgeben, welcher ohne zusätzlichen Berechungsaufwand leider keine interpretierbare Lösung darstellt.

Anbei die erste Version: getestet mit Wemos D1 mini und BME680 Sensor an Adresse 0x77.  Nach ca. 30s werden erste tVoc-Werte geliefert.

Abhängigkeiten:
Als Grundlage wird die aktuelle Adafruit_BME680-Library benötigt:   * https://adafruit.github.io/Adafruit_BME680/html/index.html
Welche wiederum die Installation der Adafruit Unified Sensor library benutzt:  * https://github.com/adafruit/Adafruit_Sensor

|-- <JS_BME680 Library> 1.0.0
|   |-- <Wire> 1.0
|   |-- <Adafruit BME680 Library> 1.0.7
|   |   |-- <Wire> 1.0
|   |   |-- <SPI> 1.0
|   |   |-- <Adafruit Unified Sensor> 1.0.3
|   |-- <SPI> 1.0


Credits und Dank für die Basis + Grundlagenarbeit an Jörg @ github oder https://forum.fhem.de/index.php/topic,96241.0.html!


Arduino-Monitor-Ausgabe bei 115KB mit dem beigefügten Sample-Sketch:
*** Started!
Enabled: I2C for Wemos D1 mini SDA:D2 / SCL:D1
Scanning I2C...
I2C device found at address 0x77  !
done

I2C: ok BME680 sensor found! :-)
[10.37]   Temperature = 27.32 *C  Pressure = 999.40 hPa  Humidity = 51.94 %  Gas = 0.00 KOhms  Approx. Altitude = 115.79 m 
[20.37]   Temperature = 27.41 *C  Pressure = 999.38 hPa  Humidity = 51.92 %  Gas = 87.76 KOhms  Approx. Altitude = 115.79 m 
[30.37]   Temperature = 27.53 *C  Pressure = 999.40 hPa  Humidity = 51.85 %  Gas = 95.60 KOhms  Approx. Altitude = 116.12 m 
[40.37]   Temperature = 27.59 *C  Pressure = 999.40 hPa  Humidity = 51.88 %  Gas = 100.18 KOhms  Approx. Altitude = 115.95 m 
[50.37]   Temperature = 27.63 *C  Pressure = 999.40 hPa  Humidity = 51.94 %  Gas = 102.70 KOhms  Approx. Altitude = 115.79 m 
[60.37]   Temperature = 27.64 *C  Pressure = 999.40 hPa  Humidity = 51.99 %  Gas = 104.36 KOhms  Approx. Altitude = 115.95 m 
[70.37]   Temperature = 27.65 *C  Pressure = 999.38 hPa  Humidity = 51.99 %  Gas = 105.15 KOhms  Approx. Altitude = 115.95 m 
[80.38]   Temperature = 27.66 *C  Pressure = 999.38 hPa  Humidity = 52.02 %  Gas = 106.08 KOhms  Approx. Altitude = 115.95 m 
[90.38]   Temperature = 27.66 *C  Pressure = 999.38 hPa  Humidity = 52.02 %  Gas = 106.21 KOhms  Approx. Altitude = 115.95 m 
[100.38]   Temperature = 27.66 *C  Pressure = 999.40 hPa  Humidity = 51.98 %  Gas = 107.30 KOhms  Approx. Altitude = 116.12 m 
[110.38]   Temperature = 27.66 *C  Pressure = 999.38 hPa  Humidity = 51.93 %  Gas = 108.13 KOhms  Approx. Altitude = 116.12 m 
[120.38]   Temperature = 27.67 *C  Pressure = 999.36 hPa  Humidity = 51.83 %  Gas = 108.48 KOhms  Approx. Altitude = 116.29 m 
[130.38]   Temperature = 27.68 *C  Pressure = 999.36 hPa  Humidity = 51.78 %  Gas = 108.41 KOhms  Approx. Altitude = 116.12 m 
[140.38]   Temperature = 27.68 *C  Pressure = 999.36 hPa  Humidity = 51.83 %  Gas = 108.84 KOhms  Approx. Altitude = 116.12 m 
[150.38]   Temperature = 27.68 *C  Pressure = 999.38 hPa  Humidity = 51.89 %  Gas = 108.62 KOhms  Approx. Altitude = 116.29 m 
[160.38]   Temperature = 27.69 *C  Pressure = 999.36 hPa  Humidity = 51.86 %  Gas = 108.70 KOhms  Approx. Altitude = 116.46 m 
[170.38]   Temperature = 27.69 *C  Pressure = 999.34 hPa  Humidity = 51.84 %  Gas = 109.48 KOhms  Approx. Altitude = 116.46 m 
[180.39]   Temperature = 27.70 *C  Pressure = 999.36 hPa  Humidity = 51.83 %  Gas = 109.26 KOhms  Approx. Altitude = 116.12 m 
[190.39]   Temperature = 27.69 *C  Pressure = 999.36 hPa  Humidity = 51.85 %  Gas = 109.41 KOhms  Approx. Altitude = 116.29 m 
[200.39]   Temperature = 27.69 *C  Pressure = 999.36 hPa  Humidity = 51.83 %  Gas = 109.33 KOhms  Approx. Altitude = 116.29 m 
[210.39]   Temperature = 27.68 *C  Pressure = 999.36 hPa  Humidity = 51.83 %  Gas = 109.48 KOhms  Approx. Altitude = 116.29 m 
[220.39]   Temperature = 27.68 *C  Pressure = 999.32 hPa  Humidity = 51.84 %  Gas = 110.05 KOhms  Approx. Altitude = 116.46 m 
[230.39]   Temperature = 27.68 *C  Pressure = 999.32 hPa  Humidity = 51.82 %  Gas = 110.34 KOhms  Approx. Altitude = 116.29 m 
[240.39]   Temperature = 27.68 *C  Pressure = 999.32 hPa  Humidity = 51.80 %  Gas = 111.00 KOhms  Approx. Altitude = 116.29 m 
[250.39]   Temperature = 27.68 *C  Pressure = 999.32 hPa  Humidity = 51.78 %  Gas = 110.93 KOhms  Approx. Altitude = 116.12 m 
[260.39]   Temperature = 27.68 *C  Pressure = 999.34 hPa  Humidity = 51.81 %  Gas = 110.93 KOhms  Approx. Altitude = 116.29 m 
[270.39]   Temperature = 27.68 *C  Pressure = 999.32 hPa  Humidity = 51.80 %  Gas = 110.63 KOhms  Approx. Altitude = 116.46 m 
[280.40]   Temperature = 27.68 *C  Pressure = 999.34 hPa  Humidity = 51.75 %  Gas = 111.52 KOhms  Approx. Altitude = 116.46 m 
[290.40]   Temperature = 27.68 *C  Pressure = 999.34 hPa  Humidity = 51.80 %  Gas = 110.78 KOhms  Approx. Altitude = 116.46 m 
[300.40]   Temperature = 27.69 *C  Pressure = 999.34 hPa  Humidity = 51.77 %  Gas = 111.37 KOhms  Approx. Altitude = 116.63 m 
[300.77] Taupunkt: 17.00  tVOC: 125
BME680-Reading done.
[310.40]   Temperature = 27.69 *C  Pressure = 999.32 hPa  Humidity = 51.78 %  Gas = 111.37 KOhms  Approx. Altitude = 116.46 m 
[310.77] Taupunkt: 17.01  tVOC: 125
BME680-Reading done.
[320.40]   Temperature = 27.70 *C  Pressure = 999.30 hPa  Humidity = 51.76 %  Gas = 111.96 KOhms  Approx. Altitude = 116.63 m 
[320.77] Taupunkt: 17.00  tVOC: 125
BME680-Reading done.
[330.40]   Temperature = 27.70 *C  Pressure = 999.30 hPa  Humidity = 51.78 %  Gas = 111.07 KOhms  Approx. Altitude = 116.46 m 
[330.77] Taupunkt: 17.00  tVOC: 125
BME680-Reading done.
[340.40]   Temperature = 27.70 *C  Pressure = 999.34 hPa  Humidity = 51.77 %  Gas = 111.82 KOhms  Approx. Altitude = 116.46 m 
[340.77] Taupunkt: 17.00  tVOC: 125
BME680-Reading done.
[350.40]   Temperature = 27.70 *C  Pressure = 999.34 hPa  Humidity = 51.79 %  Gas = 111.44 KOhms  Approx. Altitude = 116.46 m 
[350.78] Taupunkt: 17.02  tVOC: 126
BME680-Reading done.


Sketch uses 288476 bytes (27%) of program storage space. Maximum is 1044464 bytes.
Global variables use 28076 bytes (34%) of dynamic memory, leaving 53844 bytes for local variables. Maximum is 81920 bytes.


Verbesserungsvorschäge gerne erwünscht, da diese Version "noch in Arbeit" ist und einige Dinge noch verifiziert werden müssen ...  ;)

Aktualisierte Versionen pflege ich in Github ein: BME680-Arduino-Library-with_TVOC-

Jürgen


juergs

#472
BSEC-Konfiguration mit platformio:

https://www.heise.de/ct/artikel/Mikrocontroller-bequem-programmieren-mit-PlatformIO-4403209.html

Here is how I got to get the BME680 running using Bosch BSEC Arduino Library on Platformio IDE.
1. Create a project for the board that you are going to use.
2. Copy the https://github.com/BoschSensortec/BSEC-Arduino-library/
3. Copy the files from BSEC-Arduino-library/src to your src folder on Platformio IDE.
4. Copy the files from BSEC-Arduino-library/examples/basic_config_state/ also to the src folder (bsec_serialized_configurations_iaq.cpp and bsec_serialized_configurations_iaq.h)
5. Copy the source code from the https://github.com/BoschSensortec/BSEC-Arduino-library/blob/master/examples/basic_config_state/basic_config_state.ino to your main.cpp
6. Download the latest library at https://www.bosch-sensortec.com/en/bst/products/all_products/bsec
7. Copy the libalgobsec.a file for the ESP8266 to the folder lib on your platformio project.
8. Add this line at the end of your platformio.ini
build_flags = -L/Users/USER/Documents/PlatformIO/Projects/BSEC_BME680/lib/ -lalgobsec
Hopefully, it will build. I know it sounds complicated but is less than changing your Arduino IDE to use precompiled libraries.


Für nodeMCU wollte platformio die libalgobsec.a außer im /lib-Verzeichnis auch noch in diesem Verzeichnis haben:
C:\Users\js\AppData\Roaming\SPB_Data\.platformio\packages\framework-arduinoespressif8266@1.20401.3-puya\tools\sdk\libc\xtensa-lx106-elf\lib
bzw. habe in platform.ini die buildflags dann so angepasst:
build_flags = -L/C:/Users/js/Documents/PlatformIO/Projects/190901-123302-nodemcuv2/lib/ -lalgobsec

PeMue

Hallo Jürgen,

Du bist ja mächtig aktiv. Hast Du denn schon Informationen darüber, ob es sich lohnt, einen batteriebetriebenen Sensor mit dem BME680 zu machen? Dann würde ich entweder auf Dirk's Universalsensor (innen) einen Atmega644 (oder größer) draufpacken oder einen STM32F103 (parallel zum Arduino pro  mini 3,3 V) draufpacken. Mein Favorit wäre ganz klar der Atmega, aber mit dem neuen Bootloader sollten Laien auch ganz gut mit dem STM Prozessor klarkommen können.

Gruß Peter
RPi3Bv1.2 rpiaddon 1.66 6.0 1xHM-CC-RT-DN 1.4 1xHM-TC-IT-WM 1.1 2xHB-UW-Sen-THPL-O 0.15 1x-I 0.14OTAU  1xCUNO2 1.67 2xEM1000WZ 2xUniroll 1xASH2200 3xHMS100T(F) 1xRFXtrx 90 1xWT440H 3xTFA30.3150 5xFA21
RPi1Bv2 LCDCSM 1.63 5.8 2xMAX HKT 1xMAX RT V200KW1 Heizung Wasser

juergs

#474
Hallo Peter,

ja das Thema hat mich mal wieder gepackt    ;)

Mit der Library wäre es schon denkbar sogar mit den ATtinys einen Sensor zu bewerkstelligen.
Allerdings müsste man den Stromverbrauch analysieren und den Zwang kontinierlich den Sensor
in bestimmten Zeitintervallen abzufragen wären ja kontraproduktiv zum Batterie-Betrieb.

Will aber nicht sagen, dass es aus meiner Sicht nicht gehen würde. :D
Also müsste man da noch etwas Aufwand Richtung Batterie-Betrieb treiben...

Die Lib habe ich bis jetzt nur mit dem ESP8266 getestet. Evtl. sind noch einige spezifische Eigenschaften nur auf ESP ausgerichtet (z.B. Wire etc.).
Vermute aber, dass es mit einem ATMEL/Atmega oder STM32 ebenfalls gehen und nach Anpassungen auch lauffähig wäre.

Die Idee eines Batteriebetriebenen Devices sagt mir ebenfalls zu  ;)

Meine Intension war es ja die Lib mit in ESPEasy mit einzubindenn, bin aber gerade mit dem Thema platformIO doch etwas abgeschweift...

ZitatHast Du denn schon Informationen darüber, ob es sich lohnt, einen batteriebetriebenen Sensor mit dem BME680 zu machen?
Nein nocht nicht bewusst, da ja mit ESP unterwegs war.  :(

juergs

#475
Mit platformio + BSEC kommt halt immer was Neues dazu:
Zitat
Processing nodemcuv2 (platform: espressif8266; board: nodemcuv2; framework: arduino)
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Verbose mode can be enabled via `-v, --verbose` option
CONFIGURATION: https://docs.platformio.org/page/boards/espressif8266/nodemcuv2.html
PLATFORM: Espressif 8266 1.7.3 #7507605 > NodeMCU 1.0 (ESP-12E Module)
HARDWARE: ESP8266 80MHz, 80KB RAM, 4MB Flash
PACKAGES: toolchain-xtensa 1.40802.0 (4.8.2), tool-esptool 1.413.0 (4.13), framework-arduinoespressif8266 1.20401.3-puya (2.4.1)
Converting BSEC_Octopus_BME680.ino
LDF: Library Dependency Finder -> http://bit.ly/configure-pio-ldf
LDF Modes: Finder ~ chain, Compatibility ~ soft
Looking for Adafruit NeoPixel, library in registry
Found: https://platformio.org/lib/show/28/Adafruit NeoPixel
LibraryManager: Installing id=28
Adafruit NeoPixel @ 1.2.4 is already installed
Looking for Adafruit SSD1306, library in registry
Found: https://platformio.org/lib/show/135/Adafruit SSD1306
LibraryManager: Installing id=135
Adafruit SSD1306 @ 1.3.0 is already installed
Found 33 compatible libraries
Scanning dependencies...
Dependency Graph
|-- <Adafruit GFX Library> 1.5.6
|   |-- <SPI> 1.0
|-- <EEPROM> 1.0
|-- <Adafruit NeoPixel> 1.2.4
|-- <Wire> 1.0
|-- <Adafruit SSD1306> 1.3.0
|   |-- <Adafruit GFX Library> 1.5.6
|   |   |-- <SPI> 1.0
|   |-- <SPI> 1.0
|   |-- <Wire> 1.0
|-- <SPI> 1.0
Compiling .pio\build\nodemcuv2\src\BSEC_Octopus_BME680.ino.cpp.o
Linking .pio\build\nodemcuv2\firmware.elf
c:/users/js/appdata/roaming/spb_data/.platformio/packages/toolchain-xtensa@1.40802.0/bin/../lib/gcc/xtensa-lx106-elf/4.8.2/../../../../xtensa-lx106-elf/bin/ld.exe: .pio\build\nodemcuv2\firmware.elf section `.text' will not fit in region `iram1_0_seg'
.pio\build\nodemcuv2\src\BSEC_Octopus_BME680.ino.cpp.o:(.text.setup+0x38): undefined reference to `bsec_config_iaq'
collect2.exe: error: ld returned 1 exit status
*** [.pio\build\nodemcuv2\firmware.elf] Error 1
================================================================================================================================ [FAILED] Took 2.74 seconds ================================================================================================================================

i2cRead und i2cWrite referece not found (sind Klassenmethoden des iaqSensor):
iaqSensor.i2cRead, iaqSensor.i2cWrite

Daran bin ich noch am Knabbern...

firmware.elf section `.text' will not fit in region `iram1_0_seg'

undefined reference to `bsec_config_iaq'

Das kommt davon, wenn man Versionen durcheinander würfelt.

https://github.com/t-pi/Octopus_BSEC/blob/master/BSEC_AQI.ino
https://github.com/t-pi/Octopus_BSEC
Mit den Arduino-Einstellungen ...

Auch mit Arduino mit konfiguriertem BSEC:
BSEC_Octopus_BME680.ino:296: undefined reference to `bsec_config_iaq'


Ah + Ohhh:
Zitatthe bsec_config_iaq is an encrypted string that cannot be modified by the end user. We validate the entire use-case in the lab and in the field for certain configurations, then release the appropriate configuration strings. If you have different requirements you can contact Bosch Sensortec technical support right here on this forum.

Die Jungs machen es einem nicht gerade einfach ...  :(

Auskommentiert und auf die Konfiguration verzichtet:
  //iaqSensor.setConfig((uint8_t *)bsec_config_iaq);

Sketch uses 329225 bytes (31%) of program storage space. Maximum is 1044464 bytes.
Global variables use 33804 bytes (41%) of dynamic memory, leaving 48116 bytes for local variables. Maximum is 81920 bytes.

juergs

#476
Mal zum Testen in ESPEasy, habe die nächst größere PlugIn-ID nach 119 gewählt.

MC_Arthur

Oh... Werde das morgen gern mal testen .... bin gespannt .


MC_Arthur

Zitat von: juergs am 01 September 2019, 23:18:08
Mal zum Testen in ESPEasy, habe die nächst größere PlugIn-ID nach 119 gewählt.

bekomme noch den Fehler in der _P120 ws iss_BME680 angeht.. obwohl ich #471 beachtet hatte...

exit status 1
js_BME680.h: No such file or directory

juergs

#479
Zitatjs_BME680.h: No such file or directory
Dann hast Du die Lib nicht richtig installiert?
Je nach dem Tool, mit dem Du ESPEasy compilierst ...
In platformio ist es etwas schwieriger:
Im cmd-Fenster  "pio.exe lib install <kompletter Pfad zur Lib>" eingeben, um sie lokal ins Projekt einzubinden ...

Geht in der Arduino-IDE das Testprogrämmchen?