BME680 Zamiast BME280

Witam, miałem nie osłonięty BME280 na dworze, po roku przestał raportować (złapał pewnie wilgoci) Wymieniłem go na BME680 zmieniłem Yamla w esphome na:

i2c:
  sda: 21
  scl: 22
  scan: True
  id: bus_a

dallas:
   pin: 23
   update_interval: 30s

sensor:
  - platform: bme680
    address: 0x76
    temperature:
      name: "BME680Temperature"
      oversampling: 16x
    pressure:
      name: "BME680Pressure"
    humidity:
      name: "BME680Humidity"
    gas_resistance:
      name: "BME680GasResistance"
    update_interval: 30s

I niestety nie mam pomiarów z niego, pytanie czy muszą być również rezystory podciągające jak w BME280 ?
Czy po prostu trafił mi się uszkodzony BME680 ?

Inny moduł, być może inny adres - nie 0x76 a 0x77?

Nie ma niestety znaczenia czy dam adres 0x77 czy 0x76
otrzymuję komunikat [09:25:09][E][bme680.sensor:218]: Communication with BME680 failed!

Generalnie rezystory powinny być, sprawdź czy kupiony moduł ma je wlutowane.
Może stary przestał raportować z powodu uszkodzenia ESP - brałeś to pod uwagę?
Podaj pełną konfigurację, schemat podłączenia i typy modułów.

Wrócę do domu to sprawdzę rezystory, w razie czego ma jeszcze kilka 4,7 kOhma
Pod to ESP mam podłączone jeszcze ds18b20 i działają ok
Poniżej cały Yaml

esphome:
  name: "esp32-kotlownia"
  platform: ESP32
  board: esp32dev

# Enable logging
logger:

# Enable Home Assistant API
api:

ota:
  password: "xxxxxxxxx"

wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password
# Optional manual IP
#  manual_ip:
#    static_ip: 192.168.1.31
#    gateway: 192.168.1.1
#    subnet: 255.255.255.0  

  # Enable fallback hotspot (captive portal) in case wifi connection fails
  ap:
    ssid: "Esp32-Kotlownia Fallback Hotspot"
    password: "xxxxxx"

captive_portal:

web_server:
  port: 80


external_components:
  - source: github://myhomeiot/esphome-components
  - source: github://pr#2854
    components: [esp32_ble_tracker]
    
esp32_ble_tracker:        
ble_gateway:
  devices:
    - mac_address: D0:F0:18:78:0D:06 # 
  on_ble_advertise:
    then:
      homeassistant.event:
        event: esphome.on_ble_advertise
        data:
          packet: !lambda return packet;

binary_sensor:
  - platform: homeassistant
    id: ble_gateway_discovery
    entity_id: binary_sensor.ble_gateway 
#esp32_ble_tracker:



#sensor:
  

i2c:
  sda: 22
  scl: 21
  scan: True
  id: bus_a


dallas:
   pin: 23
   update_interval: 30s

sensor:
  - platform: bme680
    temperature:
      name: "BME680 Temperature"
      oversampling: 16x
    pressure:
      name: "BME680 Pressure"
    humidity:
      name: "BME680 Humidity"
    gas_resistance:
      name: "BME680 Gas Resistance"
    address: 0x76
    update_interval: 60s
   
  - platform: dallas
    address: 0x4701215cb45b5928
    name: "ZasobnikCWU"   
  - platform: dallas
    address: 0x2101215ce16a8f28
    name: "ZasobnikCO"  
  - platform: dallas
    address: 0xc001215cec683428
    name: "WyjsciezPC"
  - platform: dallas
    address: 0x9d01215ce1da5e28
    name: "PowrotdoPC"
  - platform: dallas
    address: 0x040000000bae6428
    name: "Temperaturawejsciowapodlogowka"   
  - platform: dallas
    address: 0xa60000000b405528
    name: "Teperaturapowrotupodlogowka"  
  - platform: dallas
    address: 0xf20000000dbc6428
    name: "Powrót grzejnikii"

  - platform: xiaomi_hhccjcy01
    mac_address: 'C4:7C:8D:6C:4D:B3'
    temperature:
      name: "Xiaomi HHCCJCY01 Temperature"
    moisture:
      name: "Xiaomi HHCCJCY01 Moisture"
    illuminance:
      name: "Xiaomi HHCCJCY01 Illuminance"
    conductivity:
      name: "Xiaomi HHCCJCY01 Soil Conductivity"
    battery_level:
      name: "Xiaomi HHCCJCY01 Battery Level"
      
  - platform: xiaomi_lywsd03mmc
    mac_address: "A4:C1:38:E9:EC:3F"
    bindkey: "d926f92b98fae14823b9013b5ee1076a"
    temperature:
      name: "Kotłownia Temperatura"
    humidity:
      name: "Kotłownia Wilgotność"
    battery_level:
      name: "Kotłownia Bateria"    
      
  - platform: xiaomi_lywsd03mmc
    mac_address: "A4:C1:38:13:FE:8B"
    bindkey: "07faddec64085e8a3019f17d2a1f7eb4"
    temperature:
      name: "Podłoga Temperatura"
    humidity:
      name: "Podłoga Wilgotność"
    battery_level:
      name: "Podłoga bateria"    
      
  - platform: xiaomi_lywsd03mmc
    mac_address: "A4:C1:38:AA:7F:19"
    bindkey: "06c0afe6fd98ba341bcefe79bc77271c"
    temperature:
      name: "Dolna szklarnia Temperatura"
    humidity:
      name: "Dolna szklarnia Wilgotność"
    battery_level:
      name: "Dolna szklarnia bateria"       
      
  - platform: xiaomi_lywsd03mmc
    mac_address: "A4:C1:38:90:6F:76"
    bindkey: "83e29c96ec0aa9c55fd18adba80d9ac2"
    temperature:
      name: "Górna szklarnia temperatura"
    humidity:
      name: "Górna szklarnia wilgotność"
    battery_level:
      name: "Górna szklarnia bateria"    
      
