ESP32-C3 Multi-Sensor Room Monitor

 

Room sensor - front Room sensor - back

Compact, wall-mountable, and designed for Home Assistant, this project combines presence detection, environmental monitoring, and a mini display.
PCB, full wiring, and ESPHome YAML below!


Overview

This project aim is to create an "All in one" room sensor suitable for every room that needs it.
As of writing this, I have multple devices in various rooms sensing movement, temperature etc. This is an attempt to cover all in one device.

This compact module achieves:

  • Presence sensor. Most reliable way to tell if a room is occupied, even when there is no movement
  • Light detection. Lights could switch on if the room is dark due to curtains, bad weather etc
  • Temperature
  • Humidity
  • CO₂ sensor, potentially warning a person if its too high which causes drowsiness, affects concentration
  • A colour screen - no end of things this could potentially display
  • Push button - to potentially wake up the display


Main Features: mmWave presence (LD2410), light level (LDR), CO₂/temp/humidity (SCD4x/BME280), display, and a handy button—all managed by ESP32-C3 and ESPHome, with full integration into Home Assistant.


Block Diagram

Block diagram & wiring

Pinout Reference: LD2410

LD2410 pinout

The OUT pin is a basic digital on/off presence signal. Its not used in this project but exists if you need a physical output.


Bill of Materials

QtyComponentDescription
1ESP32-C3 Super MiniDev board, WiFi, USB-C
1ST7735 0.96–1.8" DisplaySPI colour display (160x80)
1LD2410 mmWavePresence sensor, UART, 1.25mm header
1SCD4x/BME280CO₂/Temp/Humidity, I²C
1GL5528 LDR + 10kΩLight sensor voltage divider
1Tactile buttonFor info/test, wired to ADC
1Custom PCBAll sensors plug in, low-profile
1Enclosure3D printed or repurposed
Tip: Check pin pitch and hole sizes before ordering your PCB.

Assembly Tips

  • Test your LD2410 first! Use a USB-TTL module and the Windows LD2410 demo software to check detection range and confirm your module works before soldering to your PCB.
  • Mind the connector pin thickness—many pre-made cables/pins are fatter than the standard footprint, so use a 0.9–1.0mm drill for those holes.
  • Add a copper ground plane behind the LD2410 (on the PCB) for more directional detection and to prevent false triggers through the wall.
  • The LDR and pushbutton share the ADC pin; pressing the button drops the ADC reading near zero (see schematic), a neat trick when out of IO pins!
  • All modules plug in for easy swap/testing.

ESPHome Firmware Highlights

All devices are managed in one YAML: SPI display, UART radar, I²C air sensor, ADC LDR/button combo.

sensor:
  - platform: adc
    pin: 0
    id: ldr_sensor
    name: "Ambient Light"
    update_interval: 2s
    filters:
      - lambda: |-
          if (x < 0.1) {
            id(info_button).publish_state(true);
          } else {
            id(info_button).publish_state(false);
          }
          return x;
  - platform: template
    id: info_button
    name: "Info/Test Button"
    lambda: 'return false;'
    
See project GitHub or YAML below for the full configuration.

Display & Home Assistant Integration

  • The ST7735 shows live data: light (%), movement/still distance, temp/humidity, CO₂, etc.
  • Button can toggle “pages” or show extra info; configure this in your display lambda.
  • All sensor data is available in Home Assistant—use built-in or Mushroom cards for a slick dashboard.

HA dashboard (example)


 

Lessons Learned & Tips

  • Check sensor function before soldering—ESD/static can zap mmWave modules.
  • Don’t forget to tune the presence sensor for each room—adjust gates and thresholds in Home Assistant for best results.
  • If you need more IO in future, consider an I²C expander (PCF8574, MCP23017, etc).
  • PCB hole size matters more than you think!

 

Download & More

Have questions, want to suggest a tweak, or want to build your own? Contact me or comment below!

← Back to Projects