OpenMicro convierte controles físicos conectados a un Arduino Uno R3 en acciones y estados de Codex en el ordenador.
El primer flujo útil ya permite usar el pulsador conectado entre D2 y GND como tecla de voz:
mantener pulsado
↓
Arduino emite BUTTON PRESS
↓
el puente inicia Dictation en Codex
↓
el micrófono del ordenador captura la voz
↓
soltar → BUTTON RELEASE → Codex detiene y transcribe
El Arduino no captura audio. Igual que el Codex Micro original, solo actúa como control físico; Codex usa el micrófono del ordenador.
El segundo pulsador, conectado entre D3 y GND, envía la transcripción con Enter. El flujo completo queda así: mantén D2 para hablar, suéltalo y espera a que aparezca el texto; después pulsa D3 para enviarlo. Por seguridad, D3 se ignora mientras D2 mantenga activo el dictado.
El montaje incorpora ahora un LED RGB de cátodo común con sus canales en los pines PWM D9, D10 y D11, cada uno protegido por una resistencia de 220 Ω. El puente lo usa como indicador periférico:
- apagado antes de conectar y al cerrar limpiamente el puente;
- blanco cuando el puente está conectado y no hay una acción activa;
- azul fijo mientras se mantiene el dictado;
- azul pulsante mientras Codex prepara o procesa el resultado;
- destello verde al enviar una acción;
- rojo si falla una acción del puente.
El protocolo ya contempla también verde estable para una tarea completada y ámbar cuando hace falta una respuesta. Esos dos estados no se activan automáticamente todavía, porque el puente actual solo consume los eventos del Arduino y aún no dispone de una fuente de estado de tareas de Codex.
Un potenciómetro de 10 kΩ conectado a A0 selecciona el esfuerzo de razonamiento
del siguiente turno en cuatro zonas: LOW, MEDIUM, HIGH y XHIGH. El
firmware filtra el ruido del ADC y aplica histéresis en los límites para que una
pequeña oscilación eléctrica no cambie repetidamente de nivel. El puente lleva
el selector de Codex al mínimo y avanza hasta la zona elegida, por lo que la
posición es absoluta y no depende del nivel anterior. Si se gira mientras D2
mantiene el dictado, el cambio se aplaza hasta soltar el botón. La lectura y el
cambio entre zonas ya se han comprobado con el potenciómetro físico conectado
al Uno R3.
Requisitos:
- Windows o macOS y la aplicación de escritorio de Codex abierta.
- El Arduino conectado por USB con
OpenMicro.inocargado. - Un chat de Codex abierto para recibir el texto dictado.
- Permiso de micrófono concedido a Codex.
- En Codex → Settings → General → Dictation, el atajo
Hold-to-dictate hotkey configurado como
Ctrl+Shift+D. - En Codex → Settings → Keyboard Shortcuts:
Decrease reasoning effort configurado como
Ctrl+Alt+,e Increase reasoning effort comoCtrl+Alt+.. - En los controles de modelo de Codex,
LOW,MEDIUM,HIGHyXHIGHdisponibles en ese orden. Se pueden conservar niveles adicionales por encima deXHIGH, pero no niveles adicionales por debajo deLOW. - Rust instalado únicamente si quieres recompilar el puente.
Para recompilar el ejecutable desde el código fuente:
cargo build --release --manifest-path host/Cargo.tomlEl binario preparado para usar está en la raíz del repositorio:
OpenMicro.exe. Conecta el Arduino y haz doble clic. El propio programa intenta
detectarlo y mantiene la ventana abierta si encuentra un error, sin necesitar
un lanzador adicional.
También puedes ejecutarlo desde una terminal para consultar o indicar el puerto:
.\OpenMicro.exe --list-ports
.\OpenMicro.exe --port COM5./host/target/release/OpenMicro --list-ports
./host/target/release/OpenMicro --port /dev/cu.usbmodem1101Los nombres son ejemplos: usa el puerto mostrado por --list-ports. Si solo se
detecta un Arduino o adaptador USB serie, puedes omitir --port y el puente
intentará elegirlo automáticamente. Déjalo ejecutándose:
- Mantén pulsado el botón de D2 y habla.
- Suéltalo para detener la grabación.
- Espera a que Codex deje el texto transcrito en el compositor.
- Revisa o corrige el texto.
- Ajusta el potenciómetro si quieres cambiar el razonamiento del siguiente turno.
- Pulsa el botón de D3 para enviarlo.
El puente activa la ventana de Codex antes de enviar su comando de dictado. En
Windows lo hace mediante la API del sistema; en macOS usa Launch Services. No
invoca PowerShell ni AppleScript. Si el sistema no permite activar la ventana
pero Codex ya está enfocado, usa --no-activate-codex.
En Windows, Codex crea también ventanas auxiliares para el indicador flotante de dictado. El puente distingue esas ventanas de la principal seleccionando la ventana visible de Codex con mayor superficie y comprueba que haya recibido el foco antes de iniciar la grabación. Para superar la protección de Windows contra cambios de foco iniciados por procesos en segundo plano, enlaza temporalmente las colas de entrada implicadas mediante la API nativa y las separa inmediatamente después.
El puente mantiene físicamente pulsadas Ctrl, Shift y D durante todo el
tiempo que permanece pulsado el botón. Al soltarlo libera las tres teclas. Esto
usa el atajo global Hold-to-dictate, no el comando local Dictation que
solo inicia una grabación.
Cada mensaje REASONING ... activa primero ocho veces Decrease reasoning
effort, suficiente para saturar el selector en su mínimo, y después activa
Increase reasoning effort de cero a tres veces. Es una adaptación de
OpenMicro basada en comandos configurables de la aplicación, no el protocolo
privado del Codex Micro comercial. El nivel se aplica al compositor y, por
tanto, al siguiente turno; no modifica un turno que ya esté ejecutándose. La
disponibilidad final de cada nivel depende del modelo elegido en Codex.
Detén el puente con Ctrl+C. No abras simultáneamente el monitor serie del
Arduino IDE: un puerto serie solo puede pertenecer a un programa a la vez.
La primera vez, el sistema puede pedir permisos. Si no aparece la grabación, comprueba:
- Codex → Settings → General → Dictation → Hold-to-dictate hotkey:
asígnale
Ctrl+Shift+D. Es un ajuste distinto del atajo local Keyboard Shortcuts → Dictation, aunque ambos puedan mostrar la misma combinación. - Codex debe tener permiso para usar el micrófono.
- En macOS, el terminal o el ejecutable necesita permiso en Ajustes del Sistema → Privacidad y seguridad → Accesibilidad para generar el atajo.
- El puerto y la velocidad: el firmware usa
115200baudios. - Para comprobar el potenciómetro sin el puente, abre el monitor serie a
115200, gíralo de tope a tope y busca líneas[DEBUG] POT raw=... filtered=... level=....rawdebería recorrer aproximadamente0–1023.
Las pruebas no abren Codex, no usan el micrófono y no necesitan el Arduino:
cargo test --manifest-path host/Cargo.toml
cargo run --manifest-path host/Cargo.toml -- --dry-run --input tests/voice-bridge-input.txtComprueban que los mensajes serie duplicados o fuera de orden no generen atajos
adicionales, que los niveles repetidos no se vuelvan a aplicar y que un cambio
de razonamiento durante el dictado se aplace correctamente. --input solo se
admite junto con --dry-run, para que un archivo de prueba nunca pueda pulsar
teclas reales por accidente.
La aplicación ofrece un comando local Dictation y un atajo global configurable Hold-to-dictate. OpenMicro usa el segundo: mantener para grabar y soltar para transcribir. El hardware Codex Micro comercial dispone además de una integración privada de dispositivo. El puente está escrito en Rust y usa el mismo código de protocolo en Windows y macOS; solo la activación de la ventana es específica de cada sistema. El segundo botón envía Enter solo cuando el usuario lo pulsa, por lo que la transcripción puede revisarse antes de iniciar una tarea.
Fuentes oficiales:
Consulta hardware/README.md para el cableado, el circuito de SimulIDE y la actualización del firmware simulado.