Funksensor mit Bosch sensortec BME680 / Luftgüte

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

Vorheriges Thema - Nächstes Thema

juergs

#420
Die Konfiguration ist mit allen Optionen auf true.
Debug= false.
Laut Thomas soll es Auto-Detect-fähig sein.
Generic STMF103C-series - Variante C8  (20K Ram/ 64KFlash) . Es gibt auch noch die CB-Variante mit 128K Flash.
Falls Du eine andere Variante benötigst, Bescheid sagen  ;)

Zitat#define HAS_RFM69             true   //is auto detected, if not found, sensor works without RFM69, data only on serial port
#define HAS_OLED              true   //is auto detected, if not found, sensor works without OLED (SH1106 or SSD1306)
#define HAS_LIGHTSENSOR       true   //is auto detected, if not found, sensor works without BH1750
#define VCC_MEASURE           true   //if not needed, you can disable it here
#define SOFT_SPI             false   //if you need SOFT-SPI, set true
#define DEBUG                false   //activate debug mode

Zitat#elif defined(__STM32F1__)
    #define RFM_SS             PA4         //  SS pin -> RFM69 (NSS)  //for both Soft- and HW-SPI
    #define RFM_SCK            PA5         // SCK pin -> RFM69 (SCK)  //only used by soft spi
    #define RFM_MISO           PA6         //MISO pin <- RFM69 (MOSI) //only used by soft spi
    #define RFM_MOSI           PA7         //MOSI pin -> RFM69 (MISO) //only used by soft spi


Aber Achtung: Thomas hat die Variante CB vorgegeben:
ZitatIn der Arduino IDE als Board "Generic STM32F103C series" wählen und als Variante "STM32F103CB (20k RAM, 128k Flash)" !
Sonst reicht der Speicher nicht ;o)
Die Boards haben in den allermeisten Fällen 128K Flash Speicher, obwohl die C8 Boards offiziell nur 64k Flash haben sollten.

Grüße,
Jürgen

juergs

#421
Die Debug-enbled Variante macht etwas mehr Ärger:
Zitat
c:\<user>\Documents\Arduino\hardware\Arduino_STM32\STM32F1\cores\maple\libmaple\usb\stm32f1\usb_cdcacm.c:65:2: warning: #warning USB CDC ACM relies on LeafLabs board-specific configuration. You may have problems on non-LeafLabs boards. [-Wcpp]

#warning USB CDC ACM relies on LeafLabs board-specific configuration.\


und es hagelt
Zitat.. /bsec_integration.c:193: warning: undefined reference to `bsec_init'

/bsec_integration.c:203: warning: undefined reference to `bsec_set_configuration'
etc ...

Äh, ja is klar: habe die neue BSEC-LIB für ARM noch nicht angepasst !   :-\ :-[

Muss ich noch nachholen...

Die precompiled Lib ist etwas versteckt, es gibt noch eine ARM_CC-Variante + und Bosch hat es immer noch nicht geschafft die ARM-Konfiguration in den Guide mit aufzunehmen:
Zitat
BSEC_1.4.7.1_Generic_Release_20180907\BSEC_1.4.7.1_Generic_Release_20180907\algo\bin\Normal_version\gcc\Cortex_M3\libalgobsec.a

An dieser Stelle noch mal die Hinweis-Infos von Thomas:
https://forum.fhem.de/index.php?action=dlattach;topic=78619.0;attach=111504

und generell:
https://wolfgangklenk.wordpress.com/2017/11/05/indoor-air-quality-iaq-measurement-with-bosch-bme680-and-stm32f103c8t6/

hdgucken

#422
Zitat von: locutus
Würdest du bitte die binäre Firmware-Datei für STM32F103Cx zur Verfügung stellen?
Vielen Dank im Voraus!

klar, im Anhang einmal mit debug und einmal normal ohne debug Ausgabe.
Die angeschlossenen Komponenten werden automatisch erkannt und eingebunden.
Ohne RFM69 nur Ausgabe über USB seriell, BME680 ist Mindestvoraussetzung ;o)
Beim ersten Start innerhalb von 5 Sekunden das serielle Terminal öffnen,
dann kann man den Sensor konfigurieren (115200Baud,8N1).
Viel Erfolg und guten Rutsch !

@juergs:
Du mußt das Board STM32F103CB(20k Ram, 128k Flash) einstellen, sonst bricht der Compiler ab mit "zu wenig Speicher" !
ansonsten bei mir nur etliche Warnungen (nichts schlimmes), aber keine Fehler.
Arduino 1.8.7, BSEC 1.4.7.1

