esphome / issues

Issue Tracker for ESPHome
https://esphome.io/
290 stars 35 forks source link

BME280 errors when WiFi is unavailable #3530

Closed acronce closed 1 year ago

acronce commented 2 years ago

The problem

I'm preparing an ESP32 based sensor as a gift. To that end I've configured it with that person's WiFi credentials. But when I boot the device after changing the credentials the BME280 sensor doesn't initialize (i.e. has_state() reads as false).

If I go into the device via captive portal and configure it for my network, the BME280 sensor starts working. It's as if lack of available WiFi or the presence of the device's AP is interfering with the I2C bus.

The other sensors (pmsa003 and senseair) work fine when WiFi is unavailable.

I've tried a few things, like increasing the frequency and changing the setup_priority of the I2C bus, but have not been able to work around this issue.

I realize that it's unusual to have an ESP device that's not connected to WiFi, but in this case the unit has its own display and can function without a network. It would be nice if the temperature sensor works when WiFi is unavailable.

Which version of ESPHome has the issue?

Version: 2022.5.1

What type of installation are you using?

pip

Which version of Home Assistant has the issue?

N/A

What platform are you using?

ESP32

Board

LILYGO® TTGO T-Display 1.14 Inch LCD ESP32 (16MB CH9102F Chip)

Component causing the issue

i2c or WiFi

Example YAML snippet

esphome:
  name: $instance_name
  platform: ESP32
  board: featheresp32

# Enable logging
logger:
#  level: VERBOSE

# Enable Home Assistant API
# Disabled for the esphome version because this causes periodic watchdog reboots
#api:

# Over the air update credentials
ota:
  password: "$instance_ota_password"

# WiFi credentials
wifi:
  ssid: $instance_wifi_ssid
  password: $instance_wifi_password

  # Enable fallback hotspot (captive portal) in case wifi connection fails
  ap:
    ssid: "$instance_ssid"
    password: "$instance_wifi_ap_password"

captive_portal:

# WiFi information displayed
text_sensor:
  - platform: wifi_info
    ip_address:
      internal: true
      id: wifi_ip_addr
    ssid:
      internal: true
      id: wifi_ssid

# For temp + humidity sensor
i2c:
  sda: 21
  scl: 22
  scan: True
  id: bus_a

sensor:
  - platform: wifi_signal
    name: $instance_friendly_name RSSI
    update_interval: 60s

  - platform: bme280
    address: 0x76
    update_interval: 60s
    temperature:
      id: temp
      name: "${instance_friendly_name} Temperature"
      accuracy_decimals: 2
      filters:
        - offset: $instance_bme280_temperature_offset
    pressure:
      id: pressure
      name: "${instance_friendly_name} Pressure"
    humidity:
      id: humidity
      name: "${instance_friendly_name} Humidity"

Anything in the logs that might be useful for us?

I don't know how to get the logs when the device is in captive portal mode, and the problem goes away when the device connects to WiFi. I cannot connect via USB due to the port being blocked in my installation.

Additional information

No response

pxe-la commented 1 year ago

Have same issue. I checked uart logs:

[02:11:40][V][bme280.sensor:203]: Sending conversion request...
[02:11:40][C][bme280.sensor:086]: Setting up BME280...

That message repeats twice per second until wifi is connected

UPD. Removed from config everything except i2c, bme280 and logged in VERY_VERBOSE mode. Logs:

