BME680-Sensor als Plugin in aktueller ESPEasy Version einbinden (MQTT, InfluxDB)

Begonnen von juergs, 19 März 2021, 08:17:00

Vorheriges Thema - Nächstes Thema

juergs

    Ziel: Integration des BME680-Plugins, welches vor ca. 2 Jahren erstellt wurde, auf die aktuelle ESP-Easy Version zu migrieren und zu dokumentieren.
    Bezug: https://github.com/juergs/ESPEasy_BME680_TVOC und https://forum.fhem.de/index.php/topic,78619.msg972259.html#msg972259

    Unter Verwendung von herrmanj's UDP-Libs: https://github.com/herrmannj/AirQuality/tree/master/FHEM an FHEM anzubinden
    https://waschto.eu/2018/08/19/espeasy-eigene-oder-zusaetzliche-plugins-einbinden/
    https://diyprojects.io/convert-arduino-code-into-esp-easy-mega-plugin-for-esp8266-esp32/

    <ToDo, noch in Entwicklung>

    Vorgehensweise:

    Vorbereitungen:

    Anmerkung zur Adafruit BME680-Lib:
    [/list][/list]On-line documentation for the APIs is available, too:
      * https://adafruit.github.io/Adafruit_BME680/html/index.html

    Requires installation of the Adafruit Unified Sensor library:
      * https://github.com/adafruit/Adafruit_Sensor


    Compile:
    Da die Konfiguration eine Fülle von Varianten enthält, muss man die passende Variante z.B. für das "Wemos D1"  Board erst mal zuordnen/herausfinden):
    Wemos D1: wemos-d1-mini-uebersicht mit 4MB Flash.
    Des Weiteren hat ESPEasy verschiedene Projekt-Varianten wie dev/test/normal etc. deren Einfluss erst mal herauszufinden ist.
    Für einen ersten Compile und Upload kann es dann nach diesen Vorbereitungen für den Wemos D1 losgehen:
    Dazu habe ich die Einstellung für den Default-Compile in der Datei platform.ini auf  "default_envs = normal_ESP8266_4M1M" gesetzt.
    Um die Compilezeit gering zu halten und erst mal noch nicht für den ESP32 auch zu compilieren.

    Zitat
    [platformio]
    description  = Firmware for ESP82xx/ESP32 for easy IoT deployment of sensors.
    extra_configs =
      platformio_core_defs.ini
      platformio_esp82xx_base.ini
      platformio_esp82xx_envs.ini
      platformio_esp32_envs.ini
      platformio_special_envs.ini

    ;default_envs = custom_ESP8266_4M1M, custom_ESP32_4M316k
    ;default_envs = custom_ESP8266_4M1M

    ;default_envs = dev_ESP8266_4M1M
    default_envs = normal_ESP8266_4M1M
    ;default_envs = test_beta_ESP8266_4M1M
    ; ..etc
    ;build_cache_dir = $PROJECT_DIR\.buildcache

    Dann über die Platformio-Konsole (siehe Anhang) folgende Kommandos eingeben, nachdem man in der Statuszeile von VSCode die gewünschte Variante eingestellt hat.
    In der PIO-Konsole oder über die Status-Zeile einen Compile "anwerfen":

    • mit "pio run " kompilieren
    • "pio run -t upload" auf das Board via USB uploaden (Serial Port wird automatisch herausgefunden)

    https://docs.platformio.org/en/latest/core/userguide/index.html#commands
    Getting Started with PlatformIO
    https://dronebotworkshop.com/platformio/
    https://github.com/Nilhcem/home-monitoring-grafana/
    Mosquito-InfluxDB-Bridge in Python + Docker: https://github.com/Nilhcem/home-monitoring-grafana/blob/master/02-bridge/main.py
    https://github.com/CymaticLabs/InfluxDBStudio

    Erscheint dieser Output:
    Linking .pio\build\normal_ESP8266_4M1M\ESP_Easy_mega_20210319_normal_ESP8266_4M1M.elf
    Building .pio\build\normal_ESP8266_4M1M\ESP_Easy_mega_20210319_normal_ESP8266_4M1M.bin
    Retrieving maximum program size .pio\build\normal_ESP8266_4M1M\ESP_Easy_mega_20210319_normal_ESP8266_4M1M.elf
    Checking size .pio\build\normal_ESP8266_4M1M\ESP_Easy_mega_20210319_normal_ESP8266_4M1M.elf
    Advanced Memory Usage is available via "PlatformIO Home > Project Inspect"
    RAM:   [=====     ]  54.0% (used 44260 bytes from 81920 bytes)
    Flash: [========= ]  91.6% (used 957108 bytes from 1044464 bytes)
    Creating BIN file ".pio\build\normal_ESP8266_4M1M\ESP_Easy_mega_20210319_normal_ESP8266_4M1M.bin" using "C:\Users\js\.platformio\packages\framework-arduinoespressif8266\bootloaders\eboot\eboot.elf" and ".pio\build\normal_ESP8266_4M1M\ESP_Easy_mega_20210319_normal_ESP8266_4M1M.elf"
    bin_gzip([".pio\build\normal_ESP8266_4M1M\ESP_Easy_mega_20210319_normal_ESP8266_4M1M.bin"], [".pio\build\normal_ESP8266_4M1M\ESP_Easy_mega_20210319_normal_ESP8266_4M1M.elf"])
    gzip:   .pio\build\normal_ESP8266_4M1M\ESP_Easy_mega_20210319_normal_ESP8266_4M1M.bin
    bin_elf_copy([".pio\build\normal_ESP8266_4M1M\ESP_Easy_mega_20210319_normal_ESP8266_4M1M.bin"], [".pio\build\normal_ESP8266_4M1M\ESP_Easy_mega_20210319_normal_ESP8266_4M1M.elf"])
    copy to:   build_output\debug\ESP_Easy_mega_20210319_normal_ESP8266_4M1M.elf
    copy to:   build_output\bin\ESP_Easy_mega_20210319_normal_ESP8266_4M1M.bin
    copy to:   build_output\bin\ESP_Easy_mega_20210319_normal_ESP8266_4M1M.bin.gz
    copy to:   build_output\debug\ESP_Easy_mega_20210319_normal_ESP8266_4M1M.env.txt
    =============================[SUCCESS] Took 32.20 seconds  ======================================================================================
    Environment          Status    Duration
    -------------------  --------  ------------
    normal_ESP8266_4M1M  SUCCESS   00:00:32.195
    ============================= 1 succeeded in 00:00:32.195 =========


    ... verlief der Compile erfolgreich und kann hochgeladen werden.

    ZitatCompiling .pio\build\normal_ESP8266_4M1M\src\ESPEasy.ino.cpp.o
    D:/Work_FHEM/_espeasy/ESPEasy-mega_20210223/src/_P119_BME680.ino: In function 'boolean Plugin_119(byte, EventStruct*, String&)':
    D:/Work_FHEM/_espeasy/ESPEasy-mega_20210223/src/_P119_BME680.ino:288:18: warning: variable 'use_filtered_tvoc' set but not used [-Wunused-but-set-variable]
                 bool use_filtered_tvoc = false;
                      ^
    D:/Work_FHEM/_espeasy/ESPEasy-mega_20210223/src/_P119_BME680.ino:416:27: warning: format '%lu' expects argument of type 'long unsigned int', but argument 10 has type 'char*' [-Wformat=]
                    , str_ratio);
                               ^
    D:/Work_FHEM/_espeasy/ESPEasy-mega_20210223/src/_P119_BME680.ino:416:27: warning: format '%lu' expects argument of type 'long unsigned int', but argument 11 has type 'char*' [-Wformat=]
    D:/Work_FHEM/_espeasy/ESPEasy-mega_20210223/src/_P119_BME680.ino:416:27: warning: format '%lu' expects argument of type 'long unsigned int', but argument 10 has type 'char*' [-Wformat=]
    D:/Work_FHEM/_espeasy/ESPEasy-mega_20210223/src/_P119_BME680.ino:416:27: warning: format '%lu' expects argument of type 'long unsigned int', but argument 11 has type 'char*' [-Wformat=]
    Retrieving maximum program size .pio\build\normal_ESP8266_4M1M\ESP_Easy_mega_20210319_normal_ESP8266_4M1M.elf
    Checking size .pio\build\normal_ESP8266_4M1M\ESP_Easy_mega_20210319_normal_ESP8266_4M1M.elf
    Advanced Memory Usage is available via "PlatformIO Home > Project Inspect"
    RAM:   [=====     ]  54.0% (used 44260 bytes from 81920 bytes)
    Flash: [========= ]  91.6% (used 957108 bytes from 1044464 bytes)
    Configuring upload protocol...
    AVAILABLE: espota, esptool
    CURRENT: upload_protocol = esptool
    Looking for upload port...
    Use manually specified: COM8
    Uploading .pio\build\normal_ESP8266_4M1M\ESP_Easy_mega_20210319_normal_ESP8266_4M1M.bin
    esptool.py v3.0
    Serial port COM8
    Connecting....
    Chip is ESP8266EX
    Features: WiFi
    Crystal is 26MHz
    MAC: cc:50:e3:44:d0:b6
    Uploading stub...
    Running stub...
    Stub running...
    Configuring flash size...
    Compressed 961264 bytes to 630483...
    Writing at 0x00000000... (2 %)
    Writing at 0x00004000... (5 %)
    Writing at 0x00008000... (7 %)
    Writing at 0x0000c000... (10 %)
    Writing at 0x00010000... (12 %)
    Writing at 0x00014000... (15 %)
    Writing at 0x00018000... (17 %)
    Writing at 0x0001c000... (20 %)
    .
    .
    .
    Writing at 0x0007c000... (82 %)
    Writing at 0x00080000... (84 %)
    Writing at 0x00084000... (87 %)
    Writing at 0x00088000... (89 %)
    Writing at 0x0008c000... (92 %)
    Writing at 0x00090000... (94 %)
    Writing at 0x00094000... (97 %)
    Writing at 0x00098000... (100 %)
    Wrote 961264 bytes (630483 compressed) at 0x00000000 in 55.5 seconds (effective 138.5 kbit/s)...
    Hash of data verified.

    Leaving...
    Hard resetting via RTS pin...
    ========== [SUCCESS] Took 82.82 seconds
    Environment          Status    Duration
    -------------------  --------  ------------
    normal_ESP8266_4M1M  SUCCESS   00:01:22.815
    ========== 1 succeeded in 00:01:22.815 ====================


    ESPEasy-Doku (outdated): https://www.letscontrolit.com/wiki/index.php?title=ESPEasy
    https://docs.platformio.org/en/latest/boards/espressif8266/d1_mini.html?utm_medium=piohome&utm_source=platformio
    https://diyprojects.io/esp-easy-install-ota-custom-firmware-playground/

    Aktualisierte Sourcen + Binaries dazu: ESPEasy-mega_BME680_TVOC_20210223
    Sourcen und Binary der V2 im Github-Repository  (Pre-Release im Test!)

    juergs

    So, das waren die einfachen Anfangsschritte, dann kommen die Hürden...  ;)

    ZitatDepending on your needs, we release different types of files:
    Firmware name    Hardware    Included plugins
    ESPEasy_mega-20190225_normal_ESP8266_1M.bin    ESP8266 with 1MB flash    Stable
    ESPEasy_mega-20190225_test_ESP8266_1M.bin    ESP8266 with 1MB flash    Stable + Test
    ESPEasy_mega-20190225_dev_ESP8266_1M.bin    ESP8266 with 1MB flash    Stable + Test + Development
    ESPEasy_mega-20190225_normal_ESP8266_4M.bin    ESP8266 with 4MB flash    Stable
    ESPEasy_mega-20190225_test_ESP8266_4M.bin    ESP8266 with 4MB flash    Stable + Test
    ESPEasy_mega-20190225_dev_ESP8266_4M.bin    ESP8266 with 4MB flash    Stable + Test + Development
    ESPEasy_mega-20190225_normal_ESP8285_1M.bin    ESP8285 with 1MB flash    Stable
    ESPEasy_mega-20190225_test_ESP8285_1M.bin    ESP8285 with 1MB flash    Stable + Test
    ESPEasy_mega-20190225_dev_ESP8285_1M.bin    ESP8285 with 1MB flash    Stable + Test + Development

    in der obigen _P119_ habe ich schon einige Schritte zur Einbindung mit eingebaut. Siehe auch: howto-espeasy-plugin-installieren-und-konfigurieren
    https://github.com/letscontrolit/ESPEasy/blob/mega/src/_P106_BME680.ino
    https://github.com/letscontrolit/ESPEasyPluginPlayground

    Z.B. die Einbindung des Plugins, Registireung bzw. Aktivierung in ESPEasy-list-of-official-plugins.

    "SENSOR_TYPE_QUAD" not known: https://www.letscontrolit.com/forum/viewtopic.php?t=8098
    Device[deviceCount].VType = Sensor_VType::SENSOR_TYPE_QUAD;

    Dafür muss noch im PlugIn dies Definition mit hereingenommen werden ...:
    #include "_Plugin_Helper.h"

    // needed for DeviceStruct ?!
    #include "ESPEasy_common.h"


    Ich ersetze aus dem Playground, die dortige "_P119_xxx", mit meinem Modul "_P119_BME680.ino" und verzichte auf Dev-Selektion etc.

    Details: I2C-Adresse ist die 0x76 (Bei meinem Modul "OSHPark-BME680 breakout" - I2C !)

    Weitere Vorbereitungen: fhem-und-grafana-tool-zum-visualisieren-von-messdaten/

    Das muss noch korrigiert:

    ZitatD:/Work_FHEM/_espeasy/ESPEasy-mega_20210223/src/_P119_BME680.ino: In function 'boolean Plugin_119(byte, EventStruct*, String&)':
    D:/Work_FHEM/_espeasy/ESPEasy-mega_20210223/src/_P119_BME680.ino:288:18: warning: variable 'use_filtered_tvoc' set but not used [-Wunused-but-set-variable]
                 bool use_filtered_tvoc = false;
                      ^
    D:/Work_FHEM/_espeasy/ESPEasy-mega_20210223/src/_P119_BME680.ino:416:27: warning: format '%lu' expects argument of type 'long unsigned int', but argument 10 has type 'char*' [-Wformat=]
                    , str_ratio);
                               ^

    ... und die neuen Änderungen mit verbesserter TVOC-Berechnung von Jörg mit eingebunden werden:
    Zitat
    https://github.com/herrmannj/airq-mqtt/blob/master/IAQ_BME680.h
    https://github.com/herrmannj/airq-mqtt/blob/master/IAQ_BME680.cpp

    juergs

    ZitatFirmware
    Build:⋄   20112 - Mega
    System Libraries:⋄   ESP82xx Core 2843a5ac, NONOS SDK 2.2.2-dev(38a443e), LWIP: 2.1.2 PUYA support
    Git Build:⋄   
    Plugin Count:⋄   49 [Normal]
    Build Origin:   Self built
    Build Time:⋄   Mar 19 2021 09:21:32
    Binary Filename:⋄   ESP_Easy_mega_20210319_normal_ESP8266_4M1M
    Build Platform:⋄   Windows-10-10.0.19041-SP0
    Git HEAD:⋄   pygit2_not_installed
    System Status
    Syslog Log Level:   Debug
    Serial Log Level:   Debug
    Web Log Level:   None
    ESP Board
    ESP Chip ID:   4509878 (0x44D0B6)
    ESP Chip Frequency:   80 MHz
    ESP Chip Model:   ESP8266
    ESP Chip Cores:   1
    ESP Board Name:   PLATFORMIO_ESP12E
    Storage
    Flash Chip ID:   Vendor: 0x68 Device: 0x4016
    Flash Chip Real Size:   4096 kB
    Flash IDE Size:   4096 kB
    Flash IDE Speed:   40 MHz
    Flash IDE Mode:   DOUT
    Flash Writes:   9 daily / 12 boot
    Sketch Size:   939 kB (2132 kB free)
    Max. OTA Sketch Size:   1019 kB (1044464 bytes)
    OTA possible:   true
    OTA 2-step Needed:   false
    SPIFFS Size:   934 kB (844 kB free)
    Page size:   256
    Block size:   8192
    Number of blocks:   116
    Maximum open files:   5
    Maximum path length:   32

    Habe beide BME680-Plugins hinzugefügt.
    Meine Version mit js_BME680-Lib läuft im Moment nocht nicht stabil (Restart Reason: Software Watchdog) !

    Zitat--------------- CUT HERE FOR EXCEPTION DECODER ---------------

    ets Jan  8 2013,rst cause:2, boot mode:(3,7)

    load 0x4010f000, len 3584, room 16
    tail 0
    chksum 0xb0
    csum 0xb0
    v2843a5ac
    ~ld
    .U48 : Info   :


    INIT : Booting version:  (ESP82xx Core 2843a5ac, NONOS SDK 2.2.2-dev(38a443e), LWIP: 2.1.2 PUYA support)
    49 : Info   : INIT : Free RAM:33192
    50 : Info   : INIT : Warm boot #34 Last Action before Reboot: PLUGIN_READ: Task 1 Last systime: 1616158192 - Restart Reason: Software Watchdog
    52 : Info   : FS   : Mounting...
    77 : Info   : FS   : Mount successful, used 75802 bytes of 957314
    169 : Info   : FS   : Success garbage collection
    230 : Info   : FS   : Success garbage collection
    286 : Info   : FS   : Success garbage collection
    303 : Info   : CRC  : SecuritySettings CRC   ...OK
    414 : Info   : INIT : Free RAM:29424
    416 : Info   : INIT : I2C
    416 : Info   : INIT : SPI not enabled
    525 : Info   : INFO : Plugins: 49 [Normal] (ESP82xx Core 2843a5ac, NONOS SDK 2.2.2-dev(38a443e), LWIP: 2.1.2 PUYA support)
    529 : Info   : WIFI : Connecting jsifrz 7C:FF:4D:5F:AB:37 Ch:6 (RTC)  attempt #0
    633 : Info   : WIFI : Set WiFi to STA
    740 : Info   : WIFI : Arduino wifi status: WL_DISCONNECTED ESPeasy internal wifi status: DISCONNECTED
    743 : Info   : Webserver: start
    744 : Info   : Time set to 1616158192.000
    746 : Info   : Current Time Zone: STD time start: 2021-10-31 03:00:00 offset: 120 min
    748 : Info   : Local time: 2021-03-19 14:49:52
    843 : Info   : PLUGIN_READ - BME680  : init
    843 : Info   : BME680  : PLUGIN_READ initialized.
    844 : Info   : BME680  : PLUGIN_READ-Settings:
    *** JS_BME680Class started!


    --------------- CUT HERE FOR EXCEPTION DECODER ---------------

    Erstes Indiz: Debug-Infos eingeben :
    Zitat*** JS_BME680Class started!

    *** JS_BME680Class start def ESP8266.
    Enabled: I2C for Wemos D1 mini SDA:D2 / SCL:D1

    *** JS_BME680Class start failed!


    Zitat*** JS_BME680Class start failed! Sensor Address not found!

    *** Sensor Address not found? I2C-Adr: 118 = 0x76 (!)

    Sensor-Board defekt?  Upgedatete Adafruit-Lib geändert? => Versuche ein anderes Board anzuschließen.

    Probiere erst mal den Sample-Sketch aus  ;)

    juergs

    Dann weiter mit einem funktionierenem Board:
    (BME680-ADDR = LOW = 0x76)
    GPIO5 = D1 = SCL (I2C)
    GPIO4 = D2 = SDA (I2C)

    Zitat
    *** JS_BME680Class started!

    *** JS_BME680Class start def ESP8266.
    Enabled: I2C for Wemos D1 mini SDA:D2 / SCL:D1
    .I2C $E0 <= 0xB6,
    .I2C $D0 => 0x61,
    .I2C $89 => 0xC0, 0x8B, 0x66, 0x3, 0x0, 0x8B, 0x91, 0x39, 0xD7, 0x58, 0x0, 0x0, 0x1F, 0x89, 0xFF, 0x3D, 0x1E, 0x0, 0x0, 0x70, 0xEC, 0xA2, 0xF9, 0x1E, 0xA4,
    .I2C $E1 => 0x3E, 0xED, 0x31, 0x0, 0x2D, 0x14, 0x78, 0x9C, 0x7A, 0x65, 0x18, 0xB9, 0xF2, 0x12, 0x9F, 0x0,
    .I2C $2 => 0x16,
    .I2C $0 => 0x2B,
    .I2C $4 => 0x3,
    Result: 0
    T1 = 25978
    T2 = 26251
    T3 = 3
    P1 = 37259
    P2 = -10439
    P3 = 88
    P4 = 7936
    P5 = -119
    P6 = 30
    P7 = 61
    P8 = -5008
    P9 = -1630
    P10 = 30
    H1 = 797
    H2 = 1006
    H3 = 0
    H4 = 45
    H5 = 20
    H6 = 120
    H7 = -100
    G1 = -14
    G2 = -18152
    G3 = 18
    G1 = -14
    G2 = -18152
    G3 = 18
    Heat Range = 1
    Heat Val = 43
    SW Error = 0
    I2C: ok BME680 sensor found! :-)

    Schon geht es ... Missgriff in die Bastelkiste ...  >:( ;D

    ... was haben wir gelernt? => Fehlerfälle auch mit Sicherheit (DebugInfos) abdecken   !
    Jetzt loggt sogar die Adafruit-Lib mit.


    Output bei eingeschaltener DEBUG-Property des Devices:
    ZitatBME680Class started by do_begin()!
    I2C: ok BME680 sensor found! :-)
    : I2C: 118 Elevation: 210 Filter: 1 Toffs: -1 Hoffs: 0 Plot: 0 Debug: 1
    3026 : Info   : JS_BME680-ReadPLUGIN_INIT: JS_BME680 : ready + initialized!
    : ready + not initialized code done! do_begin called
    3066 : Info   : WIFI : Connected! AP: myap(7C:FF:4D:5F:AB:37) Ch: 6 Duration: 1323 ms
    3067 : Info   : WIFI : Arduino wifi status: WL_CONNECTED ESPeasy internal wifi status: Conn.
    3069 : Info   : WIFI : DHCP IP: 192.x.x.49 (ESP-Easy) GW: 192.x.x.1 SN: 255.255.255.0   duration: 19 ms
    3081 : Info   : WIFI : Arduino wifi status: WL_CONNECTED ESPeasy internal wifi status: Conn.
    . Entered JS_BME680Class::getBme680Readings() .JS_BME680.resitance beeing zero! First Reading?
    . Entered JS_BME680Class::getBme680Readings() .JS_BME680.bme680VocValid not ready! Wait about 300 sec (5 min) to warm up ... 274
    . Entered JS_BME680Class::getBme680Readings() .JS_BME680.bme680VocValid not ready! Wait about 300 sec (5 min) to warm up ... 262
    . Entered JS_BME680Class::getBme680Readings() .JS_BME680.bme680VocValid not ready! Wait about 300 sec (5 min) to warm up ... 250
    plugin_119_call_BME680_do_bme680_measurement
    . Entered JS_BME680Class::getBme680Readings() .JS_BME680.bme680VocValid not ready! Wait about 300 sec (5 min) to warm up ... 239
    plugin_119_BME680-Read: performed measurement!
    PLUGIN_Read: JS_BME680 : init done, measure!
    . Entered JS_BME680Class::getBme680Readings() .JS_BME680.bme680VocValid not ready! Wait about 300 sec (5 min) to warm up ... 238
    . Entered JS_BME680Class::getBme680Readings() .JS_BME680.bme680VocValid not ready! Wait about 300 sec (5 min) to warm up ... 226
    . Entered JS_BME680Class::getBme680Readings() .JS_BME680.bme680VocValid not ready! Wait about 300 sec (5 min) to warm up ... 214
    . Entered JS_BME680Class::getBme680Readings() .JS_BME680.bme680VocValid not ready! Wait about 300 sec (5 min) to warm up ... 202
    . Entered JS_BME680Class::getBme680Readings() .JS_BME680.bme680VocValid not ready! Wait about 300 sec (5 min) to warm up ... 190
    plugin_119_call_BME680_do_bme680_measurement
    . Entered JS_BME680Class::getBme680Readings() .JS_BME680.bme680VocValid not ready! Wait about 300 sec (5 min) to warm up ... 179
    plugin_119_BME680-Read: performed measurement!
    PLUGIN_Read: JS_BME680 : init done, measure!
    . Entered JS_BME680Class::getBme680Readings() .JS_BME680.bme680VocValid not ready! Wait about 300 sec (5 min) to warm up ... 178
    . Entered JS_BME680Class::getBme680Readings() .JS_BME680.bme680VocValid not ready! Wait about 300 sec (5 min) to warm up ... 166
    . Entered JS_BME680Class::getBme680Readings() .JS_BME680.bme680VocValid not ready! Wait about 300 sec (5 min) to warm up ... 154
    . Entered JS_BME680Class::getBme680Readings() .JS_BME680.bme680VocValid not ready! Wait about 300 sec (5 min) to warm up ... 142
    . Entered JS_BME680Class::getBme680Readings() .JS_BME680.bme680VocValid not ready! Wait about 300 sec (5 min) to warm up ... 130
    plugin_119_call_BME680_do_bme680_measurement
    . Entered JS_BME680Class::getBme680Readings() .JS_BME680.bme680VocValid not ready! Wait about 300 sec (5 min) to warm up ... 119
    plugin_119_BME680-Read: performed measurement!
    PLUGIN_Read: JS_BME680 : init done, measure!
    . Entered JS_BME680Class::getBme680Readings() .JS_BME680.bme680VocValid not ready! Wait about 300 sec (5 min) to warm up ... 118
    . Entered JS_BME680Class::getBme680Readings() .JS_BME680.bme680VocValid not ready! Wait about 300 sec (5 min) to warm up ... 106
    . Entered JS_BME680Class::getBme680Readings() .JS_BME680.bme680VocValid not ready! Wait about 300 sec (5 min) to warm up ... 94
    . Entered JS_BME680Class::getBme680Readings() .JS_BME680.bme680VocValid not ready! Wait about 300 sec (5 min) to warm up ... 82
    . Entered JS_BME680Class::getBme680Readings() .JS_BME680.bme680VocValid not ready! Wait about 300 sec (5 min) to warm up ... 70
    plugin_119_call_BME680_do_bme680_measurement
    . Entered JS_BME680Class::getBme680Readings() .JS_BME680.bme680VocValid not ready! Wait about 300 sec (5 min) to warm up ... 59
    plugin_119_BME680-Read: performed measurement!
    PLUGIN_Read: JS_BME680 : init done, measure!
    . Entered JS_BME680Class::getBme680Readings() .JS_BME680.bme680VocValid not ready! Wait about 300 sec (5 min) to warm up ... 58
    . Entered JS_BME680Class::getBme680Readings() .JS_BME680.bme680VocValid not ready! Wait about 300 sec (5 min) to warm up ... 46
    . Entered JS_BME680Class::getBme680Readings() .JS_BME680.bme680VocValid not ready! Wait about 300 sec (5 min) to warm up ... 34
    . Entered JS_BME680Class::getBme680Readings() .JS_BME680.bme680VocValid not ready! Wait about 300 sec (5 min) to warm up ... 22
    . Entered JS_BME680Class::getBme680Readings() .JS_BME680.bme680VocValid not ready! Wait about 300 sec (5 min) to warm up ... 10
    plugin_119_call_BME680_do_bme680_measurement
    . Entered JS_BME680Class::getBme680Readings() .--------------------------------------
    . Timestamp: ..301.00
    . tVoc:...163.44
    . tVocEst:..81.72
    . Approx (tV):..163.44
    . Approx (tV2):..16.34
    . Ratio:...1.03
    . Ratio_log:..0.03
    . ABC_base:..26883004
    . Abs_Hum:..6.60
    . Resistance (raw):.564360
    . Resistance (filt.):.564360.00
    . Temp:...22.43
    . Hum:...33.17
    . Press:...1011.68
    . Dewpoint:..5.47
    . Alt:...27.53
    . T-Offs:...-1.00
    . H-Offs:...0.00
    plugin_119_BME680-Read: performed measurement!
    PLUGIN_Read: JS_BME680 : init done, measure!

    Dann geht es an den nächsten Schritt.

    juergs

    Dank Alex's Implementierung war die Einbindung in diese Version einfacher als gedacht (Danke dafür  :D).
    Habe einige Optimierungen übernommen. (z.B. while(1) entfernt, wenn kein Sensor erkannt wurde.)

    Jetzt heißt es Testen und ggf. noch ein bisschen Feinschliff beim Debug-Output vornehmen ...

    Bin mal gespannt, wie sich der neue optimierte Baseline-Algorithmus auswirkt. (Dank an herrmanj!)

    Zitat
    600759 : Iplugin_119_BME680-Read: performed measurement!
    PLUGIN_Read: JS_BME680 : init done, measure!
    nfo   : BME680-Read: performed measurement!
    600768 : Info   : BME680-Read: get filtered value.
    .--------------------------------------
    . Timestamp: ..601.15
    . tVoc:...125.00
    . tVocEst:..124.23
    . Ratio:...1.00
    . Ratio_log:..0.00
    . ABC_base:..946135.63
    . Abs_Hum:..7.99
    . Resistance (raw):.135299
    . Resistance (filt.):.988433.63
    . Temp:...23.06
    . Hum:...38.76
    . Press:...1008.37
    . Dewpoint:..8.29
    . Alt:...40.56
    . T-Offs:...0.00
    . H-Offs:...0.00
    601971 : Info   : WD   : Uptime 10 ConnectFailures 0 FreeMem 19816 WiFiStatus WL_CONNECTED ESPeasy internal wifi status: Conn. IP Init

    Grüße,
    Jürgen


    Sourcen und Binary der V2 im Github-Repository  (Pre-Release im Test!)

    adn77

    Hallo Jürgen,

    cool, dass du das nochmal zusammengefasst hast - ich dachte hier kennt sich jeder mit Platform.io aus und kam mir ein wenig blöd vor, da ich bestimmt einen Tag gebraucht hatte, um deine alte Bibliothek in ESPEasy-Mega zum laufen zu bekommen :D

    Auf jeden Fall ist der neue Baseline Algorithmus leichter nachvollziehbar. Bei mir läuft das seit Dezember ziemlich unauffällig.
    Allerdings habe ich festgestellt, dass dein zusätzlicher Kalman-Filter zu einer leichten Verschiebung führt - ich wollte immer mal testen, wie die Kurve aussieht, wenn man ihn weglässt. HerrmanJ scheint ja auch ohne auszukommen...

    Alex

    PS: ich nutze übrigens einen ESP01 (Target minimal_core_274_ESP8266_1M_OTA_FHEM_HA), wenn jemand ideen hat, welche Biblitheken ich in Platform.io noch entfernen könnte um weitere 60kb zu sparen... Dann würde sogar OTA laufen.

    juergs

    Hallo Alex,

    danke für Deine Antwort. Cool.  ;)

    ZitatAllerdings habe ich festgestellt, dass dein zusätzlicher Kalman-Filter zu einer leichten Verschiebung führt
    Ja das stimmt, aber nur bei großen Deltas. Im Normalfall zieht er die Kurve sehr stabil ohne große Störungen.. 
    Den Unterschied sieht man deutlich zwischen dem ersten und letzen Graphen (V1 + BSEC). Quasi deckungsgleich! :)
    Man sieht aber auch deutlich das Baseline-Problem der V1.
    Die großen Ausschläge sind jeweils Fenster öffnen und frische Luft ins Zimmer lassen ....
    Bei Bedarf kann man ja ausschalten.  ;)

    ZitatAuf jeden Fall ist der neue Baseline Algorithmus leichter nachvollziehbar. Bei mir läuft das seit Dezember ziemlich unauffällig.
    Bin noch nicht ganz überzeugt. Muß erst etwas mehr Erfahrung damit sammeln und auch den Algorithmus nachvollziehen. (-> Beta!)
    Im Moment sehe eher Korrelation zwischen BSEC und V1 (Screenshot). Muss auch noch mal die neue Lib checken.

    Zitatich nutze übrigens einen ESP01 (Target minimal_core_274_ESP8266_1M_OTA_FHEM_HA), wenn jemand ideen hat, welche Biblitheken ich in Platform.io noch entfernen könnte um weitere 60kb zu sparen... Dann würde sogar OTA laufen.
    Ja, das würde mich auch interessieren, hatte mich noch nicht mit OTA beschäftigt...

    Man kann vermutlich viel rauswerfen um noch Platz gutzumachen.

    Grüße nach Berlin+ Danke für die Unterstützung.

    Jürgen

    Zitat2342194 : Info   : WD   : Uptime 39 ConnectFailures 0 FreeMem 19464 WiFiStatus WL_CONNECTED ESPeasy internal wifi status: Conn. IP Init
    r$76 : Info   : INIT : Free RAM:33208
    77 : Info   : INIT : Warm boot #2 Last Action before Reboot: Background Task Last systime: 1616362675 - Restart Reason: External System
    79 : Info   : FS   : Mounting...
    104 : Info   : FS   : Mount successful, used 76555 bytes of 957314
    132 : Info   : CRC  : SecuritySettings CRC   ...OK
    244 : Info   : INIT : Free RAM:29600
    246 : Info   : INIT : I2C
    246 : Info   : INIT : SPI not enabled
    356 : Info   : INFO : Plugins: 49 [Normal] (ESP82xx Core 2843a5ac, NONOS SDK 2.2.2-dev(38a443e), LWIP: 2.1.2 PUYA support)
    357 : Info   : EVENT: System#Wake
    471 : Info   : WIFI : Connecting jsifrz 7C:FF:4D:5F:AB:37 Ch:6 (RTC)  attempt #0
    575 : Info   : WIFI : Set WiFi to STA
    681 : Info   : WIFI : Arduino wifi status: WL_DISCONNECTED ESPeasy internal wifi status: DISCONNECTED
    684 : Info   : Webserver: start
    685 : Info   : Time set to 1616362675.000
    686 : Info   : Current Time Zone: STD time start: 2021-10-31 03:00:00 offset: 60 min
    689 : Info   : Local time: 2021-03-21 22:37:55
    693 : Info   : EVENT: System#Boot
    1725 : Info   : PLUGIN_READ - BME680  : init
    1725 : Info   : BME680  : PLUGIN_READ initialized.
    1726 : Info   : BME680  : PLUGIN_READ-Sett
    *** JS_BME680Class started calling do_begin()!
    ings: I2C: 118 Elevation: 0 Filter: 1 Toffs: 0 Hoffs: 0 Plot: 0 Debug: 1
    2739 : Info   : JS_BME680-Read : ready + not initialized coPLUGIN_INIT: JS_BME680 : ready + initialized!
    de done! do_begin called

    juergs

    Noch nicht ganz am Ziel, aber nahe dran.
    Mit Hilfe der ArduinoTrace-Header-Datei kommt man Fehlern, besonders im Ablauf, wirklich leichter auf die Spur.
    Dort sind  die Makros Trace() und DUMP() definiert, die die Abläufe sichtbar machen. Klasse Tool!

    ZitatP119_BME680.ino:313: boolean Plugin_119(byte, EventStruct*, String&)
    360951 : Info   : BME680-Read: performed measurement!plugin_119_BME680-Read: performed measurement!
    PLUGIN_Read: JS_BME680 : init done, measure!

    36095_P119_BME680.ino:391: boolean Plugin_119(byte, EventStruct*, String&)
    _P119_BME680.ino:60: void sendUdpMessage(char*)
    T:IAQC;FW:1.0;ID:AAA40E;IP:192.168.178.158;R:-37;F:THPV;T:20.80;H:43.73;AH:0.00;D:0.00;P:1013.1;V:125;R:0;DB:1;DF:0;DR:1;
    3 : Info   : BME680-Read: get raw value.
    360978 : Info   :
    360998 : Info   : EVENT: BME680TVOC119#All=20.8,44,1013.13,125
    _P119_BME680.ino:458: cycleCounter = 10
    _P119_BME680.ino:458: cycleCounter = 11
    _P119_BME680.ino:464: boolean Plugin_119(byte, EventStruct*, String&)
    js_BME680.cpp:186: void JS_BME680Class::getBme680Readings()
    js_BME680.cpp:253: void JS_BME680Class::getBme680Readings()
    js_BME680.cpp:264: void JS_BME680Class::getBme680Readings()
    js_BME680.cpp:285: tVoc = 125.00
    js_BME680.cpp:286: ratio = 1.00
    js_BME680.cpp:287: resFiltered = 896382.63
    362442 : Info   : WD   : Uptime 6 ConnectFailures 0 FreeMem 20000 WiFiStatus WL_CONNECTED ESPeasy internal wifi status: Conn. IP Init
    _P119_BME680.ino:458: cycleCounter = 0
    _P119_BME680.ino:458: cycleCounter = 1
    _P119_BME680.ino:458: cycleCounter = 2
    _P119_BME680.ino:458: cycleCounter = 3
    _P119_BME680.ino:458: cycleCounter = 4
    _P119_BME680.ino:458: cycleCounter = 5

    Aber leider noch nicht am Ziel. War gestern ein "langer" Abend  ;)

    @adn
    Die Kalmanfilter-Implementierung macht jetzt Zicken. Braucht also noch F&E.
    Vorerst mit raw-Werten gearbeitet.
    Aber die Kurvenform unten ist leider noch sehr abweichend zu den BSEC-Daten.
    Mich wundert die lange TVOC=125 Phase zu Beginn der Messung.

    RAM:   [=====     ]  54.2% (used 44360 bytes from 81920 bytes)
    Flash: [========= ]  92.0% (used 960936 bytes from 1044464 bytes)


    Papa Romeo

    ...die richtige Lötspitzentemperatur prüft man zwischen Daumen und Zeigefinger.
    ...überlasse niemals etwas einer Software, das du hardwaremässig erreichen kannst.
    ...unvorsichtige Elektriker werden schnell zu leitenden Angestellten.
    und...never change a running System...no Updates if not necessary

    juergs

    Eher das hier:

    ZitatIt does seem to write directly to FHEM instead of using a controller for it.
    But that's what I noticed in the first quick glance.
    It also does allocate a lot of arrays on the stack, which is also a bit "moah"...
    I'm only interested in the IAQ computation code, so I do hope it is in there.

    Wüsste nicht, dass da viele Arrays definiert bzw. benötigt wären und wenn ja, dann die von EspEasy, tsss.

    Ich finde, die Werte beziehungsweise Verläufe können sich sehen lassen: https://forum.fhem.de/index.php?action=dlattach;topic=119678.0;attach=149319;image
    Bis auf das bekannte Baseline Problem und die Filter-Latenz. Was hier zum Thema geworden ist.  ;) :)

    ZitatData structures
    We have a lot of data structures in ESP Easy. The most important ones:
    Settings - Holds the majority of system configurations
    SecuritySettings - Holds things like Wifi SSID, passwords
    ExtraTaskSettings - Holds the current actual copy of additional task settings into RAM
    Important: Most of the data within ESP Easy is always accessible with exception to ExtraTaskSettings.
    Because most structures use global RAM they put a heavy load on resources. Tasks have a lot of string data and we can't afford to keep this data in RAM for all 12 tasks!
    So there's only one copy available in ExtraTaskSettings. Before working on some task, the configuration needs to be loaded from flash.
    The framework handles this before a call is made to a device plugin.

    juergs

    Die V2 läuft jetzt noch unter Beobachtung.
    Spaßeshalber hat sich ein MHZ19   (ohne ABC) über das ESPEasy-Plugin und via MQTT an FHEM angebunden hinzugesellt.
    Allerdings (noch?) ausser Konkurenz.  ;) :(

    Man beachte die Korrelation zwichen BSEC und TVOC  ;D
    Aber auch die Plateau-Bildung von BSEC...  :o

    juergs

    V2 Verlauf gespiegelt?!

    juergs

    Der Hinweis zu Ergebnissen von Langzeitversuchen https://forum.fhem.de/index.php/topic,78619.msg1144236.html#msg1144236
    mit BSEC vs. V1.

    Jewe

    Hallo,
    habe nach dem ersten Beitrag versucht meinen ESP zu Flaschen. Leider ohne Erfolg. Gibt es das nicht auch als bin File?  ;D

    Jens

    juergs

    Hi,

    anbei die Wemos-D1-Version: V1
    P119 = V1
    P219 = org. ESPEasy Resistance-Version.
    Auf die I2C-Adresse achten.
    Also vor der Bme680 Definition ein I2C-Scan machen und prüfen.

    Flasher

    /Edit: Temperatur-Offset ist nur in der Übertragung über SLINK an FHEM wirksam.
    Ansonsten über EasyFormula

    Übertragung an FHEM geht auch über EspEasy-Controller an die ESPEasyBridge (Anleitung).

    Grüße,
    Jürgen

    Jewe

    Hallo Jürgen, vielen Dank. Jetzt habe ich den Sensor zu laufen bekommen. Jens

    juergs

    Habe versucht ESPEasy neu zu kompilieren.

    Allerdings verschaffen einem die Lib-Updates ein plötzlich total verändertes Szenario in VSCode,
    mit vielen Fehlermeldung aus allen möglichen "Ecken" sprich: Envs. Das macht richtig Mühe!

    Bei der ESPEasy-Version ESP_Easy_mega_20210508 konnte ich nur das ENV: "normal_ESP8266_4M1M  SUCCESS   00:01:24.794" zu einem vollständigen Kompilieren überzeugen.
    Damit nicht alle (gefühlt) hunderte Envs kompiliert werden, nur obiges Env in der Statusleiste auswählen (siehe ScreenShot).

    Anbei die aktuellste Version der V1 mit ein paar Schönheitskorrekturen, u.A. in der Debugausgabe beim SLINK-UDP-Versenden:

    Zitat60725plugin_119_BME680-Read: use_slink= true!
    T:IAQC;FW:1.0;ID:AAA40E;IP:192.168.178.158;R:-39;F:THPV;T:23.32;H:35.38;AH:0.00;D:0.00;P:1006.2;V:0;R:1073685114;DB:1073685096;DF:0;DR:1;
       ++++
          plugin_119_BME680-Read: SLINK: sent bme680Msg!
       ++++

    Anmerkung: die Offset-Korrekturen der Temperaturen spiegelt sich nur im FHEM-SLINK-Device wieder!
    Nicht in der ESPEasy-Anzeige des Devices.   

    Jewe

    Hallo Jürgen,
    habe Deine Version (ESP_Easy_mega_20210320_normal_ESP8266_4M1M.bin) nun seit ein paar Tagen am laufen. Das Ganze habe ich noch auf einem breadboard aufgebaut.
    Als komponenten habe ich:
    https://www.aliexpress.com/item/32832024575.html?spm=a2g0s.9042311.0.0.4d264c4dxbK44c
    https://www.amazon.de/gp/product/B07Y26XB68/ref=ppx_yo_dt_b_asin_title_o02_s00?ie=UTF8&psc=1

    Es funktioniert eine weile ganz gut und dann kommen keine Werte mehr von dem BE680. Wenn ich einen Scan nach I2C devices starte wird dieser nicht mehr gefunden, ebenso nach einem reboot.
    Wenn ich das ganze spannungslos mache und einen Moment warte geht es wieder.

    Hast Du eine Idee dazu?

    Grüsse, Jens

    juergs

    Hallo Jens,
    als Standard-Antwort würde ich sagen: Netzteil tauschen, weil evtl. zu schwach?
    ESP_Easy_mega_20210508_normal_ESP8266_4M1M.bin versuchen?
    Kannst Du was im ESPEasy-Log sehen, wenn Du den Loglevel hochsetzt?

    Prüfe mal auch die Pullup- I2C-Widerstände. Es sollten 1K5 Typen sein.
    https://www.homotix.it/articoli/introduzione-all-uso-del-sensore-bme680
    Schematic_BME680-Breakout.jpg
    https://forum.arduino.cc/t/bericht-i2c-pullup/441924

    Anmerkung: Wahnsinn, wie die Preise nach oben geschossen sind!

    Grüße,
    Jürgen

    Papa Romeo

    Zitat von: Jewe am 13 Mai 2021, 16:00:32
    Es funktioniert eine weile ganz gut und dann kommen keine Werte mehr von dem BE680. Wenn ich einen Scan nach I2C devices starte wird dieser nicht mehr gefunden, ebenso nach einem reboot.
    Wenn ich das ganze spannungslos mache und einen Moment warte geht es wieder.

    ... scheint an den BME680ern selber zu liegen. Ich hab meinen an einem Kannix dran und auch immer wieder mal nach längeren Laufzeiten die selben Probleme.
    Irgendann nix mehr oder nur teilweise Daten ... nach Reboot immer noch nicht besser ... Spannung weg ... Spannung dran ... geht wieder.

    LG
    Papa Romeo
    ...die richtige Lötspitzentemperatur prüft man zwischen Daumen und Zeigefinger.
    ...überlasse niemals etwas einer Software, das du hardwaremässig erreichen kannst.
    ...unvorsichtige Elektriker werden schnell zu leitenden Angestellten.
    und...never change a running System...no Updates if not necessary

    juergs

    Zitat von: Papa Romeo am 13 Mai 2021, 19:59:49
    ... scheint an den BME680ern selber zu liegen. Ich hab meinen an einem Kannix dran und auch immer wieder mal nach längeren Laufzeiten die selben Probleme.
    Irgendann nix mehr oder nur teilweise Daten ... nach Reboot immer noch nicht besser ... Spannung weg ... Spannung dran ... geht wieder.

    LG
    Papa Romeo

    Bei mir habe ich das Phänomen gar nicht. Auch nicht mit den selbst SMD-Gelöteten Platinen.
    Ich glaube, bei mir läuft ein Sensor seit mindestens 3+ Jahren durch.

    Am Besten, sich mal die I2C-Signale + Vcc mal am Oszi anschauen. Vielleicht wäre ein 100nF beim BME680-Modul und ein 4,7 µF  Stützkondensator hilfreich.
    Ich vermute die 10K PullUp-R sind zu wenig, je nach Leitungslänge (theoretisch, Glaskugel wenn man den Aufbau nicht kennt ;) )?
    Evtl. mal mit einem 2. Modul gegenchecken?
    Schwierig, per Ferndiagnose ...  vielleich mal das "normale" ESPEasy mit dem P106 oder P119 Modul flashen und schauen ob das Verhalten ebenso stattfindet?
    https://github.com/letscontrolit/ESPEasyPluginPlayground/blob/master/_P119_BME680.ino diese Version nehmen.
    Dass es an der FW liegt, glaube ich weniger. Also wirklich mal Varianten ausprobieren. Wenn es immer noch auftauchen sollte, ist es die Platine.

    Für Fortgeschrittene:https://github.com/juergs/ESP32_LogicAnalyzer


    Papa Romeo

    ...ich schrieb absichtlich BME680ern.  Alles schon gemacht ... anderer Sensor...statt Kannix nen WEMOS oder nen ESP01 oder nen Nano oder....oder ...oder
    ...auch Pullups von 1 bis 10 kOhm ... irgendwann steigen sie aus.

    Daher kann ich nur die BME selber vermuten ... denke sind auch alle aus einer Serie ... und die BME/BMP 280 laufen ohne Probleme

    Ist aber nicht so wichtig, da ich die Dinger nicht fest verbaue und nur immer zum Testen der Datenübertragung und Sensorerkennung nutze.

    LG
    Papa Romeo
    ...die richtige Lötspitzentemperatur prüft man zwischen Daumen und Zeigefinger.
    ...überlasse niemals etwas einer Software, das du hardwaremässig erreichen kannst.
    ...unvorsichtige Elektriker werden schnell zu leitenden Angestellten.
    und...never change a running System...no Updates if not necessary

    juergs

    Hallo PapaRomeo,
    woher ist Deine Quelle?

    Ali, Rei***t oder fertige Module?

    Papa Romeo

    ... kann ich dir nicht mehr sagen ... hab die Dinger schon ne ganze Weile ...

    LG
    Papa Romeo
    ...die richtige Lötspitzentemperatur prüft man zwischen Daumen und Zeigefinger.
    ...überlasse niemals etwas einer Software, das du hardwaremässig erreichen kannst.
    ...unvorsichtige Elektriker werden schnell zu leitenden Angestellten.
    und...never change a running System...no Updates if not necessary

    juergs

    Ah, interessanterweise auch die CJMCU-680-Module!
    Die habe ich nicht in Benutzung.... vielleicht die Levelshifter (umgehen) ?

    Evtl. die I2C-Bustaktrate heruntersetzen, von 100KHz auf 40KHz?

    Wie bei ESPEasy, dem BH1750-Modul?


    Grüße,
    Jürgen


    Jewe

    Habe das Netzteil mal getauscht von 1A auf 1,5A denke aber doch das auch das 1A reichen sollte. Des weiteren habe ich den Sensor an 5V angeschlossen, zuvor war an an 3,3V angeschlossen. Werde das nun wieder eine Weile beobachten und hoffe auch dass es nicht ein grundsätzliches Problem des Sensors ist wie Papa Romeo geschrieben hat...

    Die Pullups sind 10KOhm. Der Auftau ist noch auf einem Breadboard :-)

    Danke für die Unterstützung, Jens

    Jewe

    Zitat von: juergs am 13 Mai 2021, 21:53:34
    Evtl. die I2C-Bustaktrate heruntersetzen, von 100KHz auf 40KHz?

    Oh, die Busrate steht bei mir auf 400KHz. Das ist vielleicht dann auch zu viel des guten :-)

    juergs

    @Jewe:

    Achtung: der Sensor ist 3V3-only  deshalb würde ich nicht die 5V Versorgung des ESPs nehmen.
    Das wirkt negativ auf die ggf. 5V intoleranten ESP-Pins .... :o

    Also VCC des Sensors auf die 3V3 setzen!

    Jürgen

    Jewe

    Ja, habe mir eben den Schaltplan des Boards nochmal angeschaut und auch gesehen dass es keinen unterschied bzgl. der Pullups macht dieses mit 5V zu betreiben.

    juergs

    Zitatkeinen unterschied bzgl. der Pullups macht dieses mit 5V zu betreiben.
    Doch!
    Die 5V gelangen über die Pullup-Widerstände  an die ESP-Pins.
    Das kann trotz vermeidlicher 5V-Toleranz möglicherweise doch "Langzeit"-Probleme verursachen ...

    Jewe

    Der Sensor steigt immer noch aus. Der Sensor wird mit der Adresse 0x76 (118) erkannt, den Pin SDO habe ich dazu auf Masse gelegt.
    Wenn ich das nicht mache, Bootet der ESP nicht mehr. Was ist denn hier besser, den SDO auf Masse legen oder nicht?
    Nehme nun mal die I2C-Bustaktrate auf 40KHz und beobachte das mal wieder.

    Jens

    Papa Romeo

    Zitat von: Jewe am 14 Mai 2021, 10:57:28
    Der Sensor steigt immer noch aus. Der Sensor wird mit der Adresse 0x76 (118) erkannt, den Pin SDO habe ich dazu auf Masse gelegt.
    Wenn ich das nicht mache, Bootet der ESP nicht mehr. Was ist denn hier besser, den SDO auf Masse legen oder nicht?

    ...wenn du SD0 auf HIGH legst oder offen lässt, stellst du die I2C-Adresse auf 0x77 ein.
    Musst dann in deinem Programm eventuell ändern, sonst hast du u.a. den Effekt das dein ESP nicht mehr bootet.

    LG
    Papa Romeo
    ...die richtige Lötspitzentemperatur prüft man zwischen Daumen und Zeigefinger.
    ...überlasse niemals etwas einer Software, das du hardwaremässig erreichen kannst.
    ...unvorsichtige Elektriker werden schnell zu leitenden Angestellten.
    und...never change a running System...no Updates if not necessary

    juergs

    ZitatSDO habe ich dazu auf Masse gelegt.
    .. und soll so bleiben  ;)

    ZitatEffekt das dein ESP nicht mehr bootet.
    Die BME680-Lib wird vor dem Aufruf der PlugIn-Seite initialisert.
    Wenn Sensor-Adresse konfiguriert, aber andere Adresse -> Fatal-Exception/Reboot.
    Dann kannst Du nur noch in der Seriellen Schnittstelle "reset" eingeben -> ESPEasy-Factory-Reset.
    Man muss "nur" alles neu konfigurieren  :-X

    ZitatDer Sensor steigt immer noch aus.


    • Nach welcher Änderung?
    • Wenn er mit 3V3V versorgt wird?
    • Anderes Netzteil?
    • Hast Du den ESP8266 schon mal getauscht?

    Setz mal den Loglevel im Tools\Advanced-Menü auf einen höheren Wert (siehe Screenshot).
    und lass das ESPEasy-Log dann solange stehen, bis es wieder auftritt und poste den Inhalt.

    Jürgen

    juergs

    Ich habe mal ein Watterot/Adafruit-Modul genommen und die js_BME680-Lib auf den ESP32 portiert.
    Es hat ähnliche HW-Vorraussetzungen wie das Board von Jewe. (Aber mit 4K7 Widertänden, statt 10k)

    Schaltplan mit Levelshifter
    Standard sind 100KHz I2C-Bustakt für den ESP32.
    Die Flanken sehen eigentlich gut aus  ;)

    https://github.com/xioTechnologies/Serial-Oscilloscope

    Jewe

    Zitat von: juergs am 14 Mai 2021, 12:50:25


    • Nach welcher Änderung?
    • Wenn er mit 3V3V versorgt wird?
    • Anderes Netzteil?
    • Hast Du den ESP8266 schon mal getauscht?

    Sensor ist mit 3,3V versorgt, SDO ist auf Masse.

    Ich habe inzwischen folgendes probiert: Anderes Netzteil, anderer ESP,
    geflasht mit ESP_Easy_mega_20210321_normal_ESP8266_4M1M.bin und ESP_Easy_mega_20210321_normal_ESP8266_4M1M_r2.bin
    Das Ergebnis ist leider immer das selbe.
    Im Oberen Teil des Bildes ist der ESP mit BME680 und drunter ein CO2 (Rehau Stick).

    Wollte heute " vielleich mal das "normale" ESPEasy mit dem P106 oder P119 Modul " Flashen, scheitere aber im moment dran, dass immer irgendwas dazu fehlt. Muss ich die Tage nochmals probieren.

    Sollte ich den Levelshifter auslöten, dann wäre das Thema mit den Pullups erledigt? Andererseits wird das Modul doch sicherlich bei anderen auch so verwendet und es funktioniert.

    Grüssle, Jens