Viel Erfolg und guten Rutsch !

Gruß Thomas

P.S.: die angehängten Dateien sind für BluePill und baugleiche Boards mit onBoard LED an PC13 !

juergs

#423
Ich hatte die BSEC-LIB nur in der Maple-Variante hinterlegt:
ZitatC:\Users\<user>\Documents\Arduino\hardware\Arduino_STM32\STM32F1\variants\maple_mini\ld

Aber es gibt ja mehr:
ZitatVerzeichnis von C:\Users\<user>\Documents\Arduino\hardware\Arduino_STM32\STM32F1\variants

13.06.2017  01:39    <DIR>          .
13.06.2017  01:39    <DIR>          ..
13.06.2017  01:39    <DIR>          generic_gd32f103c
13.06.2017  01:39    <DIR>          generic_stm32f103c
13.06.2017  01:39    <DIR>          generic_stm32f103r
13.06.2017  01:39    <DIR>          generic_stm32f103r8
13.06.2017  01:39    <DIR>          generic_stm32f103t
13.06.2017  01:39    <DIR>          generic_stm32f103v
13.06.2017  01:39    <DIR>          generic_stm32f103z
13.06.2017  01:39    <DIR>          hytiny_stm32f103t
13.06.2017  01:39    <DIR>          maple
13.06.2017  01:39    <DIR>          maple_mini
13.06.2017  01:39    <DIR>          maple_ret6
13.06.2017  01:39    <DIR>          microduino
13.06.2017  01:39    <DIR>          nucleo_f103rb
13.06.2017  01:39    <DIR>          STM32VLD

Ok, dort in den ld-Verzeichnissen überall die neue  libalgosec.a hinterlegen und die common.inc ändern.
Dann probiere ich es wieder ... morgen.

Allen einen guten Rutsch ins neue Jahr  ;) :)
Grüße,
Jürgen

juergs

Hallo Thomas,

super, warst schneller...

Danke für die Mithilfe  ;) :)

Grüße + und ebenfalls einen guten Rutsch!

Jürgen




hdgucken

#425
Hallo Jürgen,

kein Problem ;o)

Das Protokoll von dem China Sensor ist ja gar nicht mal so schlecht, läßt sich was draus machen,
könnte man dann ohne bsec Gefummel verwenden  8)
Errechnet er sich die Höhe aus dem Luftdruck eigentlich selbst ? Sieht für mich jedenfalls so aus.

Bis denn ...

juergs

#426
Hallo Thomas,

Zitatkönnte man dann ohne bsec Gefummel verwenden
ja, rel. wenig Aufwand und mit einem Nano und RFM69 oder CC1101 sogar recht einfach.
Der BME680 lässt sicht einfach abtrennen und lässt sich dann über BSEC betreiben.
Ein Batteriebetrieb mit 5 mA ist wohl eher für einen begrenzten Zeitraum möglich.

Es sei denn, man verwirklicht den ULP (Ultra Low Power) Modus mit der BSEC-Lite Variante.

Zitat
Configuration Supply voltage of BM -
E680
Maximum time between
bsec_sensor_control()
calls
Time considered for background calibration:
generic_33v_300s_28d 3.3V 300s 28 days
generic_33v_300s_4d 3.3V   300s 4 days
generic_33v_3s_28d 3.3V        3s 28 days
generic_33v_3s_4d 3.3V          3s 4 days
generic_18v_300s_28d 1.8V  300s 28 days
generic_18v_300s_4d 1.8V 300s 4 days
generic_18v_3s_28d 1.8V 3s 28 days
generic_18v_3s_4d 1.8V 3s 4 days
The default configuration (after calling bsec_init), to which BSEC will be configured, is "generic_18v_300s_4d".

ZitatYou will notice that we now get IAQ, temperature and humidity data once every 3 seconds. This is because the
example code is pre-configured to use what is called low-power (LP) mode.
For certain applications, we may want to reduce the power consumption (and data rate) and use ultra-low-power
mode. Since it only takes around 0.08 mA current on average, this mode is ideal for long-term battery powered
operation. But let's see if we can change the code to lower the data rate.

Ich schaue mir mal das Octopus-Demo genauer an .. Wie vermutet läuft der Sketch nicht  out-of-the-box und brauch jede Menge
Puzzle-Arbeit.

Grüße,
Jürgen

   

hdgucken

