SEN55 with ESP32 and ESPHome: PM2.5, VOC, NOx and Home Assistant

Connect Sensirion SEN55 to ESP32 and ESPHome for PM1, PM2.5, PM4, PM10, VOC Index, NOx Index, temperature and humidity. Includes wiring, YAML, fan cleaning and Home Assistant.

The Sensirion SEN55 is a useful all-in-one indoor-air-quality sensor when you need more than a temperature sensor or a basic VOC breakout. Inside one fan-assisted module it measures particulate mass concentration at PM1, PM2.5, PM4 and PM10, temperature and relative humidity, and reports two calculated gas indicators: the VOC Index and NOx Index. An ESP32 with ESPHome can expose all eight values directly to Home Assistant over I²C.

It is particularly interesting for rooms where you want to distinguish cooking particles from a VOC event, operate an air purifier, or compare air quality over the day. It is not a CO₂ sensor, and neither the VOC Index nor the NOx Index is a direct ppm measurement. For actual CO₂ concentration, pair it with a dedicated SCD40, SCD41 or another suitable optical CO₂ sensor.

SEN55 Specifications at a Glance

FeatureSEN55
Particulate readingsPM1.0, PM2.5, PM4.0 and PM10 mass concentration
Particulate unitsµg/m³
Gas readingsVOC Index and NOx Index; unitless relative indicators
Other readingsTemperature and relative humidity
Power supply5 V nominal; bare module 4.5–5.5 V
Normal running currentAbout 63 mA average after initial operation; allow up to 110 mA peak
ESPHome interfaceI²C; default address 0x69
Module connectorSix-pin, 1.25 mm; five signals used in I²C mode
Automatic fan cleaningNormally once a week of uninterrupted measurement operation
Typical useMains-powered indoor air-quality monitor or purifier feedback

The SEN55 is substantially more power-hungry than a standalone SHT or SGP gas chip because it contains an optical particle sensor and a fan. Design it as a continuously powered sensor unless you have a specific reason to implement duty cycling.

What SEN55 Measures — and What It Does Not

The four PM values are mass concentrations, expressed in micrograms per cubic metre of air. PM2.5 refers to the estimated mass concentration of particles in the fine-particle size fraction; it is not the number of particles counted. The module combines optical particle measurement and an internal conversion model, so it is useful for trends and control, but not a substitute for a regulatory-grade reference monitor.

The VOC Index reflects changes in volatile-organic-compound-sensitive gas response relative to the sensor’s learned background. A typical VOC Index is centred around 100. A rise above that level signals a stronger response than the recent reference, not “100 ppm VOC”.

The NOx Index reflects changes in oxidising-gas response. Its default learned background is near 1 rather than 100. Both indices are unitless and can change following cooking or exposure to other gas mixtures, but neither identifies a specific chemical or measures a certified NO₂ concentration. Avoid turning them into a toxic-gas alarm or labelling them as ppm.

A useful architecture is therefore: SEN55 for particles and gas-change indicators, plus an optical CO₂ sensor when occupancy/ventilation-related CO₂ is important. Our ESP32 indoor air-quality station demonstrates the separate-sensor approach.

SEN55 Connector Pinout and ESP32 Wiring

The bare SEN55 module uses a six-pin, 1.25 mm connector. Confirm the numbering against the connector’s orientation or the pin labels on your breakout; do not infer pin 1 from wire colour alone.

Module pinFunctionClassic ESP32 connection
1VDDRegulated 5 V
2GNDCommon ground
3SDAGPIO21; pulled up to 3.3 V
4SCLGPIO22; pulled up to 3.3 V
5SELConnect to GND to select I²C
6NCLeave unconnected

The module supply and the I²C logic do not use the same voltage in this arrangement. Power SEN55 at 5 V, but pull SDA and SCL up to 3.3 V so the ESP32 inputs never see a 5 V logic-high. Sensirion lists its I²C interface as 3.3 V compatible. If a breakout already includes I²C pull-ups, inspect where they connect: a breakout that pulls the bus up to 5 V must not be connected directly to ESP32 GPIO without correcting the pull-ups or adding level shifting.

The sensor’s fan and laser need a stable 5 V rail. Do not power the SEN55 from an ESP32’s 3.3 V pin. A small USB wall supply with enough current margin for both boards is usually simpler than a battery arrangement.

Why the SEL Pin Must Be Grounded

The SEN5x family has interface-selection hardware. For the I²C mode supported by ESPHome’s sen5x component, connect SEL (pin 5) to ground (pin 2). If you leave SEL incorrectly configured, a perfectly wired sensor may not appear in the I²C scan at all.

The chip family may offer another communication mode, but the current ESPHome SEN5x integration implements I²C only. Avoid copying UART wiring from a non-ESPHome SEN55 tutorial and expecting the ESPHome component to recognise it.

Minimal ESPHome SEN55 Configuration

Start by getting the sensor visible on I²C. On an original ESP32 DevKit, GPIO21 and GPIO22 are convenient examples, but other valid pins can work through the ESP32 GPIO matrix.

