removed docs folder: contents lives in respective scopes directly now
This commit is contained in:
@@ -1,87 +0,0 @@
|
||||
# Alarm Audio Streaming Protocol
|
||||
|
||||
## Overview
|
||||
|
||||
The Raspberry Pi streams alarm audio to the ESP32-S3 over a dedicated WebSocket connection on **port 8766**. The protocol uses mixed text and binary frames — text for control messages, binary for raw PCM data.
|
||||
|
||||
## Connection
|
||||
|
||||
| Parameter | Value |
|
||||
|-----------|-------|
|
||||
| Port | 8766 |
|
||||
| Transport | WebSocket |
|
||||
| Direction | Pi (server) → ESP32 (client) |
|
||||
|
||||
The ESP32 connects and stays connected. The server initiates alarm playback when needed.
|
||||
|
||||
## Message Sequence
|
||||
|
||||
```
|
||||
Pi ESP32
|
||||
│ │
|
||||
│◄──── WS connect ──────────│
|
||||
│ │
|
||||
│ (idle until alarm fires) │
|
||||
│ │
|
||||
├─ alarm_start (text) ──────►│ → open codec
|
||||
├─ PCM chunk (binary) ──────►│ → queue + play
|
||||
├─ PCM chunk (binary) ──────►│
|
||||
│ ... │
|
||||
├─ alarm_stop (text) ────────►│ → drain + close codec
|
||||
│ │
|
||||
```
|
||||
|
||||
## Control Messages (Text Frames)
|
||||
|
||||
### alarm_start
|
||||
|
||||
Sent before the first PCM chunk. The ESP32 uses these parameters to configure the DAC.
|
||||
|
||||
```json
|
||||
{
|
||||
"type": "alarm_start",
|
||||
"sample_rate": 24000,
|
||||
"channels": 2,
|
||||
"bits": 16
|
||||
}
|
||||
```
|
||||
|
||||
### alarm_stop
|
||||
|
||||
Sent after the last PCM chunk.
|
||||
|
||||
```json
|
||||
{
|
||||
"type": "alarm_stop"
|
||||
}
|
||||
```
|
||||
|
||||
## PCM Data (Binary Frames)
|
||||
|
||||
- **Format:** Raw signed 16-bit little-endian, interleaved stereo (L, R, L, R, ...)
|
||||
- **Chunk size:** 4096 bytes (1024 stereo samples at 16-bit)
|
||||
- **Pacing:** Chunks sent at ~90% real-time speed to maintain buffer without overflow
|
||||
- **Byte order:** Little-endian (native for both Pi and ESP32)
|
||||
|
||||
At 24kHz / 2ch / 16-bit:
|
||||
- Bytes per second: 96,000
|
||||
- Chunk duration: ~42.7 ms
|
||||
- Send interval: ~38.4 ms (90% pacing)
|
||||
|
||||
## ESP32 Buffering
|
||||
|
||||
- FreeRTOS queue: 10 slots of pointer-to-chunk
|
||||
- Total buffer capacity: ~427 ms of audio
|
||||
- Overflow policy: drop chunk and log warning
|
||||
|
||||
## Future: Alarm Scheduling
|
||||
|
||||
Not yet implemented. Planned JSON format for alarm configuration:
|
||||
|
||||
```json
|
||||
{
|
||||
"alarm_time": "070000",
|
||||
"alarm_days": ["Mon", "Tue", "Wed"],
|
||||
"alarm_audio": "path/to/file.wav"
|
||||
}
|
||||
```
|
||||
Reference in New Issue
Block a user