Hallo Jürgen,

für ULP-Mode mußt Du nur im Setup statt " ret = bsec_iot_init(BSEC_SAMPLE_RATE_LP, ... " -> " ret = bsec_iot_init(BSEC_SAMPLE_RATE_ULP, ... " angeben,
schon läuft der Sensor im ULP-Mode, hab ich schon mal getestet  ;)

Gruß Thomas

locutus

Zitat von: hdgucken am 31 Dezember 2018, 18:47:54
Die angeschlossenen Komponenten werden automatisch erkannt und eingebunden.
Ohne RFM69 nur Ausgabe über USB seriell, BME680 ist Mindestvoraussetzung ;o)
Beim ersten Start innerhalb von 5 Sekunden das serielle Terminal öffnen,
dann kann man den Sensor konfigurieren (115200Baud,8N1).
Ich stehe auf dem Schlauch! Maple Mini (ohne RFM69) mit
sudo dfu-util -d 1eaf:0003 -a 2 -D Universalsensor_stm32f103c_normal.bin –R
geflasht, OLED zeigt ***SETUP*** an, USB ist aber inaktiv und nun die Frage: wie die Konfiguration durchführen? Serieller Adapter am RX1 und TX1 führt auch nicht zum Erfolg.

hdgucken

Hallo locutus,

Zitat von: locutus
Ich stehe auf dem Schlauch! Maple Mini (ohne RFM69) mit
sudo dfu-util -d 1eaf:0003 -a 2 -D Universalsensor_stm32f103c_normal.bin –R
geflasht, OLED zeigt ***SETUP*** an, USB ist aber inaktiv und nun die Frage: wie die Konfiguration durchführen? Serieller Adapter am RX1 und TX1 führt auch nicht zum Erfolg.

Für den maple mini muß anders compiliert werden, anbei die maple mini Versionen  ;)

Die Version STM32F103C ist für z.B. BluePill Boards, mit onBoard LED an Pin PC13.

Gruß Thomas

juergs

#430
ZitatBluePill F103C8 (Basic support, no USB)
MapleMini F103CB (Basic support, no USB)
Nucleo F103RB
einstieg_mikrocontroller_stm32f103

Für den STM32F031 hier die Arduino-Integrations-Möglichkeit: https://github.com/stm32duino/wiki/wiki/Add-a-new-variant-(board)

Deshalb hatte ich ja auch nach der Konfiguration gefragt!
Ohne RFM war jetzt noch direkt getestet  ;)

Habe nur den MapleMini als Testsystem. Mein Compile bleibt wirklich bei "**** Setup ****"  stehen,
obwohl ich den RFM69 angeschlossen habe. Die Serielle gibt nichts aus.

Muss noch mal mit meiner Maple-Version vergleichen.

STOP! Kommando zurück!

Wird "Setup" angezeigt möchte er die serielle Konfiguration anwerfen (6 Sekunden Wartezeit) :
... und tut dies auch.

In einem Terminal-Progamm läuft der Eprom-Teil rel. schnell durch.
Besser zu empfehlen die Arduino-IDE, deren serieller Monitor reagiert auf die EEprom-Konfiguration mit Handshake besser.

Das hier ist mit RFM:

Zitat
BME680 wireless sensor V3.1
Compiled: Wed Jan 02 07:42:22 2019
Protocol: UniversalSensor
BSEC Version: 1.4.7.1

OLED init ... found on 0x3C

Do you want to delete settings in EEPROM (Y/N)?
Settings deleted.

Node-ID is: 255 (0xFF)
New value (1-254):
Node-ID set to: 12 (0x0C)
Save permanently (Y/N)?
new value (1-254):
Node-ID set to: 14 (0x0E)
Save permanently (Y/N)?
OK.

Altitude is: 65560.5m
new value (0.0-8848.9):
Altitude set to: 0.0m
Save permanently (Y/N)?
OK.

Temperature offset: -1.1 degrees celsius
new value (+-10.0):
Temperature offset set to: 0.0 degrees celsius
Save permanently (Y/N)?
new value (+-10.0):
Temperature offset set to: 0.0 degrees celsius
Save permanently (Y/N)?
OK.

Save settings ...
Node-ID           : 14 (0x0E)
Altitude          : 0.0m
Temperature offset: 0.0 degrees celsius

RFM69  init ... done
BME680 init ... done
BH1750 init ... not present
Ready, start measuring ...

