I love my Hypex DLCP-based integrated amplifier - 6 channels of UcD400 OEM with the original Hypex DLCP input board and controller. I built it almost 5 years ago, and it's been completely reliable and still sounds perfect.
One thing that I always felt, from day one, could have done with some additional features, however, was the controller.
1) Some way to control the amplifier over a wifi connection would be good when, for instance, I'm in the adjacent room and there's no line of sight for the infrared controller.
2) I would have appreciated a way to select a specific input channel directly, rather than having to scroll through the available inputs. This applies in particular to the infrared remote navigation - if I sit down in front of the TV I can barely see the characters on the DLCP display in the corner of the room, so navigating to the input selection menu then scrolling round to the 'Optical' input is a bit hit-and-miss. A dedicated key on the remote to select the optical input would be ideal.
3) It would have been convenient to have a way to turn on the amplifier automatically in response to an external signal. For instance, I use a piCorePlayer as my main audio source, and this has a way to signal that Squeezelite is (soft-)powered on/off via a GPIO pin on the Raspberry Pi. It would be good to be able to use this signal to power the amplifier on/off.
4) I find the physical button panel a little frustrating because the functions of the buttons vary depending on which part of the menu structure you're in - there are no dedicated volume buttons or channel selection buttons. To change the volume you have to use the left/right buttons to navigate to the volume setting, and then the up and down buttons will alter the volume. Similarly, to change input channel you have to use the left/right buttons to navigate to the input setting, and then the up and down buttons will change the input. Perfectly logical, but not great for everyday use. I think this was a consequence of the need to have setup options accessible via the same buttons, but for me the setup is something I did on day one and have never touched again, and I seem to recall that it can be done via a connected computer anyway.
So I've had a go at building my own controller, to achieve all of these features. Hypex technical support have been enormously helpful, and furnished me with schematics for the original controller and the DLCP (for the RJ45 pinouts), as well as a description of the data protocol between the controller and the DLCP. I set about breadboarding a full controller replacement, with the following design goals:
1) All buttons to have a fixed function - e.g. up/down for volume, left/right for channel selection, centre for mute - and the display should always show both the selected input and the volume. This inevitably means that the 'setup' options in the original controller won't be implemented.
2) A wifi enabled processor, running a websocket application so that any connected clients will always see the up-to-date status of the amplifier.
3) Form factor - since I never quite got around to having the front panel machined to accept the original controller, I could have changed the form factor completely (I'm still using a 'temporary' hardboard mock-up front panel). But I like the original form factor, so I wanted my controller to be a drop-in replacement for the original.
4) Specific inputs to be selectable via extra physical buttons, as well as being directly accessible via the infrared remote (the F1, F2, F3 and F4 buttons on the Hypex remote are perfect for this, and are otherwise unused on the DLCP). To ensure that my controller remains a drop-in replacement, the extra buttons would be added via an add-on PCB which can be mounted separately.
5) Logic pins to allow for external triggering.
My proof-of-concept breadboard system uses an ESP32 development board, and an awful lot of jumper wires to implement all the necessary circuitry. I had a button board PCB that I'd developed previously (for a my piCorePlayer) to mirror the layout of the DLCP controller buttons, and I bought a 16x2 display to match the original. I also had a 3-button add-on board that I'd made for use with the piCorePlayer (for preset playlists etc). The controller uses MIDI to speak to the DLCP, so to get me started I bought a couple of MIDI CHIPs (from Roxxxtar Productions:
https://www.roxxxtar.com/badassmidi-midi-chip), but once I was up and running I replaced the MIDI CHIP with discrete components. These parts together have allowed me to develop the ESP32 software to a point where I'm happy that all the design goals can be achieved.
I've now designed a PCB to replace the rat's nest of jumper wires and integrate everything into something that will use the same mounting holes as the original controller. For my first version, a couple of issues prevented the PCB having exactly the same footprint as the original. Firstly, the ESP32 module is not quite as compact as the processor that Hypex used, so the PCB had to grow in height by approx 8mm, and the ESP32 antenna sits a further 8mm above that. In my amplifier's encolsure, there is room to accommodate the necessary extra 16mm of height. Secondly, the ESP32 draws a bit more current than Hypex's original processor - more than the 100mA available on the RJ45 connection from the DLCP - so this has required me to provide an additional power connection. I've used a microUSB connection for ease of use, and I plan to feed that from the 5V supply I included in my amplifier build to power my Raspberry pi 4B - it's rated at 2.3A, so there should be enough spare capacity. Other than that it should match the original: mounting holes, LCD display location, buttons and IR receiver. The first version of the PCB has been ordered from JLCPCB - It should be here in a week or so, and will require very little assembly when it arrives. I've requested them to do all the SMD soldering, so I'll only have the push buttons and IR receiver to solder in, plus the 16x2 display. Unfortunately I made a bit of a blunder with the display, and didn't make sure to keep all other components out of the way of the display PCB, so for this first version the display will be mounted in front of the PCB, rather than behind, so will protrude a little further forward than the original. Not a show-stopper for this prototype though.
When version 1 arrives I'll figure out what else I did wrong and incorporate any necessary changes into version 2. I already have a work-in-progress V2.0 design under way. I've changed the through-hole push buttons to SMD, which has given me a lot more flexibility over component placement on the reverse. This has allowed me to reduce the PCB size to exactly match Hypex's original, and I've moved the ESP32 antenna within the overall footprint by clearing out a section of the PCB around the antenna. I've also added a couple of miniature push buttons to help with programming the ESP32 - not strictly necessary with a fully wired serial adapter, but there was room. I have no idea how well the ESP32 antenna will work inside the metal case of my amplifier. As noted, mine currently has a wooden front, so reception should be ok, but ultimately this will be replaced by a machined metal front. I do have the option to specify an ESP32 module that uses an external antenna, and I've even read of a hack that's possible to fit an external antenna to a module that includes a built-in antenna.
The software is 90% complete, and fully functional. The following screenshots show the software capabilities. The beauty of having my own software is that I can add extra features that weren't part of the original design goals - I've included a configuration page to rename the input channels for instance (so that the USB input becomes 'Squeezebox', and the optical input becomes 'TV'), and to configure the additional 'preset' buttons to select any of the given inputs. My PCB also includes circuitry to adjust the display brightness and contrast via PWM GPIOs, so this is configurable in the software. And I implemented an alternative volume display (a 'loudness' percentage scale, rather than dB), because the dB display is a little unintuitive for casual users. Finally there is a page to specify wifi credentials - if the ESP32 doesn't find a configured access point within 10 seconds of boot, it launches its own access point so that you can connect to it and tell it your wifi details.
My experience of writing ESP32 software is quite limited, and I have zero experience of building an ESP32 module onto a PCB, so this will probably signal the end of the complete reliability of my amplifier! But it's been a fun and challenging project so far.