#switch:
#  - platform: gpio
#    pin: GPIO23
#    name: "Wyciąg dolny"
#    id: relay1
#    interlock: [relay1]
#switch:
#  - platform: gpio
#    pin: GPIO25
#    inverted: true
#    name: "Wyciag"
#    id: switch1
#  - platform: gpio
#    pin: GPIO27
#    inverted: true
#    name: "Nadmuch"
#    id: switch2
#  - platform: gpio
#    pin: GPIO14
#    inverted: true
#    name: "Cyrkulacja"
#    id: switch3
#  - platform: gpio
#    pin: GPIO26
#    inverted: true
#    name: "Podlewanie"
#    id: switch4
#    id: relay5
#    interlock: [relay5]
#  - platform: gpio
#    pin: GPIO33
#    name: "Podlewanie góra"
#    id: relay6
#    interlock: [relay6]
#  - platform: gpio
#    pin: GPIO25
#    name: "Test 1"
#    id: relay7
#    interlock: [relay7]   
#  - platform: gpio
#    pin: GPIO26
#    name: "Test 2"
#    id: relay8
#    interlock: [relay8]     
    

To tak w kwestii uszkodzenia - nie musi się zjarać cały MCU, bywają przypadki uszkodzenia pojedynczych GPIO.

ALE…

Ja tu widzę błąd w konfiguracji - zdefiniowałeś I2C tak jakbyś dysponował więcej niż jedną szyną

więc ja nigdzie nie widzę takiej konstrukcji wskazującej, że integracja BME680 ma szukać sprzętu na szynie A (zastanawiam się jakim cudem to działało z BME280, masz gdzieś zachowanego starego YAMLa sprzed przeróbki?)

sensor:
  - platform: bme680
    i2c_id: bus_a
    address: 0x76
    temperature:
[…]

Pomijając ten fakt, nie musisz zgadywać adresu czujnika - zdefiniowałeś skanowanie szyny, więc w logu powinieneś mieć wylistowane wszystkie znalezione urządzenia (ich adresy).

A tak w ogóle zaglądałeś do dokumentacji?

typowa płytka BME680 ma od groma pinów (konkretniej 4 oprócz zasilania i masy), a to ze względu na fakt, że ma do wyboru 2 różne interfejsy I2C albo SPI. Nie mam jej w ręce by prześledzić jak jest fabrycznie skonfigurowana.

ESPHome wspiera tylko konfigurację I2C, więc te piny trzeba połączyć zgodnie z dokumentacją by przełączyć sensor z SPI do I2C i zdefiniować adres (rozdział 6 w linku powyżej).

Dodatkowo czy zasilana jest z 5V czy 3.3V, większość dla I2C dopuszcza oba… itd.
Trzeba znać model modułu… i jak to podłączył - raczej będzie to błąd podłączenia.

Ten moduł zasilany jest 3.3V
Wywaliłem z yamla

  scan: True
  id: bus_a

Teraz na adresie 0x76 mam komunikat że nie znajduję nic na szynie I2C natomiast na adresie 0x77 mam błąd komunikacji.