[58092.00] P: 1018.5| T: 18.61| rH: 44.80| IAQ: 25.00 (0)| Static IAQ: 25.00| CO2e: 0.00| bVOC: 0.00
| Gas: 34134.00| UBat: 3.3V
[61092.00] P: 1018.5| T: 18.62| rH: 44.86| IAQ: 25.00 (0)| Static IAQ: 25.00| CO2e: 0.00| bVOC: 0.00
| Gas: 30935.00| UBat: 3.3V
[64092.00] P: 1018.5| T: 18.66| rH: 44.82| IAQ: 25.00 (0)| Static IAQ: 25.00| CO2e: 0.00| bVOC: 0.00
| Gas: 34931.00| UBat: 3.3V
[67092.00] P: 1018.5| T: 18.69| rH: 44.74| IAQ: 25.00 (0)| Static IAQ: 25.00| CO2e: 0.00| bVOC: 0.00
| Gas: 39582.00| UBat: 3.3V


Grüße,
Jürgen 

juergs

#431
Ohne RFM69 geht es ebenfalls, als reiner Standalone-Sensor:
(Allerdings unter Win10 geflasht!)

Zitatmaple_loader v0.1
Resetting to bootloader via DTR pulse
Searching for DFU device [1EAF:0003]...
Found it!

Opening USB Device 0x1eaf:0x0003...
Found Runtime: [0x1eaf:0x0003] devnum=1, cfg=0, intf=0, alt=1, name="STM32duino bootloader v1.0  Upload to Flash 0x8005000"
Setting Configuration 1...
Claiming USB DFU Interface...
Setting Alternate Setting ...
Determining device status: state = dfuIDLE, status = 0
dfuIDLE, continuing
Transfer Size = 0x0400
bytes_per_hash=1671
Starting download: [##################################################] finished!
state(8) = dfuMANIFEST-WAIT-RESET, status(0) = No error condition is present
error resetting after download: usb_reset: could not reset device, win error: Das System kann die angegebene Datei nicht finden.
Done!

Resetting USB to switch back to runtime mode


BME680 wireless sensor V3.1
Compiled: Wed Jan 02 07:42:22 2019
Protocol: UniversalSensor
BSEC Version: 1.4.7.1

OLED init ... found on 0x3C

Do you want to delete settings in EEPROM (Y/N)?
Settings deleted.

Node-ID is: 255 (0xFF)
New value (1-254):
Node-ID set to: 14 (0x0E)
Save permanently (Y/N)?
OK.

Altitude is: 65560.5m
new value (0.0-8848.9):
Altitude set to: 180.0m
Save permanently (Y/N)?
OK.

Temperature offset: -1.1 degrees celsius
new value (+-10.0):
Temperature offset set to: 0.0 degrees celsius
Save permanently (Y/N)?
OK.

Save settings ...
Node-ID           : 14 (0x0E)
Altitude          : 180.0m
Temperature offset: 0.0 degrees celsius

RFM69 not found, no wireless transmission !
BME680 init ... done
BH1750 init ... not present
Ready, start measuring ...

[47292.00] P: 1040.6| T: 19.82| rH: 45.39| IAQ: 25.00 (0)| Static IAQ: 25.00| CO2e: 0.00| bVOC: 0.00
| Gas: 133786.00| UBat: 3.3V
[50292.00] P: 1040.6| T: 19.80| rH: 45.39| IAQ: 25.00 (0)| Static IAQ: 25.00| CO2e: 0.00| bVOC: 0.00
| Gas: 140756.00| UBat: 3.3V
[53292.00] P: 1040.6| T: 19.84| rH: 45.22| IAQ: 25.00 (0)| Static IAQ: 25.00| CO2e: 0.00| bVOC: 0.00
| Gas: 149554.00| UBat: 3.3V
[56292.00] P: 1040.6| T: 19.88| rH: 45.05| IAQ: 25.00 (0)| Static IAQ: 25.00| CO2e: 0.00| bVOC: 0.00
| Gas: 156104.00| UBat: 3.3V


Kleiner Schönheitsfehler: in der Daueranzeige fehlt der IAQ-Wert  ;) :(

... der nach einer gewissen Initialisierungszeit mit "Luftgüte:  berechne.." dann doch angezeigt wird.  :) :D
Der Sensor geht ja nach einem Reset/Einschalten von einem anfänglichen IAQ-Wert 25, kurze Zeit auf 0, um dann richtige Werte auszugeben.

hdgucken

Hallo Jürgen,

