3. Proposta de reprodução com ESP32
3.1 Descrição conceitual
A reprodução proposta é um macropad split de atalhos programáveis, que reaproveita a arquitetura do Corne (duas metades, matriz de teclas com diodos e comunicação serial entre as metades) em um MVP construído com ESP32 WROOM e firmware próprio em C (ESP-IDF). Cada tecla dispara um atalho ou macro no PC, útil para acelerar fluxos repetitivos, como atalhos de editor, navegação e comandos de terminal.
A comunicação é inteiramente serial (full serial):
metade escrava --(serial / UART)--> metade mestre --(serial / USB)--> PC (daemon)
Por que ESP32 WROOM? O módulo do kit da disciplina oferece:
- GPIOs suficientes para a matriz de botões;
- UART nativa para o link entre as metades (sobre cabo TRRS);
- conexão serial com o PC pelo chip USB-serial do DevKit (CP2102 / CH340), que cria uma porta serial virtual;
- suporte ao ESP-IDF, permitindo escrever todo o firmware em C.
Conexão com o PC. O DevKit liga ao PC por um cabo USB comum (o mesmo usado para gravar o firmware). Esse cabo alimenta a placa e, através do chip USB-serial, expõe uma porta serial (/dev/ttyUSB0 no Linux). A metade mestre envia os eventos de tecla como mensagens seriais simples (por exemplo, KEY:SEND). Um daemon escrito em C no PC lê a porta serial com termios e injeta o atalho correspondente usando o subsistema uinput do kernel Linux, que cria um teclado virtual e funciona tanto em X11 quanto em Wayland.
Diferença para o produto original. O Corne usa USB HID (reconhecido como teclado, sem software extra). A nossa abordagem troca o HID por serial + daemon: o firmware embarcado fica mais simples (sem pilha USB-HID nem BLE), ao custo de um pequeno programa rodando no PC.
3.2 Mapeamento Corne → ESP32
| Função do Corne | Componente original | No MVP com ESP32 |
|---|---|---|
| Teclas | Chaves mecânicas MX | Botões em matriz |
| Anti-ghosting | Diodo 1N4148 | Diodo 1N4148 (mantido) |
| Controle central | ATmega32U4 / nRF52840 | ESP32 WROOM-32 |
| Link entre metades | UART via TRRS / BLE | UART via TRRS (serial) |
| Interface com o PC | USB HID / BLE HID | Serial (chip USB-serial) + daemon |
| Firmware | QMK / ZMK | Firmware próprio em C (ESP-IDF) |
3.3 Componentes do MVP e a lista da disciplina
Todos os componentes da reprodução proposta correspondem a itens da Lista de Sensores e Atuadores Disponíveis da disciplina. As chaves mecânicas do Corne original são representadas, no MVP, por botões (eletricamente idênticos, contato momentâneo), e os demais componentes têm correspondência direta:
| Componente do Corne | Item da lista da disciplina |
|---|---|
| Chave mecânica (tecla) | Botão |
Assim, o MVP é construído inteiramente com componentes simples disponíveis no kit, mantendo a fidelidade funcional ao produto original.
3.4 Diagrama de blocos do MVP
┌───────────────────────────────────────────────────────────────┐
│ METADE ESQUERDA (escrava) │
│ │
│ [B1][B2][B3] Botões em matriz 2×3 │
│ [B4][B5][B6] + diodos 1N4148 │
│ │ │
│ ┌────▼────────────────────┐ │
│ │ ESP32 WROOM-32 │ │
│ │ Varredura de matriz │ │
│ │ Debounce por software │ │
│ │ UART TX ──────────────┼──── TX ─────┐ │
│ └─────────────────────────┘ │ TRRS │
└──────────────────────────────────────────┼────────────────────┘
│
┌──────────────────────────────────────────┼────────────────────┐
│ METADE DIREITA (mestre) │ │
│ │ │
│ [B7][B8][B9] Botões em matriz 2×3 │ │
│ [B10][B11][B12] + diodos 1N4148 │ │
│ │ │ │
│ ┌────▼────────────────────┐ │ │
│ │ ESP32 WROOM-32 │ │ │
│ │ Varredura de matriz │ │ │
│ │ UART1 RX ◄───────────┼──── RX ─────┘ │
│ │ Agregação de eventos │ │
│ │ Protocolo serial │ │
│ │ UART0 TX (USB-serial) ├── cabo USB (CP2102/CH340) ─► PC │
│ │ │ porta serial virtual │
│ └─────────────────────────┘ │
└───────────────────────────────────────────────────────────────┘
│
┌────────────▼──────────────┐
│ PC — daemon em C │
│ termios (lê a serial) │
│ uinput (injeta atalho) │
└───────────────────────────┘
3.5 Layout de teclas proposto
O layout abaixo é um exemplo voltado para um fluxo de terminal e edição; como o firmware é próprio, qualquer tecla é totalmente remapeável.
ESQUERDA (controle) DIREITA (ação)
┌──────┬──────┬──────┐ ┌──────┬──────┬──────┐
│ Esc │ Layer│ Novo │ │ Send │ Aceit│ Rejei│
│ │ │ │ │Enter │ │ │
├──────┼──────┼──────┤ ├──────┼──────┼──────┤
│ Up │ Down │ Alt │ │ Copy │ Clear│ ? │
└──────┴──────┴──────┘ └──────┴──────┴──────┘
Cada tecla envia uma mensagem serial (KEY:xxx) para o daemon no PC, que injeta o atalho correspondente.
3.6 Limitações e desafios
| Limitação | Detalhe |
|---|---|
| Sem USB HID nativo | O ESP32 WROOM-32 não tem controlador USB; a comunicação com o PC é serial, não plug-and-play |
| Daemon obrigatório no PC | A abordagem serial exige um programa em C lendo a porta e injetando os atalhos |
| Firmware do zero | Sem QMK/ZMK no ESP32; é preciso reimplementar matriz, debounce e o protocolo serial |
| Sincronização mestre/escravo | O protocolo serial entre as metades precisa tratar latência e erros |
| Dependência de driver | O chip USB-serial (CP2102/CH340) pode exigir driver no Windows; Linux e macOS têm suporte nativo |
| Alimentação do escravo | A corrente disponível pela linha VCC do TRRS é limitada |