scan zostaw i napisz co znalazł.
Poszukaj i daj linka dla Twojego BMP

Czy możesz po prostu wklejać te logi (chociaż istotne fragmenty chronologicznie) a nie podawać ich swoją interpretację…

Mam od ręką RPi Pico W, ale nie mam teraz czasu i warunków na lutowanie, żeby podłączyć cokolwiek I2C, tu masz przykład logu ze zdefiniowanych 2 szyn bez podpiętych urządzeń, to log oczywiście ze skanowania, jakbym miał jakiś komponent wykorzystujący czujnik, którego nie ma to by były też błędy z jego integracji gdzieś dalej

[13:32:51][C][i2c.arduino:053]: I2C Bus:
[13:32:51][C][i2c.arduino:054]:   SDA Pin: GPIO4
[13:32:51][C][i2c.arduino:055]:   SCL Pin: GPIO5
[13:32:51][C][i2c.arduino:056]:   Frequency: 50000 Hz
[13:32:51][C][i2c.arduino:065]:   Recovery: failed, SDA is held low on the bus
[13:32:51][I][i2c.arduino:069]: Results from i2c bus scan:
[13:32:51][I][i2c.arduino:071]: Found no i2c devices!
[13:32:51][C][i2c.arduino:053]: I2C Bus:
[13:32:51][C][i2c.arduino:054]:   SDA Pin: GPIO26
[13:32:51][C][i2c.arduino:055]:   SCL Pin: GPIO27
[13:32:51][C][i2c.arduino:056]:   Frequency: 50000 Hz
[13:32:51][C][i2c.arduino:065]:   Recovery: failed, SDA is held low on the bus
[13:32:51][I][i2c.arduino:069]: Results from i2c bus scan:
[13:32:51][I][i2c.arduino:071]: Found no i2c devices!

No spoko, a podłączyłeś gdzieś wszystkie 4 piny (oprócz zasilania i masy).
Być może konkretna płytka/moduł z tym sensorem ma jakieś pull-down’y i/lub pull-up’y (tzn. ma je raczej na 100% tylko pozostaje pytanie jak skonfigurowane).

A jak jest skonstruowany ten moduł - to jest model dedykowany do zasilania 3,3V (bez stabilizatora LDO) czy 5V (ze stabilizatorem w torze zasilania)?

[13:29:23][I][i2c.arduino:069]: Results from i2c bus scan:
[13:29:23][I][i2c.arduino:075]: Found i2c device at address 0x76

[13:29:24][C][bme680.sensor:215]: BME680:
[13:29:24][C][bme680.sensor:216]:   Address: 0x76
[13:29:24][E][bme680.sensor:218]: Communication with BME680 failed!
[13:29:24][C][bme680.sensor:220]:   IIR Filter: OFF
[13:29:24][C][bme680.sensor:221]:   Update Interval: 30.0s
[13:29:24][C][bme680.sensor:223]:   Temperature 'BME680Temperature'
[13:29:24][C][bme680.sensor:223]:     Device Class: 'temperature'
[13:29:24][C][bme680.sensor:223]:     State Class: 'measurement'
[13:29:24][C][bme680.sensor:223]:     Unit of Measurement: '°C'
[13:29:24][C][bme680.sensor:223]:     Accuracy Decimals: 1
[13:29:24][C][bme680.sensor:224]:     Oversampling: 16x
[13:29:24][C][bme680.sensor:225]:   Pressure 'BME680Pressure'
[13:29:24][C][bme680.sensor:225]:     Device Class: 'pressure'
[13:29:24][C][bme680.sensor:225]:     State Class: 'measurement'
[13:29:24][C][bme680.sensor:225]:     Unit of Measurement: 'hPa'
[13:29:24][C][bme680.sensor:225]:     Accuracy Decimals: 1
[13:29:24][C][bme680.sensor:226]:     Oversampling: 16x
[13:29:24][C][bme680.sensor:227]:   Humidity 'BME680Humidity'
[13:29:24][C][bme680.sensor:227]:     Device Class: 'humidity'
[13:29:24][C][bme680.sensor:227]:     State Class: 'measurement'
[13:29:24][C][bme680.sensor:227]:     Unit of Measurement: '%'
[13:29:24][C][bme680.sensor:227]:     Accuracy Decimals: 1
[13:29:24][C][bme680.sensor:228]:     Oversampling: 16x
[13:29:24][C][bme680.sensor:229]:   Gas Resistance 'BME680GasResistance'
[13:29:24][C][bme680.sensor:229]:     State Class: 'measurement'
[13:29:24][C][bme680.sensor:229]:     Unit of Measurement: 'Ω'
[13:29:24][C][bme680.sensor:229]:     Accuracy Decimals: 1
[13:29:24][C][bme680.sensor:229]:     Icon: 'mdi:gas-cylinder'
[13:29:24][C][bme680.sensor:233]:   Heater temperature=320°C duration=150ms