hast Dir ja was vorgenommen, mit dem STM32F05 ;)
Werde das auch mal in Angriff nehmen, nur leider wenig Zeit.

Wenn "*** SETUP ***" im Display steht, dann läuft das Setup im seriellen Terminal, war als Hinweis gedacht  :)

Die 6 Sekunden Wartezeit hab ich gleich am Anfang, also nach dem Einschalten des Sensors drin, damit man Zeit hat, das serielle Terminal zu öffnen.
Vielleicht sollte ich die LED in der Zeit blinken lassen, damit man sieht, das sich was tut ?
Bei "*** SETUP ***" könnte man ja noch "see serial terminal..." drunter schreiben, ist dann vielleicht eindeutiger ?

Gruß Thomas

juergs

#433
Hallo Thomas,
... alles gut. Funktioniert ja alles so wie es soll.   :D :)

Die Use-Cases ohne RFM etc. waren ja speziell von mir ja gar nicht vorgesehen und damit auch nicht getestet.
Umso besser, dass es auch so funktioniert.

Das mit dem STM32F05x war nur so eine Idee. Der Prozessor (und auch die Boards dazu) ist ja noch billiger als der  F103.
Ob das aber Sinn macht, sei dahingestellt ...  ;)

Ich wollte nur die Möglichkeit in Betracht ziehen da noch andere STM32-Familienmitglieder in Arduino mit einbinden zu können.
Die könnte z.B. auch ein STM8-Typ sein (kein BSEC), da gibt es schon eine Lösung, die den ATtiny8x ersetzen könnte.   

Momentan versuche ich auch mit ein  paar herumliegenden ST7735-LCD-TFT-Displays eine ansprechende Standalone-Lösung
hinzubekommen. Das bietet etwas mehr Möglichkeiten wie das OLED-Display.
Also vor der Stufe zum Nextion- und ePaper-Display, die ich auch noch hier liegen habe.
Leider ist der Faktor Zeit, wie immer etwas begrenzt  ;)

Nachdem ich derzeit mit länger mit dem ESP aktiv war, ist der Refresh mit den STMs aber auch für mich hilfreich.  :-[ ;D

Falls Locutus etwas mit dem BME680 planen sollte: Wichtig darauf zu achten, eine thermische Isolation
zu den Wärme-erzeugenden Komponenten hinzubekommen. Auf der NanoLGW und der Gateway-Platine werden die Temperaturwerte
doch sehr verfälscht (bei mir 6..8°C zu hoch) und die Auswirkungen auf den BSEC-Algorithmus wird nicht von der Hand zu weisen sein.
Genauso die Anordnung im oder am Gehäuse wäre auch noch ein Aspekt, den es zu berücksichtigen gilt.
Ich sehe eine Lösung mit einer Stiftleiste z.B. im 1mm-Raster hier sinnvoll, um den Sensor dann passend abgetrennt platzieren zu können.

Bei mir verhält sich das Maple-Board so, dass direkt nach dem Einstecken in die USB-Buchse, der Bootloader in einem Zeitfenster aktiv ist
und DFU-UTIL findet das Board.  Danach ist die Serielle Schnittstelle aktiv.
Unter Windows ist dieses Tool sehr hilfreich,
da es den Aufbau der Seriellen in der Taskleiste anzeigt. Vor allem, wenn man viele Serielle im Einsatz hat...  ;D ;D
Vielleicht gibt es auch unter Linux etwas Vergleichbares ?

Ich habe mir noch ein paar weitere Sensoren bestellt, um dann eine 3-dimensionale Auflösung hinzubekommen und herauszufinden
wie sich das CO2 im Raum bzw. dann auch in der Wohnung verteilt...  Also ein Sensor am Boden plus einen in 1m + 2m Höhe.
Ich würde gerne dem Phänomen auf die Schliche kommen, warum die Werte nachts so hoch ansteigen ...

Grüße,
Jürgen

PS: Locutus: /var/log/messages ?


hdgucken

#434
Bei mir sind die IAQ Werte Nachts auch so hoch, wäre mal interessant, das mit den unterschiedlichen Höhen zu erfassen.
Siehe Anhang ...

Vielleicht könnte man eine abgespeckte Version des Universalsensors direkt für das kleine STM32F05 Board entwickeln,
da es ja nur 64K Flash hat.

Mein BluePill verhält sich mit dem Bootloader genau so, erst DFU-Mode und nach ein paar Sekunden schaltet es auf USB seriell um.

Gruß Thomas