Control your Google Meet calls using the Pimoroni Keybow 2040 mechanical keypad! This project provides a Chrome extension and CircuitPython code to create a physical control interface for Google Meet.
- 16-key mechanical keypad with RGB lighting
- Physical controls for common Google Meet actions:
- Toggle microphone/camera
- Open/close chat and participants
- Raise/lower hand
- Toggle captions
- Send emoji reactions (👍, 👏, 😂)
- Leave call
- Visual feedback with color-coded LEDs
- No complex setup - works as a USB keyboard
-
Chrome Extension (
chrome-extension/)- Listens for keyboard shortcuts
- Controls Google Meet interface
- Works on
https://meet.google.com/*
-
CircuitPython Code (
keybow-2040-code/)- Runs on Keybow 2040
- Sends keyboard shortcuts via USB HID
- Provides RGB feedback
- Pimoroni Keybow 2040 (£39)
- USB-C cable
- Computer with Chrome browser
-
Install CircuitPython firmware:
- Download CircuitPython for Keybow 2040
- Hold BOOT button while connecting USB
- Drag
.uf2file to RPI-RP2 drive
-
Install libraries:
- Download CircuitPython Library Bundle
- Copy these to
lib/folder on Keybow 2040:adafruit_hid/keybow2040.pyadafruit_is31fl3731.pyadafruit_bus_device/adafruit_register/
-
Install code:
- Copy
keybow-2040-code/code.pyto root of Keybow 2040 - Copy
keybow-2040-code/boot.pyto root of Keybow 2040
- Copy
-
Load extension:
- Open Chrome and go to
chrome://extensions/ - Enable "Developer mode"
- Click "Load unpacked"
- Select the
chrome-extension/folder
- Open Chrome and go to
-
Test installation:
- Go to Google Meet
- Join or start a meeting
- Try keyboard shortcuts (Ctrl+Shift+M for mic toggle)
Row 1: [Mic] [Camera] [Chat] [Participants]
Row 2: [Hand] [Captions] [Leave] [Empty]
Row 3: [👍] [👏] [😂] [Empty]
Row 4: [Empty] [Empty] [Empty] [Empty]
- Red: Microphone
- Green: Camera / Thumbs up
- Blue: Chat
- Yellow: Participants / Clap
- Magenta: Hand raise / Laugh
- Cyan: Captions
- Orange: Leave call
- White: Key pressed (feedback)
| Action | Shortcut | Key Position |
|---|---|---|
| Toggle Mic | Ctrl+Alt+M | (0,0) |
| Toggle Camera | Ctrl+Alt+V | (0,1) |
| Toggle Chat | Ctrl+Alt+T | (0,2) |
| Toggle Participants | Ctrl+Alt+U | (0,3) |
| Toggle Hand | Ctrl+Alt+H | (1,0) |
| Toggle Captions | Ctrl+Alt+S | (1,1) |
| Leave Call | Ctrl+Alt+Q | (1,2) |
| Thumbs Up | Ctrl+Alt+1 | (2,0) |
| Clap | Ctrl+Alt+2 | (2,1) |
| Laugh | Ctrl+Alt+3 | (2,2) |
- Not recognized: Check CircuitPython firmware installation
- No LED response: Verify library installation
- Keys not working: Check
boot.pyenables HID keyboard
- Shortcuts not working: Check extension is loaded and enabled
- Meet buttons not found: Google Meet may have updated - selectors may need adjustment
- Permission denied: Ensure extension has access to
meet.google.com
- Delay in response: Normal - USB HID and web page interaction have small delays
- Some functions missing: Google Meet features vary by account type and meeting settings
- Add keyboard shortcut in
chrome-extension/manifest.json - Add handler in
meet-controller.js - Add key mapping in
keybow-2040-code/code.py
Edit KEY_MAPPING in code.py:
(row, col): ("Description", [Keycode.CONTROL, Keycode.SHIFT, Keycode.KEY], (r, g, b))Modify RGB values in KEY_MAPPING for different LED colors.
- Simple approach: Keybow 2040 acts as USB keyboard
- No complex protocols: Uses standard HID keyboard shortcuts
- Cross-platform: Works on any OS that supports USB keyboards
- Content script: Runs on Google Meet pages
- DOM manipulation: Finds and clicks Meet interface buttons
- Mutation observer: Handles dynamic content changes
Feel free to submit issues and enhancement requests!
MIT License - see original Stream Deck project for inspiration.
- This project started as an original idea - during research I discovered the Stream Deck project and drew inspiration from it
- Google Meet button selectors and DOM interaction patterns inspired by the Stream Deck Google Meet project
- Thanks to Pimoroni for the excellent Keybow 2040 hardware
- CircuitPython community for excellent documentation