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
|
Pinout Reference: LD2410
|
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
| Qty | Component | Description |
|---|---|---|
| 1 | ESP32-C3 Super Mini | Dev board, WiFi, USB-C |
| 1 | ST7735 0.96–1.8" Display | SPI colour display (160x80) |
| 1 | LD2410 mmWave | Presence sensor, UART, 1.25mm header |
| 1 | SCD4x/BME280 | CO₂/Temp/Humidity, I²C |
| 1 | GL5528 LDR + 10kΩ | Light sensor voltage divider |
| 1 | Tactile button | For info/test, wired to ADC |
| 1 | Custom PCB | All sensors plug in, low-profile |
| 1 | Enclosure | 3D printed or repurposed |
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.
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!
