Files
EVS-Embedded-Voice-System/README.md
Kai 04c59c3b25
Some checks failed
Build and Push EVS Bridge Image / docker (push) Has been cancelled
Add EVS control portal, io_mode switching, and DAC-only speaker path
2026-02-15 13:16:41 +01:00

90 lines
2.6 KiB
Markdown

# EVS - Embedded Voice System
ESP32-based voice client with:
- `INMP441` microphone (I2S)
- `PAM8403` amplifier (analog input from ESP32 DAC)
- WebSocket audio streaming to central bridge
- MQTT remote control
- optional UDP microphone stream (remote switchable)
## Project Structure
- `src/main.cpp`: Firmware (audio, WiFi, WebSocket, MQTT commands, UDP stream)
- `include/secrets.h`: local environment values (not versioned)
- `include/secrets.example.h`: template for `secrets.h`
- `bridge/`: EVS bridge (WebSocket + MQTT + VAD + STT integration)
- `stt-worker/`: MQTT-based STT worker (`vad_segment` -> `transcript`)
## Firmware Behavior
- On WebSocket connect: mode switches automatically to `StreamToServer`
- On WebSocket disconnect: mode switches automatically to `Idle`
- Serial commands (`115200 baud`):
- `p` = print network and mode status
- `h` = help
## MQTT Remote Control
Topics:
- command: `evs/<device_id>/command`
- status: `evs/<device_id>/status`
Example commands:
- `{"cmd":"status"}`
- `{"cmd":"mode","value":"idle"}`
- `{"cmd":"mode","value":"stream"}`
- `{"cmd":"io_mode","value":"mic"}`
- `{"cmd":"io_mode","value":"spk"}`
- `{"cmd":"udp_stream","enabled":true,"target_host":"10.100.3.247","target_port":5004}`
- `{"cmd":"udp_stream","enabled":false}`
Status payload includes:
- current mode
- current `io_mode` (`mic` or `spk`)
- WS/MQTT connectivity
- UDP stream state and target (only relevant in `mic` mode)
## ESP32 Setup
1. Copy `include/secrets.example.h` to `include/secrets.h`.
2. Set values in `include/secrets.h`:
- WiFi credentials
- `EVS_BRIDGE_HOST`
- `EVS_WS_PORT`, `EVS_WS_PATH`
- `EVS_DEVICE_ID`
- role config:
- `EVS_ENABLE_MIC`
- `EVS_ENABLE_SPEAKER`
- `EVS_DEFAULT_IO_MODE` (`"mic"` or `"spk"`)
- `EVS_SPK_DAC_PIN` (`25` or `26`)
- optional MQTT overrides:
- `EVS_MQTT_HOST`, `EVS_MQTT_PORT`
- `EVS_MQTT_USER`, `EVS_MQTT_PASSWORD`
- `EVS_MQTT_BASE_TOPIC`
3. Build/flash:
```bash
pio run -e esp32dev_core2 -t upload
pio device monitor -b 115200
```
## Audio Format
- PCM16LE
- mono
- 16 kHz
## Notes
- `include/secrets.h` is intentionally ignored in git.
- Speaker path is DAC-only (PWM removed):
- `GPIO25` (DAC1) or `GPIO26` (DAC2) -> amplifier input (`L+` or `R+`)
- common `GND` between ESP32 and amplifier is mandatory
- INMP441 wiring (default in firmware):
- `WS` -> `GPIO25`
- `SCK` -> `GPIO26`
- `SD` -> `GPIO33`
- `VDD` -> `3V3`
- `GND` -> `GND`
- For newer Arduino core testing, `esp32dev_core3` is available in `platformio.ini`.
- Bridge and STT worker details are in `bridge/README.md` and `stt-worker/README.md`.