>>> Join Us in the Fight Against Air Pollution

AirGradient Forum

Presoldered Pro issues with display, temp/humidity and (possibly unrelated) Senseair

Hi!

I ordered and have been using the Sensair DIY Pro Pre-soldered kit for about a year. I am using ESPHome (current config below) From the beginning, the humidity and temperature measurements, as well as the OLED have been freezing after 4-48h online. Humidity and temperature both report as “Unavailable”, while the screen would display white blocks and stop updating. In the logs, it displays something similar to this user’s post (I2C bus freezes ony the presoldered Pro Kit). Software resetting doesn’t help. (I can provide the exact error when it occurs again).

I recently got a multimeter and soldering iron, and have been investigating further. I measured the resistance on the SHT3x (I can’t find the post see where I saw this, but it was in these forums), and it measured what was expected. The voltages corresponded with what was marked on each board. I have tried several different power supplies.

Since my latest re-assembly, the sensair is consistently reporting the following error. Unlike the previous issues, this is reported immediately upon boot. I suspect that I may have incorrectly adjusted some configuration, but can’t seem to identify the culprit. The screen and temp/humidity is less urgent for me, but I’m already missing the CO2 measurements.

Senseair Error:

[19:34:58][E][uart:015]: Reading from UART timed out at byte 0!
[19:34:58][W][senseair:024]: Reading data from SenseAir failed!

Do you suspect this is related to the previous error? I have a multimeter and a soldering iron, but I’m not very confident with either so please let me know specifically what to measure (I understand this may be related to excess pull-ups, but I have no idea how to validate if that’s the issue here).

Thanks in advance!

ESPHome config:

substitutions:
  devicename: "airgradient-pro"
  upper_devicename: "Living Room Sensor"

esphome:
  name: airmonitor

esp8266:
  board: d1_mini

# Enable logging
logger:

# Enable Home Assistant API
api:
  password: ""

ota:
  password: ""

wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password

  # Enable fallback hotspot (captive portal) in case wifi connection fails
  ap:
    ssid: "Airmonitor Fallback Hotspot"
    password: (removed)

captive_portal:

switch:
  - platform: restart
    name: "Air Sensor Restart"

i2c:
  sda: D2
  scl: D1
  frequency: 100kHz

uart:
  - rx_pin: D5
    tx_pin: D6
    baud_rate: 9600
    id: uart1_1
  - rx_pin: D4
    tx_pin: D3
    baud_rate: 9600
    id: uart2_2

sensor:
  - platform: sht3xd
    temperature:
      id: temp
      name: "Temperature"
      filters:
        - sliding_window_moving_average:
            window_size: 6
            send_every: 3

    humidity:
      id: humidity
      name: "Humidity"
      filters:
        - sliding_window_moving_average:
            window_size: 6
            send_every: 3
    address: 0x44
    update_interval: 60s

  - platform: pmsx003
    type: PMSX003
    uart_id: uart1_1
    update_interval: 30s
    pm_2_5:
      id: pm25
      name: "${upper_devicename} Particulate Matter <2.5µm Concentration"
      accuracy_decimals: 1
      filters:
        - exponential_moving_average:
            send_every: 4
            send_first_at: 4
    # pm_1_0:
    #   id: pm1_0
    #   name: "Particulate Matter <1µm Concentration"
    # pm_10_0:
    #   id: pm10
    #   name: "Particulate Matter <10µm Concentration"

  - platform: senseair
    uart_id: uart2_2
    update_interval: 30s
    co2:
      id: co2
      name: "${upper_devicename} SenseAir CO2 Value"
      filters:
        - exponential_moving_average:
            send_every: 3
            send_first_at: 3

font:
  - file: "gfonts://Saira Condensed"
    id: opensans
    size: 24
    glyphs: |
      !"%()+=,-_.:°0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyzµ³/

time:
  - platform: homeassistant
    id: homeassistant_time

display:
  - platform: ssd1306_i2c
    model: "SH1106 128x64"
    update_interval: 2s
    contrast: 40%
    id: oled
    rotation: 180
    address: 0x3C
    pages:
      - id: page1
        lambda: |-
          it.printf(0, 0, id(opensans), "CO2: %.0fppm", id(co2).state);
          it.printf(0, 24, id(opensans), "PM2.5: %.0f", id(pm25).state);
      - id: page2
        lambda: |-
          it.printf(0, 0, id(opensans), "RH: %.0f%%", id(humidity).state);
          it.printf(0, 24, id(opensans), "Temp: %.0f°C", id(temp).state);

interval:
  - interval: 10s
    then:
      - display.page.show_next: oled
      - component.update: oled

Sorry, I cannot say much about ESPHome as we do not maintain that but did you try and flash the official firmware from our website just to check if it is hardware related or not?

I’m having the same problem as well.
My work-around; plug the USB adapter to a smart switch, then use a automation script in Home Assistant to restart the smart switch when it gets ‘Unknown’ from the Airgradient Pro.

I tried various troubleshooting methods and still getting the screen freeze, what I’ve tried:

  • Replace the USB adapter and ensuring that each provides proper power.
  • Powering from the PCB board.
  • Powering from the ESP8266 board.
  • Adjusting the ‘frequency’ in ESPHOME.
  • Adjusting ‘update_interval’ for the sensor in ESPHOME.

So far, my work-around, is working well. Hope someone figure this out.

Your original error occurred after 4 hours. UART fails immediately. They’re not related. You’ll need to sort out the UART first. Yes, it’s possible you introduced a problem. Did you switch the positive + negative serial lines on UART? Also check that neither of them is shorted directly to power or ground (there should be at least x resistance.)
Otherwise, it’s possible that a chip is completely off or not responding…hence the UART error. You’ll have to narrow it down…once the multimeter is done…check with an oscilloscope.