Add extra GPIO button support with custom sound playback
Features: - Configurable extra button on any GPIO pin - Upload and select custom sound for button press - Non-blocking button operation (separate thread) - Debounced to prevent double-triggers (0.5s) - Works independently from phone handset - Can be pressed anytime, even during recording Configuration: - gpio.extra_button_enabled: Enable/disable feature - gpio.extra_button_pin: GPIO pin number (default: 27) - gpio.extra_button_pressed_state: "LOW" or "HIGH" - system.extra_button_sound: Default sound file Web Interface: - Display active button sound in alert - "🔘 Set Button" action on greeting items - Visual indicator (🔘) for active button sound - Upload any WAV file and assign to button - Play/preview button sounds in browser Backend: - RotaryPhone.play_extra_button_sound() method - RotaryPhone.set_extra_button_sound() method - Thread-based playback to not block main loop - /set_extra_button_sound API endpoint - Extra button sound tracked in user_config.json Documentation: - Extra button setup in README - Configuration examples - GPIO pin configuration - Operation workflow Use Cases: - Play special message on button press - Sound effects for wedding games - Multiple interaction points - Custom audio triggers 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
23
README.md
23
README.md
@@ -12,6 +12,7 @@ A Raspberry Pi-based rotary phone system for weddings and events. Guests can pic
|
||||
- **Volume Control**: Adjust playback volume with real-time slider (0-100%)
|
||||
- **Multiple Message Support**: Upload and manage multiple greeting messages
|
||||
- **Active Message Selector**: Choose which greeting plays when the phone is picked up
|
||||
- **Extra Button Support**: Optional GPIO button to play custom sounds on demand
|
||||
- **HiFiBerry Support**: Optimized for HiFiBerry DAC+ADC Pro audio quality
|
||||
- **Real-time Status**: Monitor phone status (on-hook/off-hook/recording)
|
||||
- **Auto-refresh**: Status updates every 5 seconds
|
||||
@@ -100,8 +101,11 @@ nano config.json # or use your preferred editor
|
||||
```json
|
||||
{
|
||||
"gpio": {
|
||||
"hook_pin": 17, // GPIO pin for hookswitch
|
||||
"hook_pressed_state": "LOW" // "LOW" or "HIGH"
|
||||
"hook_pin": 17, // GPIO pin for hookswitch
|
||||
"hook_pressed_state": "LOW", // "LOW" or "HIGH"
|
||||
"extra_button_enabled": true, // Enable extra button feature
|
||||
"extra_button_pin": 27, // GPIO pin for extra button
|
||||
"extra_button_pressed_state": "LOW" // "LOW" or "HIGH"
|
||||
},
|
||||
"audio": {
|
||||
"device_index": 1, // HiFiBerry device index
|
||||
@@ -164,6 +168,7 @@ The web interface provides four main sections:
|
||||
- **Upload**: Click "Choose WAV File(s)" to upload one or multiple greeting messages
|
||||
- **Play**: Click "▶️ Play" to preview any greeting in your browser
|
||||
- **Set Active**: Click "⭐ Set Active" to select which greeting plays when the phone is picked up
|
||||
- **Set Button**: Click "🔘 Set Button" to assign sound to extra button (if enabled)
|
||||
- **Delete**: Remove unwanted greetings (cannot delete the active one)
|
||||
- **Default Tone**: Generate a classic telephone dial tone
|
||||
|
||||
@@ -181,6 +186,14 @@ The web interface provides four main sections:
|
||||
4. **Guest hangs up**: Recording stops and saves automatically
|
||||
5. **Ready for next call**: System returns to waiting state
|
||||
|
||||
### Extra Button Operation (Optional)
|
||||
|
||||
If enabled in `config.json`:
|
||||
1. **Guest presses button**: System detects GPIO signal
|
||||
2. **Sound plays**: Configured button sound plays through speaker
|
||||
3. **Non-blocking**: Button can be pressed anytime, even during recording
|
||||
4. **Debounced**: 0.5s delay prevents accidental double-presses
|
||||
|
||||
## File Structure
|
||||
|
||||
```
|
||||
@@ -218,7 +231,10 @@ The `config.json` file contains all system settings:
|
||||
{
|
||||
"gpio": {
|
||||
"hook_pin": 17, // GPIO pin number for hookswitch
|
||||
"hook_pressed_state": "LOW" // "LOW" or "HIGH" depending on switch
|
||||
"hook_pressed_state": "LOW", // "LOW" or "HIGH" depending on switch
|
||||
"extra_button_enabled": true, // Enable optional extra button
|
||||
"extra_button_pin": 27, // GPIO pin for extra button
|
||||
"extra_button_pressed_state": "LOW" // Button pressed state
|
||||
},
|
||||
"audio": {
|
||||
"device_index": 1, // Audio device index (run test to find)
|
||||
@@ -239,6 +255,7 @@ The `config.json` file contains all system settings:
|
||||
},
|
||||
"system": {
|
||||
"active_greeting": "dialtone.wav", // Default greeting
|
||||
"extra_button_sound": "button_sound.wav", // Default button sound
|
||||
"volume": 70 // Default volume (0-100)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user