BME zakupiłem dokładnie z tąd https://allegro.pl/oferta/modul-z-wielofunkcyjnym-czujnikiem-bme680-13097979167
W aukcji jest informacja że jest zasilany od 1,7V do 3,6V
Niestety nie znam się aż tak bardzo na konstrukcji tych układów, aby odpowiedzieć na Twoje pytanie @szopen

Ale masz sprzęt w ręce, a ja nie, więc możesz przeanalizować jego konstrukcję…
Moim zdaniem na SDO i CS (w dokumentacji Boscha opisany jako CSB) masz pullupy - ale opieram się tylko na oglądaniu zdjęcia, na którym w sumie niewiele widać…

1 i 2 to rezystory 10k
oprócz tego, że po swojej lewej prowadzą do wyprowadzeń modułu, to są one moim zdaniem bezpośrednio wpięte do wejść MCU sensora - świadczą o tym przelotki (via) 3 i 4 (de facto nie wiem dokąd prowadzą, ale logika nakazuje ich podpięcie do pinów SDO i CSB sensora)
po ich prawej widać wspólną ścieżkę prowadzącą do przelotki 5
zgaduję, że prowadzi ona do VDD, czyli do wyjścia regulatora LDO 6

ALE

Tak naprawdę nie wiem czy 6 to regulator napięcia ani jaki to model, ale sugerując się tym podpiąłbym płytkę do 5V+, zanim to zrobisz to może napisz jakie faktycznie są tam elementy, również 8, bo że 7 to drabinka rezystorowa 10k to widać…


Edit…
kurza noga (cała analiza ze zdjęcia psu w d…) - wystarczyło pogooglować schematy płytek i mam to:

Jak widać ten moduł jest zaprojektowany do zasilania 5V i komunikacji na tym poziomie.

Być może będzie się zachowywał normalnie przy zasilaniu 3.3V ale nie wiem tego…
Natomiast w ofercie sklepu Kamami ktoś na lenia przekleił parametry samego sensora BME680 prosto z jego specyfikacji (czytałeś ten plik z dokumentacją który linkowałęm wyżej?).

Moduł w ręku będę miał około 15:30 dopiero, czyli wg Twojej analizy @szopen ten moduł trzeba zasilić 5V i powinno śmigać.

Według tego schematu na oshwlab to jest moduł dedykowany do MCU Arduino i innych pracujących z zasilaniem i logiką 5V, jak się zachowa po podpięciu do ESP
nie mam bladego pojęcia…
Tzn. nie powinieneś go zasilać z 5V łącząc z ESP z powodu konwertera poziomów zasilanego tym samym napięciem co stabilizator… więc ja bym sugerował użycie… drugiego konwertera poziomów przy ESP :open_mouth:

Powinno … może 5V nie uszkodzi GPIO. Większość podłączeń w necie tym się nie przejmuje :slight_smile:

No właśnie czegoś nie rozumiem do końca
image
tu jest 3.3V a ten moduł niby na 5V ma pracować.

Zasadniczo magistrala I2C jest zasilana z pullupów, więc zależy gdzie są podpięte.
ale nie wiem czy ten konwerter poziomów będzie działał gdy damy pullupy do 3.3V

Zwizualizuj sobie co gdzie jest podpięte…
przecież na tym fragmenciku masz piny BME680
on MUSI mieć zasilanie 3.3V bo przy 5V to dym wypuszcza, więc jest przystosowany do logiki 3.3V

napięcie 3.3V na całej tej płytce bierze się stąd (w szczególności jeśli zasilasz ją z 5V, bo przy niższym napięciu to raczej nie masz tam 3.3V tylko powiedzmy jakieś 2.7V)

W tej chwili zasilanie mam podpięte z modułu ESP32 do BME680 bezpośrednio

… a ja zwarcie na stabilizatorze VCC <> 3.3V (in<>out) i zasilenie z 3.3V
@szopen literka “P” na klawiaturze Ci szwankuje.

Wiem dlatego piszę tak powoli

No i właśnie pytanie jak się zachowa ten konwerter poziomów na bazie 2 tranzystorów polowych.