Building a remote-control home automation keypad
I use Zoom. A lot. Obviously, a whole lot more since we all started working from home. It’s not a big deal – I’ve gotten pretty used to it, and it’s a good system. So much better than the PictureTel VTCs I occasionally used in the early 90’s.
What’s annoying, though, is when someone asks a question and I’m on mute. Suddenly, there’s a scramble to figure out which monitor the mouse pointer is on…jiggle…jiggle…JIGGLE! Oh, there it is. Now, where’s the window? Over – no, wrong way. Over here. Hover. Up comes the control bar. Down to the left and click – shoot, missed. Hover again. Okay, NOW mute is off.
“Sorry, what was the question?”
So, yeah, it’d be great to have a quick and easy way to un-mute. I recently saw someone who’d rigged up a Staples “Easy Button” to unmute Zoom. I think they just took a USB keypad, tore out the guts, and connected a single switch such that it would send a Cmd-Shift-A. Simple, easy, and effective. But…not really too much fun to build (for me, at least).
I’ve recently been expanding my home automation knowledge – building and integrating sensors into a larger home system. The communications protocols used to connect these sensors seemed like a perfect fit for a remote control switch.
But what if the switch could do more than just toggle my microphone? It could turn my camera on and off. It could control lights, and more. Build in Wi-Fi, so it’s not directly tied to any single computer? Okay, this could be fun.
Hardware
But what kind of switch? A couple months ago, I saw a picture of someone’s home office setup. Front and center was a cool looking virtual keyboard – the Elgato Stream Deck. It has 15 different keys, each with its own LED display, so every button can have a picture of what it controls. It looks great! It’s also tied to the vendor’s software and sends commands to a single computer. So not quite what I wanted.
Well, what if I could just wire up raw keyboard switches? I found a couple keypads with flat, clear caps for paper labels. They weren’t cheap. Similar controls are used in high performance auto customization, but again, pricey. I considered a cheap USB numeric keypad – but those won’t integrate with the kind of microcontrollers I wanted. Also, none of these options had per-key visual indicators.
An iPad would give me a lot of flexibility, and I’ve got a bunch of old iPad 2’s lying around, but those have their own problems. For one, I may have to wake it up first, adding time to the whole “unmute quickly” dance. Also, with a physical keypad I could see its state in my peripheral vision, and quickly reach to hit just the right button in the corner, almost completely by feel. So I really wanted a self-contained keypad. (Plus, half the fun is in building it).
Then I found the Adafruit Trellis Keypad. It’s a 16-button keypad, in a 4x4 grid, where each button is a translucent piece of white rubber. Like an oversized remote control. And each button has a little LED behind it, so it can light up, or turn off, or whatever. This is nearly what I want….if only…if only I could get multiple colors.
Turns out, we can! They made a version of the keypad called NeoTrellis. It’s the same hardware, only instead of a single-color LED, each key has a “neopixel” – an individually controlled RGB light that can be set to any color you like. Woohoo! Now…what do I need to make it work?
They even have a kit that gives me everything I need: the button caps, the keypad & LEDs, a microcontroller, a case, and even a cable to connect things together. All for under $50. Sold! It arrived in under a week. (They also have optional support for a rechargeable battery, but I’m okay keeping it tethered for power…I mean, it’s gonna live on my desk, right?)
My Keypad
So here’s what I’ve built. I have a single 16-key NeoTrellis keypad, in a case, which controls 5 different devices:
- Zoom microphone and camera, for both my work laptop and home Mac in my basement office
- My BusyLight – a remote indicator that tells the kids when I’m in a meeting
- Webcam lights attached to my monitor, which help keep me well-lit during calls
- Display of outdoor cameras, to see who’s ringing the doorbell in the middle of the workday
The buttons change color depending on what the controlled device is doing – the Zoom buttons not only change mute/video status, they display the current state. It all works over WiFi, with a wire only to provide power. It reboots in about 2 seconds – which is a great, since there are still some crashing bugs I need to track down.
How it Works
Despite the basic simplicity of it, there’s a lot going on here, and much more than can be put in a single post. So I’m going to do a whole series of posts.
I’ll go over a basic setup for the keypad. Then I’ll talk about some of the other devices it controls, and how I customized the keypad to better control those devices, then how it linked up with Zoom (which was the whole reason to start down this rabbit hole, after all). I’ll discuss some of the lessons I learned along the way (there were quite a few), and some ideas for future enhancements. Finally, I’ll try to wrap up the series with some really deep, technical details that pull them all together.
With luck, I’ll post an entry every week or so, and if I’m very lucky, I’ll have moved some items from the “try in the future” to the “here’s what I did” sections before I even get to writing about them.
You can always find an index of all the posts in this series here.
Next Time
In my next post, I’ll describe the keypad itself, and show the code needed to make it a simple MQTT sender and receiver. This will be able to let the world when I’ve pressed button 5, and allow other devices to turn that button bright blue.