Modernize Harmony 880

Modernize a Logitech Harmony 880 universal remote

Similar projects worth following
The Harmony 880 has been staple of my AV setup for years. Time to update it.

The Logitech Harmony 880 is a universal infrared remote intended to control the numerous parts of a home theater system with one remote.  The Harmony remotes are programmable allowing sequences of IR commands to be sent to start an activity.  So "Watch Blu-ray" could be configured to turn on TV, receiver, and blu-ray player player, and set TV and receiver to correct inputs.  Convenient to keep from needing numerous remotes to start an activity.  Programming is performed using Logitech internet based software to update the remote via a USB connection.  In 2021, Logitech announced that they would discontinue Harmony Remote manufacturing.  The release indicates support would still continue software support, who knows how long that will remain.

The 880 remote build is great quality.  I'm not sure exactly when I got mine but it is upwards of 15 years of service with only some cosmetic wear to the buttons.  It has a rechargeable battery, that charges in a storage cradle.  Over the years the universality of the remote has diminished as more devices use RF remote protocols.  To keep the 880 working after getting a Roku box, an ESP8266 needed to be setup to translate IR remote signals to HTTP POST commands.

This project is undertaking an upgrade for the 880 universal remote to, update screen to TFT with better resolution, build in wifi connectivity, and provide an open source software solution for setup and programming.

  • No cords

    mulcmu4 days ago 0 comments

    All of the peripherals connected to the ESP32 have working code roughed out.  A work around for the cpu panic issue with the TFT_eSPI init was figured out to update the project from esp library 2.0.14.  The ESP32 lockup issue was related to the usb_serial.begin() function and was fixed in 2.0.15 so that got resolved as well.  The IR library doesn't support V3 of the ESP Ardunio library so still stuck on major rev 2 for time being.  The light sensor library worked well without any issues.  I couldn't find a good RTTTL library, the buzzer output was pretty low as well but at least made noise.  The IR led output was pretty disappointing.  Resistor was sized for 80 mA current (100 mA is rated max).  The transmissions were barely detectable on camera screen.  The stock remote IR leds show up pretty brightly when viewed with camera.  Need to resize resistor to drive at 300-500 mA to see if that makes these LEDs usable.  Started looking for some alternate ones as well.

    Haven't started any MSP peripheral work yet.  Power via the cradle and battery was tested and both seem to work.  Haven't tested battery charging yet.  One of the remotes from eBay had a battery that was below the protection board cutoff.  It seems to be working after a slow charge back up to 3.6 volts direct to battery terminals and then charged up to 4.2 with one of the eBay remotes.

  • Alpha3 assembly

    mulcmu06/23/2024 at 22:20 0 comments

    Got the board populated.  Forgot one capacitor and grabbed the wrong usb connector, otherwise looked really good.  A few solder balls.  The TDFN-8 package was really pushing my laser cut stencil but looks like it worked nicely.  The IR leds are pretty tiny, will be interesting to see what range they can get.

    Tried a 3d printed diffuser / snap dome alignment jig.  It worked well for getting the domes onto the tape in right spot.  It was too thick for the buttons to work properly.  The battery powered vacuum tweezers from ali-express were a great addition to the workbench.  

    The boss for the bottom case mounting screws interfered with IR demodulator and the light sensor/usb tvs ic.  I modified the case to fit.  Added courtyard to the bottom layer for the next board.

    Baseline code for ESP and MSP were loaded, power via USB connector was working.  Sometimes ESP seems to lockup when USB is connected.  Also noted some noise on the button matrix.  Pressing 4 or 7 seems to trigger a bunch of random button presses.

  • Alpha3 PCB

    mulcmu06/15/2024 at 01:37 0 comments

    Alpha3 PCB has been finished and sent off for fabrication.  All of the power management, battery charging, and IR parts are on a remote shaped PCB to test the fitup.  I started routing some of the button matrix and ended up getting everything routed on a 2 layer PCB.  Lots of vias and room for some improvements.  Maybe 4 layer pcb can be avoided.

  • Schematic updates

    mulcmu06/07/2024 at 22:30 0 comments

    Added the the power management to the schematic.  LM66200 ideal diode will switch between cradle and usb supply.  The 8V from the cradle will get dropped to 5V with LDO regulator.  Same ESD protection on the USB lines as alpha2.  A second LM66200 is used to switch between the 5V inputs and the battery.  MCP73831  charging IC and MAX17048  fuel gauge added for battery charging and status.  Two 3.3V regulators, one for the MSP430 and stuff that will run in battery operation, 2nd 3.3V regulator controlled by the MSP for all the peripherals.

    IR input and output added.  2 Leds like the original.  Backlight for LCD and the buttons are both separately controlled by ESP32.  A VEML7700 ambient light sensor was added to attempt to control backlight brightness.  The ESP32 has 6 free GPIO non strapping or jtag pins.

    The MSP430 has 24 GPIO.  15 are used by button matrix.  The rest are used for battery thermistor ADC, fuel gauge alert and i2c.  Uart TX to ESP32, battery powered input from LM66200, charger status, and output to control the 3.3V peripheral LDO.  The rolling ball switch uses 8th pin on port 2.  ESP UART to the MSP was removed.

    Think I'm going to do another 2 layer board with all the added parts to test everything out without size constraints before the final 4/6 layer.  Another remote test part with the IR and ambient light sensor for testing to test fit-up and operation inside the case.

  • LVGL + EEZ Studio

    mulcmu06/05/2024 at 00:16 0 comments

    Stumbled through getting LVGL working.  Struggled getting the screen rotation to work properly in 9.1 of the Arduino library.  Eventually gave up and downgraded to 8.3, which worked with the example code.  Found an issue/pr that fixed the rotation bug but wasn't yet in a release.  Over writing the arduino lvgl library src folder with the current version from github got 9.1 working properly.

    Testing EEZ Studio for generating the LVGL code, single screen and label seemed to work.  Got the label to update based on button press similar to prior demo code.

  • Alpha2 Progress

    mulcmu05/31/2024 at 14:20 0 comments

    Made a few tweaks to the Alpha2 board, made R3 a pull-down so backlight defaults to off.  This was ESP can be shutdown and screen stays off.  The MSP can control the ESP EN pin, currently there is a glitch where it seems to shutdown startup and shutdown again, hopefully just a software issue....

    2nd change was to add a vibration sensor to wake up the remote.  The original remotes had a 4 pin SMD plastic cage with a gold ball that shakes around on the inside.  I couldn't find any economical similar parts from the big US suppliers.  Found something similar in a 1210 smd package on Ali-express.  This seems to be normally open, but makes the smallest little pulse when moved.  It didn't register on DMM but when bodged to the MSP it will wake up the processor on the port2 interrupt.  I ordered a few more different types from Ali-express to  experiment with.

    MSP430 software has been reworked with some look up tables to eliminate the big nested switch statement.  Saved 280 bytes of flash.  Moved the processing out of the ISR.  Button press and release consistently detected.  

    Next steps to start working on the menu logic in the ESP and getting all the PCB feature complete.


  • Alpha2 Testing

    mulcmu05/25/2024 at 01:38 0 comments

    Alpha2 PCB was assembled.  The MSP430 CCS was cut and paste into a platformio project.  A few hiccups getting the chip flashed.  ESP32S3 was flashed over the USB.  Needed to tweak a few settings to get debug serial output over USB but working consistently now.   A weird problem was encountered with the button matrix.  8 buttons weren't working, somewhat grouped in the physical remote, but spread across a number of rows and columns.  Turns out the dome switches don't work too well when there is packing tape between them and the PCB.  The dome switches were quite fiddly.  To save time, I transferred the tape with the dome switches in place from the first alpha board to alpha2.  I was focused on alignment of the buttons and didn't realize the order I moved the sections over resulted in excess tape over other pads.

    Basic code is working now on both MCU to display the button presses on the LCD.  Case fully assembles around the PCB

  • Alpha2 PCB

    mulcmu05/19/2024 at 15:33 0 comments

    Second revision of the alpha PCB arrived yesterday.  This one was 0.8mm thick and allowed the case to snap shut properly (at least while still bare).  Most of the routing is the same with the notable update to mount the ESP32-S3 module on the PCB.  The mini usb connector is wired up to the ESP and 3v3 power so complete test of the LCD, button matrix, and button backlight LEDs can be done with the case completely assembled.

    The solder paste stencil was laser cut out from mylar and ready to go before the PCBs arrived, a pretty rare occurrence in my workshop.  Started to spec out some of the battery charging and power management.  The stock cradle voltage is 8Vdc so need to decide to keep remote compatible or if mods to cradle/charger are needed.

    Got a blink demo running on a MSP430 launchpad with same MCU but different package running with platformio.  Can add migrating the code from the TI CCS to platformio to the todo list. 

  • Button matrix scanning

    mulcmu02/22/2023 at 02:27 0 comments

    I found a full installation for code composer studio 6 and MSPware and ended up installing it on a windows xp vm.  It would have been way quicker to just figure out the register settings by hand.  Got test code installed on the MSP430 for the button matrix scanning.  MSP430 will stay in low power mode with all the matrix rows energized.  Interrupt on any column input will start timer for scanning the rows.  Byte value for detected key presses are transmitted over uart to the ESP32.  ESP32 code was updated to fix the screen rotation and output the key presses on the lcd.  Logic for scanning only looks for single button presses, no debouncing.  Works good enough for testing.

    Next step is to start refining the MSP430 code and functionality.  I think it will control the remote button backlight leds, rx/tx to esp32, esp32 power/wakeup, and movement sensor.   This will use 6 of the 8 port 1 gpio pins.

    The esp32 will just need to handle the screen, battery voltage, and the IR leds leaving room for extra scope.  i2s microphones for voice control, buzzer or haptic motor seem like some good additional features.

  • MSP430 Efforts

    mulcmu08/14/2022 at 16:18 0 comments

    My last MSP430 project was quite a while ago.  It looked like a good choice for the keypad matrix being low power and a lot of I/O plus prior experience developing and programming.  TI code composer studio went from revision 6 to 12 in the interim and dropped graphical configuration of the MSP430 peripherals (Grace) from the package.  CCS6 was still on laptop but didn't work when I started it up.  I uninstalled and upgraded to CSS12 before realizing Grace had been removed.  TI doesn't appears to have removed ability to download legacy versions and my CSS6 installer was the online variant which doesn't work so well once servers are shutdown.  My experience with Grace was that it was a bit buggy but saved time wadding through data sheet to get up and running.  Going to see if any of the old desktops will boot that had CSS6 installed...

