DIY project to “open-source-ify” an IKEA SYMFONISK WiFi bookshelf speaker (black, gen 2), replacing internal electronics with a Raspberry Pi while retaining the original power supply, speakers, and buttons.
Overview
| Aspect | Details |
|---|---|
| Speaker | IKEA SYMFONISK (Gen 2, Black) |
| Compute | Raspberry Pi Zero 2 WH |
| DAC | IQaudIO DigiAMP+ SC0370 |
| OS | piCorePlayer |
| Control | Lyrion Music Server (LMS) |
| Integration | Home Assistant |
Hardware Reuse
Successfully repurposed from original speaker:
- Original power supply
- Original speakers (drivers)
- Four buttons (play/pause, volume up/down, preset)
- Four status LEDs (green, white, amber, red)
Hardware Setup
┌─────────────────────────────────────────────────────────────────┐
│ IKEA SYMFONISK Shell │
│ │
│ ┌──────────────────────────────────────────────────────────┐ │
│ │ Original Power Supply │ │
│ │ (Retained) │ │
│ └──────────────────────────┬───────────────────────────────┘ │
│ │ │
│ ┌──────────────────────────▼───────────────────────────────┐ │
│ │ IQaudIO DigiAMP+ │ │
│ │ SC0370 │ │
│ └──────────────────────────┬───────────────────────────────┘ │
│ │ │
│ ┌──────────────────────────▼───────────────────────────────┐ │
│ │ Raspberry Pi Zero 2 WH │ │
│ │ (Pre-soldered pinheader) │ │
│ │ │ │
│ │ GPIO ─────► Buttons (4x) │ │
│ │ GPIO ─────► LEDs (4x) │ │
│ └──────────────────────────────────────────────────────────┘ │
│ │ │
│ ┌──────────────────────────▼───────────────────────────────┐ │
│ │ Original Speakers │ │
│ │ (Retained) │ │
│ └──────────────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────────┘
GPIO Mapping
Mapping the original buttons and LEDs required step-by-step multimeter investigation:
| Component | GPIO Pin | Function |
|---|---|---|
| Green LED | GPIO XX | Health OK |
| White LED | GPIO XX | Playing |
| Amber LED | GPIO XX | Warning |
| Red LED | GPIO XX | Error |
| Button 1 | GPIO XX | Play/Pause |
| Button 2 | GPIO XX | Volume Up |
| Button 3 | GPIO XX | Volume Down |
| Button 4 | GPIO XX | Preset |
(Full pinout documentation available)
LED Signaling Scripts
Developed custom scripts to provide meaningful status indicators:
Health Check Script
On boot, performs system checks and signals via LED:
- ✅ Check disk space on root filesystem
- ✅ Check CPU temperature
- ✅ Check Wi-Fi connectivity
- ✅ Check internet connectivity
Result: 3x green blink = all healthchecks passed
#!/bin/bash
# Simplified healthcheck logic
check_disk() {
usage=$(df / | tail -1 | awk '{print $5}' | tr -d '%')
[ $usage -lt 90 ]
}
check_temp() {
temp=$(cat /sys/class/thermal/thermal_zone0/temp)
[ $temp -lt 70000 ] # 70°C
}
check_wifi() {
iwconfig wlan0 | grep -q "ESSID"
}
check_internet() {
ping -c 1 8.8.8.8 > /dev/null 2>&1
}
# Run checks and blink accordingly
if check_disk && check_temp && check_wifi && check_internet; then
blink_green 3
else
blink_red 3
fi
Software Stack
| Component | Purpose |
|---|---|
| piCorePlayer | Lightweight audio OS |
| Lyrion Music Server | Music library and streaming |
| Squeezelite | Audio player client |
| Home Assistant | Automation and control |
Home Assistant Integration
The speaker integrates with Home Assistant for:
- Automated music playback based on presence
- Radio station presets
- Volume control via automations
- TTS announcements
Challenges Overcome
- GPIO Mapping: Required multimeter probing to identify button and LED connections
- Scripting: Custom scripts for health checks and LED signaling
- Power Management: Adapting original PSU to Pi requirements
- Audio Quality: Tuning DigiAMP+ settings for optimal sound
Results
A fully functional, open-source smart speaker that:
- Plays music from local library or streaming services
- Integrates with Home Assistant automations
- Provides visual status via original LEDs
- Uses original buttons for control
- Maintains original speaker quality
Skills Demonstrated
- Raspberry Pi hardware integration
- GPIO programming
- Shell scripting
- Electronics and reverse engineering
- piCorePlayer/LMS configuration
- Home Assistant integration
Inspired by similar Sonos Play:1 conversion projects
