At work we’re primarily using Zoom for meetings while we’re in remote mode. Due to the recent problems found in their desktop software, I run it only on my iPad to provide a little more security (thanks to iPadOS’ sandboxed environment), plus the front facing camera on my iPad Pro is superior to my iMac and MacBook Pro’s.
The first issue I found with this setup was that I wanted to get the iPad into a position more perpendicular like a web cam, rather than the angled up shot below my face. I don’t think anyone wants to look up my nose unless I’m on a telehealth call, so I ordered this flexible stand for about $25 from Amazon and got it mounted:
So far so good, until my first meeting. I wanted to follow conference call etiquette by muting myself when I wasn’t speaking, but it was a pain to reach and manually tap the mute button every time. Plus, although the flexible arm is super strong, it’s still going to wobble wildly if you touch the iPad and your video is going to show that.
Was there a way I could toggle muting myself without touching the iPad? After a quick Google search, the answer was YES!
The attached keyboard (Smart Keyboard Folio, Magic Keyboard) didn’t make any sense in this case, but a Bluetooth keyboard would be perfect!
Logical answer
The logical answer is to connect up a Bluetooth keyboard and hit Command + Shift + A when you want to toggle muting your mic, and you’re done. That’s it.
I’m not totally logical
Of course, the route I chose was different. I have enough keyboards on my desk, I really just want one button to do one thing.
Recently, I rigged a button to turn pages in the Books app over Bluetooth. We should be able to do the same thing here, right?
Figuring out the codes
The objective is clear: When we press a button, we send “command+shift+a” to the iPad.
Using Adafruit’s HID codes, we find:
- Left shift == 0x02
- a == 0x04
But what’s the “Command” button? Is that the “meta” or “GUI” key? If so, is it a modifier or just a regular key?
Lots o’ troubleshooting
I spent a lot of time troubleshooting over and over:
Compile a new sequence of commands, upload new firmware to the microcontroller, re-pair with the iPad, open Zoom and try to mute: No go.
From what I could tell, “shift + a” were working, but “shift + command + a” wasn’t. It wasn’t until I almost gave up that I had a breakthrough:
Let’s try remapping another key to “command” and see if we can press that key. How about Caps Lock?
It worked.
In my code I wrote:
// gold
ble.println("AT+BleKeyboardCode=02-00-39-00-00-00-00"); // shift + caps lock
ble.println("AT+BleKeyboardCode=02-00-04-00-00-00-00"); // shift + a
ble.println("AT+BleKeyboardCode=00-00");
This is as if the user pressed “shift + caps lock”, and then “shift + a” at the same time, then released. Now the Zoom app was getting the proper command from a Bluetooth “keyboard”.
Hardware
This setup is virtually identical to what I have here, it’s just a different button.
The USB cable coming in is only for power, and if I had the Adafruit Feather version on hand I would’ve used that with a battery so the box would be totally wireless.
The button is no more complicated than this tutorial.
GitHub: https://github.com/twstokes/labs/tree/master/zoommuter
Improvements
A better version of this would be:
- A button to also toggle video
- Using the Adafruit Feather BLE version with a battery so the box would be entirely wireless