Intercom Button — ESP32-S3 push-to-talk hardware for Home Intercom

This is the hardware companion to the Home Intercom project — a Home Assistant add-on that turns any media_player into a whole-home intercom system. The button firmware POSTs audio to the Home Intercom server, which handles TTS playback on your smart speakers.

How it works: Press and hold the button, speak, release → your voice plays in the target room’s speaker. Each button is mapped to a specific room via config — living room, bedroom, cinema, or broadcast to all.

Prerequisites

This device requires the Home Intercom server running in Home Assistant. See:

Hardware

Component Cost
ESP32-S3-DevKitC (WROOM-1 N8) already owned
MAX9814 electret mic with AGC ¥5-6 (~$0.80)
Momentary push button ¥2 (~$0.30)
Total BOM ~¥8 (~$1.10)

3 wires: GPIO1 (ADC) → MAX9814 OUT, GPIO4 → button → GND. Solder GAIN to GND for 50dB desktop sensitivity.

Stage: This is a functional demo/prototype. Future hardware iterations may evolve into a smart knob form factor — a rotary encoder with push-to-talk, volume control, and a small display — staying on the desk as a dedicated intercom controller.

Features (v0.1.0 just released)

  • 16kHz 16-bit mono PCM recording via Timer ISR
  • PSRAM ring buffer — up to 60 seconds continuous
  • Home Assistant integrationha_token + `Authorization: *** header
  • HTTPS support for remote HA instances
  • Per-room config via JSON on LittleFS — same binary, different configs
  • WiFi auto-reconnect with non-blocking connection
  • WS2812 RGB status LED
  • Non-blocking state machine: IDLE → RECORDING → UPLOADING
  • Best-effort delivery: retries 3 times, treats audio delivery > HTTP ack

Architecture

ESP32-S3 Button  ──WiFi──→  Home Intercom (HA)  ──→  Smart Speaker (media_player)
    │                              │
    │  POST /api/home_intercom/record?target=study
    │  Content-Type: audio/wav
    │  Authorization: ***
    │
    └── 16-bit PCM WAV, 16kHz

Links

Happy to answer questions or take feature requests!