i2c:
  sda: GPIO21
  scl: GPIO22
  scan: true

sensor:
  - platform: sen5x
    id: sen55_sensor
    address: 0x69
    update_interval: 10s

    pm_1_0:
      name: "SEN55 PM1.0"
    pm_2_5:
      name: "SEN55 PM2.5"
    pm_4_0:
      name: "SEN55 PM4.0"
    pm_10_0:
      name: "SEN55 PM10"

    temperature:
      name: "SEN55 Temperature"
    humidity:
      name: "SEN55 Humidity"

    voc_index:
      name: "SEN55 VOC Index"
    nox_index:
      name: "SEN55 NOx Index"

Current ESPHome documentation uses voc_index and nox_index. Older examples use voc and nox, which are deprecated names. Use the Index names in a new project because the values are not concentration measurements.

Full ESP32 and Home Assistant Configuration

The following creates a normal Wi-Fi ESPHome node using the Native API. Replace the secret names with your own ESPHome secrets.

esphome:
  name: living-room-air
  friendly_name: Living Room Air

esp32:
  board: esp32dev
  framework:
    type: esp-idf

logger:

api:
  encryption:
    key: !secret api_encryption_key

ota:
  - platform: esphome

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

i2c:
  sda: GPIO21
  scl: GPIO22
  scan: true

sensor:
  - platform: sen5x
    id: sen55_sensor
    address: 0x69
    update_interval: 10s
    store_baseline: true

    pm_1_0:
      name: "PM1.0"
    pm_2_5:
      name: "PM2.5"
      id: indoor_pm25
    pm_4_0:
      name: "PM4.0"
    pm_10_0:
      name: "PM10"

    temperature:
      name: "Air Temperature"
    humidity:
      name: "Air Humidity"
    voc_index:
      name: "VOC Index"
    nox_index:
      name: "NOx Index"

  - platform: wifi_signal
    name: "WiFi RSSI"
    update_interval: 60s
    entity_category: diagnostic

  - platform: uptime
    name: "Device Uptime"
    entity_category: diagnostic

This example uses store_baseline: true to preserve the VOC algorithm state over ordinary node restarts. ESPHome limits how often it writes that state to flash; still, continuous mains power is preferable to restarting the device every few minutes. The NOx Index needs its own stabilisation time and should not be treated as a ready-to-use gas concentration immediately at startup.

What to Expect During Startup

Allow the sensor about a minute to warm up after enabling measurement. Particle, humidity and temperature outputs can become available before the gas-index algorithms have learned enough context to produce stable-looking readings. On a brand-new monitor, compare trends over several hours rather than deciding within the first minute that a VOC value is wrong.

Gas index readings depend on the recent background. A high VOC event followed by several hours of normal conditions may give a different index trajectory from the same event immediately after the first boot. That is expected of a relative index: do not create a permanent room-quality score by simply comparing VOC Index values across different rooms without context.

Fan Cleaning and Sensor Lifetime

SEN55 periodically accelerates its fan for about ten seconds to clear dust. ESPHome documents a default automatic-cleaning interval of 604,800 seconds, or one week of uninterrupted operation. Measurements pause briefly while the fan is cleaning.

If you regularly switch the entire SEN55 off, the internal cleaning timer resets. A device that never stays powered for a full week may therefore miss its default periodic cleaning indefinitely. For a continuously installed monitor, leaving the module powered is typically the simplest approach. For a deliberately duty-cycled design, plan and test cleaning rather than assuming it will happen automatically.

You can expose a manual clean button in ESPHome:

button:
  - platform: template
    name: "Clean SEN55 Fan"
    entity_category: diagnostic
    on_press:
      - sen5x.start_fan_autoclean: sen55_sensor

Run cleaning after installation or servicing if the inlet has accumulated dust; do not mistake the temporary pause in measurements for Wi-Fi instability.

Choose the Enclosure Around Airflow

Unlike a tiny SHT40, SEN55 actively pulls air through an optical chamber. The enclosure must not block the sensor’s inlet or outlet. Leave enough clearance for the actual SEN55 airflow path, and avoid pointing the outlet directly back at the inlet because recirculation changes the sample the instrument is meant to measure.

Keep the sensor away from the ESP32 regulator and other heat sources. SEN55 reports temperature and humidity, but its installation inside a warm box may still need measured thermal compensation. Provide ventilation through the case while protecting the electronics from splashes and condensation.

Position the monitor in representative room air, not beside a cooker hood, humidifier, open window or air purifier exhaust unless that local reading is exactly what you intend to monitor. Avoid direct sunlight, which heats the case, and keep the module accessible for inspection and maintenance.

How Temperature Compensation Works

ESPHome exposes SEN5x temperature_compensation with an offset, a normalized_offset_slope and a smoothing time_constant. These are intended to correct the thermal effects of the finished product design, not to force every module to show the same number as a nearby thermostat.

