Files
Hannes ac5a556c11 Add ESPHome firmware templates, GND pour notes, v2 lessons learned
- firmware/: config + secrets templates committed, flashed config git-ignored
- README: document the GND pour on F.Cu/B.Cu and the module keep-out rule areas
- README: correct the calibration button wiring (S8 bCal_in, not an MCU GPIO)
- README: v2 list - dedicated 5 V power input, decoupling, mounting holes,
  I2C pull-ups, schematic annotation, RoHS finish, project name, antenna keep-out
2026-10-19 22:33:36 +02:00
..

Firmware

ESPHome firmware for the ESP32-C3 CO₂ & environment sensor board.

Files

File In git Purpose
esp-sensair.yaml.example yes configuration template, all credentials as !secret references
secrets.yaml.example yes secrets template with placeholders
esp-sensair.yaml no (git-ignored) your flashed configuration
secrets.yaml no (git-ignored) your Wi-Fi, API, OTA and hotspot credentials

Setup:

cp firmware/esp-sensair.yaml.example firmware/esp-sensair.yaml
cp firmware/secrets.yaml.example     firmware/secrets.yaml
# fill in firmware/secrets.yaml
esphome run firmware/esp-sensair.yaml

Generate the Home Assistant API encryption key with:

python3 -c "import base64,os; print(base64.b64encode(os.urandom(32)).decode())"

Target

Item Value
Chip ESP32-C3 (RISC-V, single core, Wi-Fi)
ESPHome board esp32-c3-devkitm-1
Framework ESP-IDF
Flashing USB-C on the devkit module (ESPHome OTA after first flash)

Peripherals

Peripheral Bus Pins Notes
Sensirion S8 (NDIR CO₂) UART, 9600 baud 8N1 TX = GPIO21, RX = GPIO20 5 V supply, ~30 s preheat; the S8's own bCal_in pin carries the on-board calibration button
BME280 (T / RH / P) I²C, address 0x76 SDA = GPIO7, SCL = GPIO8 powered from the module's 3.3 V output, pull-ups on the breakout
SW1 — not on the MCU wired to the S8 bCal_in input with a 1 kΩ / 100 nF RC network

Update interval for both sensors: 60 s.

Home Assistant

Exposed as native ESPHome entities: CO₂, temperature, relative humidity, pressure. API connection is encrypted (noise protocol), OTA updates enabled, static IP with a fallback hotspot and captive portal if the Wi-Fi connection fails.

Ideas for v2

  • Trigger the S8 background calibration from Home Assistant (senseair platform actions) in addition to the hardware button, and log the calibration events.
  • Automatic baseline calibration window tuned to the room's nightly CO₂ minimum.
  • Report Wi-Fi signal strength and device uptime as sensors for diagnostics.