Skip to content

A simple 6 button remote that will launch specific shows and control the volume

License

Notifications You must be signed in to change notification settings

niccit/easy-remote

Repository files navigation

Easy Remote with LED Display

Picture of LED display

The Need

As my mom gets older, she is having trouble working the remote for her Roku devices.

I searched for a senior-friendly remote that worked with Roku but was unable to find one that didn't have way too many tiny buttons on it.

The Solution

Build a 4-button remote with a large display.

Color code the buttons, LED lights on the keyboard, and text on the display.

  • Red: Netflix
  • Blue: Paramount/Pluto TV
  • Green: Hallmark
  • White: Power

This project is tailored to her watching habits, however, it can be easily modified.

In addition to the keypad this implementation will:

  • Interact with the TV streaming Netflix every hour to avoid the "Are you still watching message"
  • Turn primary and secondary TVs on and off automatically

How it works

The project is coded in CircuitPython

You will notice that there are four launch_service methods, although only three can be used if you leave the fourth button for power. I added the launch_pluto method late and just swapped it out with the launch_paramount method. Hopefully, this shows how flexible you can be with this project.

You will need to create your own secrets file based on the example file included in the project. Documentation for building a secrets file can be found here.

To better understand how to interact with the Roku devices, please visit the Roku Developers : External Control Protocol (ECP) documentation.

Adafruit libraries this project needs:

  • adafruit_bitmap_font
  • adafruit_bus_device
  • adafruit_display_text
  • adafruit_esp32spi
  • adafruit_io
  • adafruit_neokey
  • adafruit_matrixportal
  • adafruit_requests.mpy

All configurable data is stored in the data file:

  • device_hosts : One or more Roku devices available on the network
  • service_port : The service port for the Roku device
  • shows : The shows the person using this remote likes to watch
  • channels : The Roku channel names
  • channel_numbers : The corresponding Roku channel IDs - see the ECP for how to get a channel ID
  • frndly_guide_position : Unfortunately, Frndly TV app currently doesn't support the Roku search controls. For now you have to find your channel in the guide and count how many down from the top it is and us it for this value.
  • netflix_search_int : Netflix doesn't put you back to the starting position on the search grid, so you have to note how many moves right it is from the last letter in your search to the program you want to select.
  • paramount_search_int : Paramount moves where they leave the search cursor, use this value to change how many times to move the cursor in order to select the desired show
  • primary_tv_start_time : The time, stored in an array [h, m], you want the primary television to turn on each day
  • primary_tv_end_time : The time, stored in an array [h, m], you want the primary television to turn off each day
  • secondary_tv_start_time: The time, stored in an array [h, m], you want the secondary television to turn on each day
  • secondary_tv_end_time: The time, stored in an array [h, m], you want the secondary television to turn off each day
  • update_delay : This is the first of the main while loops. General setup/housekeeping, doesn't need to run often. Set to 1 hour
  • interact_delay: This is the second of the main while loops, it interacts with Netflix and handles automatic start/stop of the devices. Set to 20 miutes
  • remote_reboot_time: The time, stored in an array [h, m], you want the remote to reboot each day

Why I chose to use a data file?

I wanted the code to be flexible with as little hard coding as possible. It's much easier to edit the data file then to make changes directly in the code.

The hardware

All the hardware is from Adafruit.

3D printing

The stand is designed in OpenSCAD and the source and STL files are included in the project. For my printer I had to break the stand into two halves. In order to do this there is a mortise/tenon joint to join the halves. If your printer is big enough you can print the whole unit at once. STL files are provided for each half, the entire stand, the keyboard cover, offsets, and screws.

No matter how you print it you will need to print the offsets, screws, and keyboard cover separately.

  • If you have M3 screws and offsets you can forego printing those
  • if you have M4 screws you can forego printing the screws
  • The LED display has M3 threaded holes
  • The offsets and keyboard tray use M4 threaded holes
    • I went up to M4 because I found that size printed more reliably

I have not included supports in the STL files. You will need to add supports into your slicer or the print will not come out as intended.

The logo on the back of the stand is my 'tip of the hat' and thank you to Adafruit and the Adafruit community. Feel free to comment out the design or substitute your own.

  • Printer - Flashforge Adventurer 4

  • Slicing software - FlashPrint

  • Filament and Slicing:

    • PLA for the stand, offset, and screws
      • Standard 1.75mm filament
      • Extruder: .4/240c
      • Extruder Temp: 210c
      • Platform Temp: 50
      • Supports:
        • Yes for the tenon joint on the left side
          • Linear
          • Manual
      • Raft: Yes for the stand
        • Above Raft Extrusion Ratio : 75%
        • Space to Model (Z) : 0.18mm
    • PETG for the keyboard cover
      • Color: Transparent
      • Extruder: .4/265c
      • Extruder Temp: 240c
      • Platform Temp: 80c
      • Supports: No
      • Raft: Yes
        • Above Raft Extrusion Ratio : 75%
        • Space to Model (Z) : 0.18mm

Huge thank you to HopefulLlama and rcoyler for sharing their libraries with the OpenSCAD community!

To-Do

  • Switch to a socketpool
    • I'm hoping this helps with overall stability
    • In addition it will allow the user to push a button while backround checks and maintenance tasks are happening

FAQ

  • My remote is up and running, but after about 6-8 hours it stops communicating with the devices. If I look at the REPL it says my active devices are inactive.

    • You are likely running the default firmware on your Matrix Portal M4 board
    • Solution: Upgrade the firmware, by following these instructions.
  • The software periodically crashes with a seesaw error, when I reset I get the error message "No pull up found. check your wiring".

    • FIRST: Ensure you're using a STEMMA QT/Qwiic cable
    • Posted in the Adafruit forums about this issue.
    • Solution This seems to be specific to this board, so between your Matrix Portal 4 and the Keyboard, put an Adafruit LTC4311 I2C Extender / Active Terminator - STEMMA QT / Qwiic
      • The part is linked above in the hardware section.

  • Every so often the screen is stuck on "Loading Please Wait"

    • See the To-Do list
  • Every so often the remote is unresponsive when pressing a button or it takes a long time to start handling the button request

    • See the To-Do list

About

A simple 6 button remote that will launch specific shows and control the volume

Topics

Resources

License

Stars

Watchers

Forks

Packages