First put a trustworthy reference sensor in the same air for long enough to equilibrate. If SEN55 stays consistently high because of the housing, correct the ventilation and thermal layout before calculating an offset. ESPHome also provides an acceleration_mode for environments with more rapid thermal changes; the default low setting is suitable for many stationary monitors.

Home Assistant Dashboard: Keep the Units Honest

Arrange the Home Assistant card into three clearly labelled groups. Particles: PM1, PM2.5, PM4 and PM10 in µg/m³. Gas-change indicators: VOC Index and NOx Index with no ppm or µg/m³ suffix. Climate: temperature in °C and humidity in %.

PM2.5 is often the most intuitive particle trace for room air: frying, toasting or dust disturbance may raise it sharply. A gas cleaning product may move VOC Index without producing much PM2.5. Conversely, the particles from an activity need not create a proportionate gas-index event. Keep those signals separate so automations respond to the right phenomenon.

For long-term comparisons, record trends and suitably averaged PM2.5; a single momentary value is not equivalent to a regulatory air-quality metric or a health assessment. Outdoor air entering through a window can improve CO₂ while increasing indoor particles during a pollution event, so ventilation and filtration should not be conflated.

A Sensible PM2.5 Air-Purifier Automation

The following is an example control threshold, not a health limit. It starts a purifier after PM2.5 has remained above a chosen level for ten minutes. Adjust the entities, duration and threshold to the room and purifier. Configure a separate lower threshold and sufficient delay for switching off, so the fan does not chatter.

alias: Start purifier on sustained PM2.5
triggers:
  - trigger: numeric_state
    entity_id: sensor.living_room_air_pm2_5
    above: 25
    for: "00:10:00"
conditions:
  - condition: state
    entity_id: fan.living_room_purifier
    state: "off"
actions:
  - action: fan.turn_on
    target:
      entity_id: fan.living_room_purifier
mode: single

Verify the actual Home Assistant entity ID after adding the ESPHome node. For an automation that protects a device or property, do not treat one hobby sensor as the sole safety interlock.

SEN50 vs SEN54 vs SEN55

ModelPMTemperature/RHVOC IndexNOx Index
SEN50YesNoNoNo
SEN54YesYesYesNo
SEN55YesYesYesYes

ESPHome can detect the SEN5x model automatically. The nox_index output is only available on a physical SEN55; copying a SEN55 YAML block onto an SEN54 cannot create an NOx channel. Sensirion now also lists SEN65 as a successor product to SEN55. For a new commercial design, check current sensor availability and your ESPHome version’s support for the specific new model rather than assuming identical drivers or pinouts.

SEN55 vs PMS5003 + SGP40

A PMS5003 measures particulate matter while SGP40 offers a relative VOC Index. Add an SHT sensor for temperature/humidity compensation and you have a flexible multi-board architecture. The SEN55 integrates all those broad sensing roles and adds a NOx Index, reducing sensor wiring at the cost of a larger, more expensive single module.

Our existing PMS5003 with ESPHome article covers the lower-cost UART PM option. The SGP40 ESPHome guide covers the separate VOC sensor; our SGP40 vs SGP41 comparison explains the different gas channels.

Neither arrangement directly measures CO₂ unless you also fit a true CO₂ sensor. A VOC-derived eCO₂ estimate is not interchangeable with SCD4x’s optical CO₂ readings.

Troubleshooting SEN55 and ESPHome

SymptomWhat to check first
Nothing appears at 0x695 V supply, shared ground, SDA/SCL, SEL grounded, connector orientation
I²C scan works but measurements fail5 V rail droop during fan operation, bus pull-ups and wiring length
ESP32 behaves erratically after connectionCheck whether the breakout pulls SDA/SCL to 5 V
NOx entity missingVerify actual model is SEN55, not SEN54
VOC looks strange immediately after restartAllow warm-up and gas-index learning; check baseline persistence
PM stays nearly zero with a cooking eventCheck inlet/outlet airflow and whether the fan is running
PM pauses for around 10 secondsNormal automatic fan cleaning may be in progress
Temperature always too highCase heating, nearby regulator/ESP32 and enclosure airflow
Measurements disappear with ESPHome unavailableCheck Wi-Fi, API, device uptime and power before blaming SEN55
Two SEN55s on one I²C bus conflictBoth default to 0x69; use separate I²C buses or a multiplexer

If you do need multiple identical sensors at 0x69 on one controller, see our TCA9548A I²C multiplexer guide once it is published; each channel can present an independent virtual I²C bus to ESPHome.

When I Would Use SEN55

SEN55 is a strong fit for a permanently powered indoor monitor where you want PM2.5 alongside relative VOC and oxidising-gas trends from one compact sensor subsystem. Its practical benefits are integrated airflow, several PM size fractions, I²C support and built-in fan maintenance.

Use a simpler PMS5003 if you only need particle trends. Add an optical CO₂ sensor if ventilation/occupancy monitoring is a requirement. Spend time on the enclosure, 5 V rail, 3.3 V pull-ups and sensor placement: those will determine whether your carefully written ESPHome YAML produces useful room data.

Official Documentation and Further Reading

Share your love