CircuitPython Denon Remote Control Speaker Stand
The ‘circuitpython-denon-remote-control’ project is written in CircuitPython to control a Denon audio-video receiver wirelessly. The hardware is then embedded in a 3D printed speaker stand, which is built for AudioEngine P4 and A5 speakers.
View the source code on GitHub which also includes the 3D printer design files.
I originally wrote a similar app called pi-dial using the denonavr Python library and a Raspberry Pi in a 3D printed case to control my Denon receiver’s Zone 2. After creating the speakerstand-lights project that embedded a Feather and Featherwing in a speakerstand, I still had one speaker stand left without anything in it. When Adafruit released theESP32-S2 Reverse TFT Feather inspiration struck as it was perfect for my needs.
- Adafruit ESP32-S2 (or S3) Reverse TFT Feather
- Adafruit Stemma QT Rotary Encoder Breakout and rotary encoder
- StemmaQT cable
- USB-C cable with an optional right angle connector for mounting in a speaker stand
- 3D Printer - optional, but you probably want some way to mount the Feather
The code is hardwired to Zone 2, but could easily work with your main zone. When possible, I tried to use the serial commands over telnet and not the XML post requests. If you’re controlling Zone 1, you can query the volume directly over serial instead of XML, which can sometimes time out.
I used the three buttons on the front of the Reverse TFT Feather to control my AUX1, Tuner, and CD inputs. The
if statement changes the display name as I use the CD input for my phono pre-amp so I renamed it “Vinyl” and AUX1 I use for “CD”.
The rotary encoder changes the volume up and down and the button mutes and unmutes the receiver as well as displaying a white screen with big letters saying “MUTED” to remind me to unmute it.
3D Printing New Speaker Stands
I re-used my speakerstand design from the
speakerstand-lights project using OnShape. I don’t have any experieince with CAD and it shows, especially where the cables lay inside. I hope to re-design this properly some time in the future. Included are all the files you would need, including a normal speaker stand with rounded edges and an angled version. The embedded version includes an STL file, STEP, and 3MF.
You will need to print the Reverse TFT front plate from BlitzCityDIY’s Octoprint enclosure project and attach it using 2 M2 and 2 M2.5 screws.
- This project couldn’t have been completed without the
denonavrPython library. Everything I needed was well documented for the XML queries. Denon’s serial control protocol is well documented, though there are far fewer Zone2 commands.
- BlitzcityDIY for her Octoprint enclosure which also featured a square faceplate for the ESP32-S2 Reverse TFT Feather.
- Neradoc for porting ElementTree to CircuitPython for parsing XML.