INFO Starting log output from COM6 with baud rate 115200
[03:53:09][I][logger:243]: Log initialized
[03:53:09][I][app:029]: Running through setup()...
[03:53:09][V][app:030]: Sorting components by setup priority...
[03:53:09][I][i2c.arduino:161]: Performing I2C bus recovery
[03:53:09][V][esp32-hal-i2c.c:1492] i2cInit(): num=0 sda=21 scl=22 freq=0
[03:53:09][V][esp32-hal-i2c.c:1688] i2cSetFrequency(): freq=100000Hz
[03:53:09][V][esp32-hal-i2c.c:1704] i2cSetFrequency(): cpu Freq=240Mhz, i2c Freq=100000Hz
[03:53:09][V][esp32-hal-i2c.c:1712] i2cSetFrequency(): Fifo delta=1
[03:53:09][V][esp32-hal-i2c.c:1688] i2cSetFrequency(): freq=50000Hz
[03:53:09][V][esp32-hal-i2c.c:1704] i2cSetFrequency(): cpu Freq=240Mhz, i2c Freq=50000Hz
[03:53:09][V][esp32-hal-i2c.c:1712] i2cSetFrequency(): Fifo delta=1
[03:53:09][VV][scheduler:057]: set_interval(name='', interval=60000, offset=12790)
[03:53:09][C][bme280.sensor:086]: Setting up BME280...
[03:53:09][VV][i2c.arduino:126]: 0x76 TX D0
[03:53:09][VV][i2c.arduino:102]: 0x76 RX 60
[03:53:09][VV][i2c.arduino:126]: 0x76 TX E0B6
[03:53:09][VV][i2c.arduino:126]: 0x76 TX F3
[03:53:09][VV][i2c.arduino:102]: 0x76 RX 00
[03:53:09][VV][i2c.arduino:126]: 0x76 TX 88
[03:53:09][VV][i2c.arduino:102]: 0x76 RX 566C
[03:53:09][VV][i2c.arduino:126]: 0x76 TX 8A
[03:53:09][VV][i2c.arduino:102]: 0x76 RX 0E68
[03:53:09][VV][i2c.arduino:126]: 0x76 TX 8C
[03:53:09][VV][i2c.arduino:102]: 0x76 RX 3200
[03:53:10][VV][i2c.arduino:126]: 0x76 TX 8E
[03:53:10][VV][i2c.arduino:102]: 0x76 RX 4F92
[03:53:10][VV][i2c.arduino:126]: 0x76 TX 90
[03:53:10][VV][i2c.arduino:102]: 0x76 RX DAD6
[03:53:10][VV][i2c.arduino:126]: 0x76 TX 92
[03:53:10][VV][i2c.arduino:102]: 0x76 RX D00B
[03:53:10][VV][i2c.arduino:126]: 0x76 TX 94
[03:53:10][VV][i2c.arduino:102]: 0x76 RX 511E
[03:53:10][VV][i2c.arduino:126]: 0x76 TX 96
[03:53:10][VV][i2c.arduino:102]: 0x76 RX 6CFF
[03:53:10][VV][i2c.arduino:126]: 0x76 TX 98
[03:53:10][VV][i2c.arduino:102]: 0x76 RX F9FF
[03:53:10][VV][i2c.arduino:126]: 0x76 TX 9A
[03:53:10][VV][i2c.arduino:102]: 0x76 RX AC26
[03:53:10][VV][i2c.arduino:126]: 0x76 TX 9C
[03:53:10][VV][i2c.arduino:102]: 0x76 RX 0AD8
[03:53:10][VV][i2c.arduino:126]: 0x76 TX 9E
[03:53:10][VV][i2c.arduino:102]: 0x76 RX BD10
[03:53:10][VV][i2c.arduino:126]: 0x76 TX A1
[03:53:10][VV][i2c.arduino:102]: 0x76 RX 4B
[03:53:10][VV][i2c.arduino:126]: 0x76 TX E1
[03:53:10][VV][i2c.arduino:102]: 0x76 RX 7901
[03:53:10][VV][i2c.arduino:126]: 0x76 TX E3
[03:53:10][VV][i2c.arduino:102]: 0x76 RX 00
[03:53:10][VV][i2c.arduino:126]: 0x76 TX E4
[03:53:10][VV][i2c.arduino:102]: 0x76 RX 11
[03:53:10][VV][i2c.arduino:126]: 0x76 TX E5
[03:53:10][VV][i2c.arduino:102]: 0x76 RX 2C
[03:53:10][VV][i2c.arduino:126]: 0x76 TX E6
[03:53:10][VV][i2c.arduino:102]: 0x76 RX 03
[03:53:10][VV][i2c.arduino:126]: 0x76 TX E5
[03:53:10][VV][i2c.arduino:102]: 0x76 RX 2C
[03:53:10][VV][i2c.arduino:126]: 0x76 TX E7
[03:53:10][VV][i2c.arduino:102]: 0x76 RX 1E
[03:53:10][VV][i2c.arduino:126]: 0x76 TX F2
[03:53:10][VV][i2c.arduino:102]: 0x76 RX 00
[03:53:10][VV][i2c.arduino:126]: 0x76 TX F205
[03:53:10][VV][i2c.arduino:126]: 0x76 TX F5
[03:53:10][VV][i2c.arduino:102]: 0x76 RX 00
[03:53:11][VV][i2c.arduino:126]: 0x76 TX F5A0
[03:53:11][VV][scheduler:057]: set_interval(name='update', interval=60000, offset=19870)
[03:53:11][C][wifi:037]: Setting up WiFi...
[03:53:11][V][esp32.preferences:058]: nvs_get_blob('994981601'): ESP_ERR_NVS_NOT_FOUND - the key might not be set yet
[03:53:11][V][wifi_esp32:039]: Enabling STA.
[03:53:11][VV][esp-idf:000]: I (363) wifi:
[03:53:11][VV][esp-idf:000]: wifi driver task: 3ffb5628, prio:23, stack:3584, core=0
[03:53:11][VV][esp-idf:000]:
[03:53:11]
[03:53:11][VV][esp-idf:000]: I (932) wifi:
[03:53:11][VV][esp-idf:000]: wifi firmware version: dc30037
[03:53:11][VV][esp-idf:000]:
[03:53:11]
[03:53:11][VV][esp-idf:000]: I (934) wifi:
[03:53:11][VV][esp-idf:000]: config NVS flash: enabled
[03:53:11][VV][esp-idf:000]:
[03:53:11]
[03:53:11][VV][esp-idf:000]: I (946) wifi:
[03:53:11][VV][esp-idf:000]: config nano formating: disabled
[03:53:11][VV][esp-idf:000]:
[03:53:11]
[03:53:11][VV][esp-idf:000]: I (958) wifi:
[03:53:11][VV][esp-idf:000]: Init data frame dynamic rx buffer num: 32
[03:53:11][VV][esp-idf:000]:
[03:53:11]
[03:53:11][VV][esp-idf:000]: I (971) wifi:
[03:53:11][VV][esp-idf:000]: Init management frame dynamic rx buffer num: 32
[03:53:11][VV][esp-idf:000]:
[03:53:11]
[03:53:11][VV][esp-idf:000]: I (985) wifi:
[03:53:11][VV][esp-idf:000]: Init management short buffer num: 32
[03:53:11][VV][esp-idf:000]:
[03:53:11]
[03:53:11][VV][esp-idf:000]: I (997) wifi:
[03:53:11][VV][esp-idf:000]: Init dynamic tx buffer num: 32
[03:53:11][VV][esp-idf:000]:
[03:53:11]
[03:53:11][VV][esp-idf:000]: I (1010) wifi:
[03:53:11][VV][esp-idf:000]: Init static rx buffer size: 1600
[03:53:11][VV][esp-idf:000]:
[03:53:11]
[03:53:11][VV][esp-idf:000]: I (1022) wifi:
[03:53:11][VV][esp-idf:000]: Init static rx buffer num: 16
[03:53:11][VV][esp-idf:000]:
[03:53:11]
[03:53:11][VV][esp-idf:000]: I (1034) wifi:
[03:53:11][VV][esp-idf:000]: Init dynamic rx buffer num: 32
[03:53:11][VV][esp-idf:000]:
[03:53:11]
[03:53:12][VV][esp-idf:000]: I (1142) wifi:
[03:53:12][VV][esp-idf:000]: mode : sta (cc:50:e3:96:08:c0)
[03:53:12][VV][esp-idf:000]:
[03:53:12]
[03:53:12][D][WiFiGeneric.cpp:374] _eventCallback(): Event: 0 - WIFI_READY
[03:53:12][D][WiFiGeneric.cpp:374] _eventCallback(): Event: 2 - STA_START
[03:53:12][V][wifi_esp32:460]: Event: WiFi STA start
[03:53:12][V][wifi_esp32:445]: Event: WiFi ready
[03:53:12][VV][esp-idf:000]: I (1174) wifi:
[03:53:12][VV][esp-idf:000]: Set ps type: 1
[03:53:12]
[03:53:12][VV][esp-idf:000]:
[03:53:12]
[03:53:12][I][wifi:255]: WiFi Connecting to 'AlexNET'...
[03:53:12][V][wifi:257]: Connection Params:
[03:53:12][V][wifi:258]:   SSID: 'AlexNET'
[03:53:12][V][wifi:263]:   BSSID: Not Set
[03:53:12][V][wifi:281]:   Password: '12345678'
[03:53:12][V][wifi:288]:   Channel: Not Set
[03:53:12][V][wifi:295]:   Using DHCP IP
[03:53:12][V][wifi:297]:   Hidden: NO
[03:53:12][VV][scheduler:196]: Running interval 'update' with interval=60000 last_execution=4294887762 (now=678)
[03:53:12][V][bme280.sensor:203]: Sending conversion request...
[03:53:12][VV][i2c.arduino:126]: 0x76 TX F4B5
[03:53:12][VV][scheduler:026]: set_timeout(name='data', timeout=114)
[03:53:12][VV][scheduler:196]: Running interval '' with interval=60000 last_execution=4294894622 (now=678)
[03:53:12][C][bme280.sensor:086]: Setting up BME280...
[03:53:12][VV][i2c.arduino:126]: 0x76 TX D0
[03:53:12][VV][i2c.arduino:102]: 0x76 RX 60
[03:53:12][VV][i2c.arduino:126]: 0x76 TX E0B6
[03:53:12][VV][i2c.arduino:126]: 0x76 TX F3
[03:53:12][VV][i2c.arduino:102]: 0x76 RX 00
[03:53:12][VV][i2c.arduino:126]: 0x76 TX 88
[03:53:12][VV][i2c.arduino:102]: 0x76 RX 566C
[03:53:12][VV][i2c.arduino:126]: 0x76 TX 8A
[03:53:12][VV][i2c.arduino:102]: 0x76 RX 0E68
[03:53:12][VV][i2c.arduino:126]: 0x76 TX 8C
[03:53:12][VV][i2c.arduino:102]: 0x76 RX 3200
[03:53:12][VV][i2c.arduino:126]: 0x76 TX 8E
[03:53:12][VV][i2c.arduino:102]: 0x76 RX 4F92
[03:53:12][VV][i2c.arduino:126]: 0x76 TX 90
[03:53:12][VV][i2c.arduino:102]: 0x76 RX DAD6
[03:53:13][VV][i2c.arduino:126]: 0x76 TX 92
[03:53:13][VV][i2c.arduino:102]: 0x76 RX D00B
[03:53:13][VV][i2c.arduino:126]: 0x76 TX 94
[03:53:13][VV][i2c.arduino:102]: 0x76 RX 511E
[03:53:13][VV][i2c.arduino:126]: 0x76 TX 96
[03:53:13][VV][i2c.arduino:102]: 0x76 RX 6CFF
[03:53:13][VV][i2c.arduino:126]: 0x76 TX 98
[03:53:13][VV][i2c.arduino:102]: 0x76 RX F9FF
[03:53:13][VV][i2c.arduino:126]: 0x76 TX 9A
[03:53:13][VV][i2c.arduino:102]: 0x76 RX AC26
[03:53:13][VV][i2c.arduino:126]: 0x76 TX 9C
[03:53:13][VV][i2c.arduino:102]: 0x76 RX 0AD8
[03:53:13][VV][i2c.arduino:126]: 0x76 TX 9E
[03:53:13][VV][i2c.arduino:102]: 0x76 RX BD10
[03:53:13][VV][i2c.arduino:126]: 0x76 TX A1
[03:53:13][VV][i2c.arduino:102]: 0x76 RX 4B
[03:53:13][VV][i2c.arduino:126]: 0x76 TX E1
[03:53:13][VV][i2c.arduino:102]: 0x76 RX 7901
[03:53:13][VV][i2c.arduino:126]: 0x76 TX E3
[03:53:13][VV][i2c.arduino:102]: 0x76 RX 00
[03:53:13][VV][i2c.arduino:126]: 0x76 TX E4
[03:53:13][VV][i2c.arduino:102]: 0x76 RX 11
[03:53:13][VV][i2c.arduino:126]: 0x76 TX E5
[03:53:13][VV][i2c.arduino:102]: 0x76 RX 2C
[03:53:13][VV][i2c.arduino:126]: 0x76 TX E6
[03:53:13][VV][i2c.arduino:102]: 0x76 RX 03
[03:53:13][VV][i2c.arduino:126]: 0x76 TX E5
[03:53:13][VV][i2c.arduino:102]: 0x76 RX 2C
[03:53:13][VV][i2c.arduino:126]: 0x76 TX E7
[03:53:13][VV][i2c.arduino:102]: 0x76 RX 1E
[03:53:13][VV][i2c.arduino:126]: 0x76 TX F2
[03:53:13][VV][i2c.arduino:102]: 0x76 RX 00
[03:53:13][VV][i2c.arduino:126]: 0x76 TX F205
[03:53:13][VV][i2c.arduino:126]: 0x76 TX F5
[03:53:13][VV][i2c.arduino:102]: 0x76 RX 00
[03:53:13][VV][i2c.arduino:126]: 0x76 TX F5A0
[03:53:13][VV][scheduler:057]: set_interval(name='update', interval=60000, offset=11561)
[03:53:13][VV][scheduler:196]: Running interval 'update' with interval=60000 last_execution=4294896657 (now=929)
[03:53:13][V][bme280.sensor:203]: Sending conversion request...
[03:53:13][VV][i2c.arduino:126]: 0x76 TX F4B5
[03:53:14][VV][scheduler:026]: set_timeout(name='data', timeout=114)
[03:53:14][C][bme280.sensor:086]: Setting up BME280...
[03:53:14][VV][i2c.arduino:126]: 0x76 TX D0
[03:53:14][VV][i2c.arduino:102]: 0x76 RX 60
[03:53:14][VV][i2c.arduino:126]: 0x76 TX E0B6
[03:53:14][VV][i2c.arduino:126]: 0x76 TX F3
[03:53:14][VV][i2c.arduino:102]: 0x76 RX 00
[03:53:14][VV][i2c.arduino:126]: 0x76 TX 88
[03:53:14][VV][i2c.arduino:102]: 0x76 RX 566C
[03:53:14][VV][i2c.arduino:126]: 0x76 TX 8A
[03:53:14][VV][i2c.arduino:102]: 0x76 RX 0E68
[03:53:14][VV][i2c.arduino:126]: 0x76 TX 8C
[03:53:14][VV][i2c.arduino:102]: 0x76 RX 3200
[03:53:14][VV][i2c.arduino:126]: 0x76 TX 8E
[03:53:14][VV][i2c.arduino:102]: 0x76 RX 4F92
[03:53:14][VV][i2c.arduino:126]: 0x76 TX 90
[03:53:14][VV][i2c.arduino:102]: 0x76 RX DAD6
[03:53:14][VV][i2c.arduino:126]: 0x76 TX 92
[03:53:14][VV][i2c.arduino:102]: 0x76 RX D00B
[03:53:14][VV][i2c.arduino:126]: 0x76 TX 94
[03:53:14][VV][i2c.arduino:102]: 0x76 RX 511E
[03:53:14][VV][i2c.arduino:126]: 0x76 TX 96
[03:53:14][VV][i2c.arduino:102]: 0x76 RX 6CFF
[03:53:14][VV][i2c.arduino:126]: 0x76 TX 98
[03:53:14][VV][i2c.arduino:102]: 0x76 RX F9FF
[03:53:14][VV][i2c.arduino:126]: 0x76 TX 9A
[03:53:14][VV][i2c.arduino:102]: 0x76 RX AC26
[03:53:14][VV][i2c.arduino:126]: 0x76 TX 9C
[03:53:14][VV][i2c.arduino:102]: 0x76 RX 0AD8
[03:53:14][VV][i2c.arduino:126]: 0x76 TX 9E
[03:53:14][VV][i2c.arduino:102]: 0x76 RX BD10
[03:53:14][VV][i2c.arduino:126]: 0x76 TX A1
[03:53:14][VV][i2c.arduino:102]: 0x76 RX 4B
[03:53:14][VV][i2c.arduino:126]: 0x76 TX E1
[03:53:14][VV][i2c.arduino:102]: 0x76 RX 7901
[03:53:14][VV][i2c.arduino:126]: 0x76 TX E3
[03:53:14][VV][i2c.arduino:102]: 0x76 RX 00
[03:53:14][VV][i2c.arduino:126]: 0x76 TX E4
[03:53:14][VV][i2c.arduino:102]: 0x76 RX 11
[03:53:14][VV][i2c.arduino:126]: 0x76 TX E5
[03:53:14][VV][i2c.arduino:102]: 0x76 RX 2C
[03:53:15][VV][i2c.arduino:126]: 0x76 TX E6
[03:53:15][VV][i2c.arduino:102]: 0x76 RX 03
[03:53:15][VV][i2c.arduino:126]: 0x76 TX E5
[03:53:15][VV][i2c.arduino:102]: 0x76 RX 2C
[03:53:15][VV][i2c.arduino:126]: 0x76 TX E7
[03:53:15][VV][i2c.arduino:102]: 0x76 RX 1E
[03:53:15][VV][i2c.arduino:126]: 0x76 TX F2
[03:53:15][VV][i2c.arduino:102]: 0x76 RX 00
[03:53:15][VV][i2c.arduino:126]: 0x76 TX F205
[03:53:15][VV][i2c.arduino:126]: 0x76 TX F5
[03:53:15][VV][i2c.arduino:102]: 0x76 RX 00
[03:53:15][VV][i2c.arduino:126]: 0x76 TX F5A0
[03:53:15][VV][scheduler:057]: set_interval(name='update', interval=60000, offset=20521)
[03:53:15][VV][scheduler:196]: Running interval 'update' with interval=60000 last_execution=4294887942 (now=1174)
[03:53:15][V][bme280.sensor:203]: Sending conversion request...
[03:53:15][VV][i2c.arduino:126]: 0x76 TX F4B5
[03:53:15][VV][scheduler:026]: set_timeout(name='data', timeout=114)
acronce commented 1 year ago

Thanks so much for fixing this @pxe-la!

I cloned your fork and verified that it works. When WiFi is inaccessible, the BME280 sensor initializes and works normally in my project.

Again, thanks for your help.