¿Alguna vez quiso tener un agente de IA como mascota de escritorio? Un tutorial del blog de desarrolladores de Espressif propone justamente eso: convertir la placa ESP-VoCat en un pequeño compañero físico para OpenCode. El dispositivo se instala en el escritorio, muestra lo que está haciendo el agente, despliega las solicitudes de permiso y permite aprobarlas o rechazarlas con una sola pulsación de botón.
La ESP-VoCat es un kit de desarrollo basado en el módulo ESP32-S3, con una pantalla táctil circular y entrada de un solo botón. Esa combinación calza bien con un compañero liviano: la pantalla muestra el estado actual de OpenCode o un aviso compacto de permiso, mientras el botón agrega un paso explícito de aprobación física.
¿Qué hace exactamente el compañero?

- Muestra actualizaciones de estado de OpenCode como busy (ocupado), idle (inactivo) y retry (reintento) en la ESP-VoCat.
- Despliega las solicitudes de permiso en la pantalla de la placa.
- Devuelve decisiones
once(permitir una vez) oreject(rechazar) a OpenCode desde el botón del dispositivo. - De forma opcional, refleja la actividad con un indicador de luz de señal, mientras las respuestas de permiso siguen en la interfaz de texto de OpenCode.
¿Cómo viajan los datos entre el PC y la placa?

BLE UART es la capa de transporte que hace simple esta implementación. En la estación de trabajo, OpenCode habla con un plugin de compañero, que reenvía los eventos de sesión y de permiso a un demonio ESP-BLE-UART por HTTP local. Ese demonio mantiene abierta la conexión Bluetooth LE e intercambia los mensajes sobre el enlace BLE UART. En el dispositivo, el firmware de la ESP-VoCat traduce esos mensajes en gestos y texto de aviso, y envía de vuelta las decisiones once o reject por el mismo enlace.
El recorrido de un permiso es así: OpenCode avisa que necesita autorización, el plugin lo convierte en una petición HTTP, el demonio la reenvía por BLE UART a la ESP-VoCat, la placa muestra el aviso en pantalla, el usuario presiona el botón para permitir o rechazar, y la respuesta vuelve por la misma cadena hasta OpenCode.
Requisitos previos
Se necesita un equipo de escritorio o portátil con Linux, macOS o Windows (los teléfonos y tablets no están soportados), con adaptador Bluetooth y permisos de escaneo y conexión. Hay que instalar ESP-IDF release/v5.5 y exportar el entorno, una sola instalación cubre todo el tutorial. Para armar el compañero también hacen falta una placa ESP-VoCat basada en ESP32-S3, el ejemplo ble_uart_service de la esp-iot-solution para el firmware, las dependencias Python del puente ESP-BLE-UART y OpenCode instalado.
Parte 1: comprobar el enlace BLE UART
Antes de que la ESP-VoCat actúe como compañero, el host debe poder mover bytes hacia y desde el dispositivo de forma confiable. Bluetooth LE no tiene un periférico UART real en el sentido clásico de un puerto serie: un servicio BLE UART es una convención GATT donde una característica sirve como canal de recepción del host al dispositivo y otra como canal de transmisión inverso. El Echo Server del ejemplo ble_uart_service usa UUID al estilo del Nordic UART Service y devuelve por notificaciones los bytes recibidos, lo que sirve para verificar la ruta desde la consola del host.
El primer paso es compilar y flashear ese Echo Server en la placa:
cd $IDF_PATH/examples/bluetooth/ble_uart_service
idf.py set-target esp32s3
idf.py build flash monitorCon el monitor abierto, el firmware anuncia su dirección MAC Bluetooth y un nombre del tipo BleUart-XXXX. Al conectarse el computador, se registra una clave de emparejamiento de seis dígitos que hay que ingresar en el diálogo Bluetooth del sistema. Desde una segunda terminal, las herramientas del puente (python main.py list-devices, connection-check y console) permiten descubrir la placa por su MAC (en Linux y Windows) o por un UUID de CoreBluetooth (en macOS), confirmar la conexión y, finalmente, enviar texto que el dispositivo devuelve como eco. Cuando ese eco funciona, el transporte para el compañero está listo.
Parte 2: convertir la ESP-VoCat en el compañero de OpenCode
La primera parte solo verificó el transporte. En la segunda, el dispositivo empieza a hablar el protocolo de compañero que usa el plugin de OpenCode. El montaje tiene cuatro piezas: OpenCode emite eventos de sesión y de permiso, el plugin de compañero los traduce a llamadas HTTP locales, el demonio ESP-BLE-UART mantiene abierta la conexión Bluetooth LE, y el firmware de la ESP-VoCat dibuja la interfaz del compañero y envía de vuelta las decisiones del botón por BLE UART. Existe además una tercera parte opcional que reemplaza la pantalla y el botón por una placa indicadora de luz, usando el mismo transporte.
Para quien quiera reproducirlo en Chile o LatAm, el kit ESP-VoCat se apoya en el ESP32-S3, uno de los módulos más difundidos entre makers de la región y disponible por menos de USD 30 en varios distribuidores, lo que hace del proyecto una puerta de entrada barata a los agentes de IA con control físico.




