Open-source ESP-IDF firmware that turns an ESP32-S3-AUDIN Rev1.1 board into a USB push-to-talk microphone and physical Siri button for macOS. It uses USB Audio Class (UAC) for microphone audio and USB HID keyboard events to open Siri, with no desktop helper app required.
- 16 kHz, 16-bit mono USB microphone
- Push-to-talk: hold the left button, or double-tap it to keep the microphone open until the next tap
- Siri control: the middle button sends F12 over USB HID and unmutes the microphone
- Automatic Siri session detection and microphone mute when Siri closes
- RGB status LED: blue whenever the microphone is unmuted, green when a Siri session ends, then off
- Entirely device-side operation without a macOS companion app or Accessibility permission
The firmware targets the ESP32-S3-AUDIN Rev1.1 audio development board. It uses:
- ESP32-S3 with native USB OTG
- ES8388 audio codec and the board's two electret microphones
- Built-in WS2812-compatible RGB LED
- On-board push buttons for push-to-talk and Siri activation
The device appears to macOS as a composite USB Audio and USB HID device. The firmware is written in C++20 using ESP-IDF, TinyUSB, I2S audio capture, and the Espressif LED Strip component.
The middle button sends the F12 key over USB HID. On macOS, Karabiner-Elements can map F12 from this device to Fn+F12 and hold it for 800 ms to start Siri voice input.
Add the following rule under Complex Modifications in Karabiner-Elements:
{
"description": "Macro keyboard F12 starts Siri voice",
"manipulators": [
{
"conditions": [
{
"identifiers": [
{
"product_id": 16386,
"vendor_id": 12346
}
],
"type": "device_if"
}
],
"from": {
"key_code": "f12",
"modifiers": { "optional": ["any"] }
},
"to": [
{
"hold_down_milliseconds": 800,
"key_code": "f12",
"modifiers": ["fn"],
"repeat": false
}
],
"type": "basic"
}
]
}Requires ESP-IDF 5.5 or newer.
cd firmware
idf.py set-target esp32s3
idf.py buildLicensed under the MIT License.