View all 17 project logs

Enjoy this project?



gordoooo_z wrote 04/27/2024 at 13:41 point

This is dope. I really hope some people get together and try to reverse engineer the binary blobs from the online software before it goes dark forever. I can do software, but reverse engineering is out of my realm of lived experience.

In case any other unicorns are out there still into Harmony remotes, you can control *some* Rokus with a stock Harmony. Basically, if it comes with the "Simple Remote", which is just old school IR. The Voice Remote is a no-go though, although before I got the Harmony, I was using an 8bitdo controller hooked up to a Raspberry Pi, launching a series of shell scripts that would send the HTTP request for the button that was pressed, because I got tired of using the mobile app after my original remote broke. It worked, although obviously Bluetooth + sending even local network requests for every button press did add a bit of latency. Your ESP8266 implementation is arguably more elegant, but I just got annoyed and improvised something I could get working in a night lol

Unfortunately I didn't think about that when I got my mom a Harmony, and got most of her devices set up, until I realized that the Amazon Fire Stick has the same problem as the Roku Voice Remotes. Aaand I'm rambling.

  Are you sure? yes | no

mulcmu wrote 04/27/2024 at 14:22 point

Thanks for the post.  I had a current work around with an ESP8266 and IR receiver similar to your Pi and shell scripts.  Latency is not too bad, except when the IR receiver gets covered by clutter on TV stand.

  Are you sure? yes | no

Similar Projects

Does this project spark your interest?

Become a member to follow this project and never miss any updates