Go to file
2026-03-24 23:25:01 -03:00
.claude feat: s3 e ctrl+alt+del 2026-03-24 23:25:01 -03:00
Properties/PublishProfiles fix: ajustes 2026-03-22 18:59:18 -03:00
S3/KVMote_ESP32S3 feat: s3 e ctrl+alt+del 2026-03-24 23:25:01 -03:00
Transport feat: s3 e ctrl+alt+del 2026-03-24 23:25:01 -03:00
Uno feat: s3 e ctrl+alt+del 2026-03-24 23:25:01 -03:00
.gitignore Add KVMote source — C#, Arduino sketch and .gitignore 2026-03-22 15:09:07 -03:00
CLAUDE.md fix: ajustes 2026-03-22 18:59:18 -03:00
conhecimento.md fix: ajustes 2026-03-22 18:59:18 -03:00
KVMote.csproj feat: s3 e ctrl+alt+del 2026-03-24 23:25:01 -03:00
KVMote.sln Add KVMote source — C#, Arduino sketch and .gitignore 2026-03-22 15:09:07 -03:00
Principal.cs feat: s3 e ctrl+alt+del 2026-03-24 23:25:01 -03:00
Principal.Designer.cs feat: s3 e ctrl+alt+del 2026-03-24 23:25:01 -03:00
Principal.resx Add KVMote source — C#, Arduino sketch and .gitignore 2026-03-22 15:09:07 -03:00
Program.cs fix: ajustes 2026-03-22 18:59:18 -03:00
README.md README: add dotnet publish command with ClickOnce warning 2026-03-22 15:50:20 -03:00

KVMote

KVM over Bluetooth — controle teclado e mouse de um PC remoto usando um Arduino Leonardo como ponte HID, sem instalar nada no PC cliente.


O que é

KVMote é um software KVM (Keyboard, Video, Mouse) que funciona de forma semelhante ao Barrier e InputLeap, mas com uma diferença fundamental: o PC cliente não precisa de nenhum software instalado.

A comunicação acontece via Bluetooth Serial (HC-06) até um Arduino Leonardo, que se apresenta ao PC cliente como um teclado e mouse USB padrão (HID). Para o Windows do cliente, é como se um teclado e mouse físicos tivessem sido conectados.

┌─────────────────┐     Bluetooth SPP      ┌────────────┐    USB HID     ┌──────────────┐
│   PC Host       │ ──────────────────────► │  HC-06     │ ─────────────► │  PC Cliente  │
│  KVMote.exe     │     (virtual COM)       │  Arduino   │  (teclado +   │  (sem sw)    │
│  teclado+mouse  │                         │  Leonardo  │   mouse USB)  │              │
└─────────────────┘                         └────────────┘                └──────────────┘

Por que usar

  • Zero instalação no PC cliente — o Arduino é reconhecido como HID nativo
  • Funciona em ambientes corporativos — sem software, sem porta de rede, sem VPN
  • Sem driver especial — Windows, Linux e macOS reconhecem HID automaticamente
  • Clipboard de texto — Ctrl+C no host, Ctrl+V envia o texto digitado ao cliente
  • Suporte a layouts — US Internacional e PT-BR ABNT2

Hardware necessário

Componente Detalhes
Arduino Leonardo ATmega32U4 com suporte a USB HID nativo
Módulo HC-06 Bluetooth SPP escravo, configurado para 9600 baud
LED RGB (ânodo comum ou cátodo comum) Opcional, mas recomendado para feedback visual
PC Host Windows 10/11, com Bluetooth
PC Cliente Qualquer sistema operacional

Conexão do HC-06 ao Arduino Leonardo

HC-06 TX  →  Arduino RX1 (pino 0)
HC-06 RX  →  Arduino TX1 (pino 1)  [use divisor de tensão: 5V→3.3V]
HC-06 VCC →  Arduino 5V
HC-06 GND →  Arduino GND

LED RGB (pinos PWM)

R → pino 5
G → pino 6
B → pino 9

Significado das cores:

Cor Estado
Azul Conectado, aguardando (modo host)
Laranja Modo cliente ativo (mouse no PC remoto)
Flash verde Ação executada / voltou ao host
Flash ciano PONG recebido (heartbeat OK)

Software necessário (PC Host)

  • Windows 10/11 (x64)
  • .NET 8 Desktop Runtime — ou use o executável self-contained
  • Arduino IDE com as bibliotecas Keyboard e Mouse (inclusas no suporte ao Leonardo)

Como configurar

1. Arduino

  1. Abra KVMote.ino na Arduino IDE
  2. Selecione a placa Arduino Leonardo
  3. Faça o upload

2. HC-06 (se necessário)

O HC-06 já vem configurado para 9600 baud de fábrica. Se você alterou, edite a constante no sketch:

#define BAUD_HC06 9600  // ← altere se necessário

3. Par Bluetooth

  1. Ligue o Arduino com o HC-06
  2. No PC Host: Configurações → Bluetooth → Adicionar dispositivo → HC-06
  3. Senha padrão: 1234
  4. Anote a porta COM criada (ex: COM5)

4. KVMote.exe

  1. Compile o projeto ou use o executável publicado
  2. Execute KVMote.exe no PC Host
  3. A porta COM é detectada automaticamente via handshake PONG
  4. Selecione a posição do PC cliente (Esquerda, Direita, Acima, Abaixo)
  5. Selecione o layout do teclado do cliente
  6. Clique em Conectar

Como usar

Controle de mouse e teclado

  • Leve o cursor até a borda da tela na direção do PC cliente
  • O cursor desaparece e o modo cliente é ativado (LED laranja no Arduino)
  • Tudo que você digita e move o mouse vai para o PC cliente
  • Para voltar ao host: mova o mouse na direção oposta (~15px além da borda virtual)

Clipboard de texto

  1. Selecione e copie texto no host (Ctrl+C) — máximo 300 caracteres
  2. Mude para o modo cliente (leve o mouse até a borda)
  3. Pressione Ctrl+V (ou Shift+Insert) — o texto é digitado caractere a caractere no cliente

Nota: O clipboard é enviado como digitação, não como colagem nativa. Caracteres não-ASCII (acentos) e alguns símbolos dependem do layout configurado.


Protocolo serial (binário)

Comando Bytes Descrição
M dx dy 3 Movimento do mouse (int8 cada)
W delta 2 Roda do mouse (int8)
K char 2 Digitar caractere (Keyboard.write)
P key 2 Pressionar tecla (Keyboard.press)
U key 2 Soltar tecla (Keyboard.release)
A 1 Soltar todas as teclas
C L|R 2 Clique do mouse
D L|R 2 Pressionar botão do mouse
E L|R 2 Soltar botão do mouse
O 1 LED laranja (entrou no cliente)
H 1 LED azul + flash verde (voltou ao host)
~ 1 Ping → Arduino responde [PONG]

Gerar executável portable

⚠️ Não use o "Publicar" do Visual Studio — ele gera um setup ClickOnce com vários arquivos. Use o terminal (cmd ou PowerShell) na pasta do projeto:

# Self-contained (~70MB) — roda sem .NET instalado, ideal para PCs externos
dotnet publish -c Release -r win-x64 --self-contained true -p:PublishSingleFile=true -p:IncludeNativeLibrariesForSelfExtract=true

# Dependente do runtime (~2MB) — requer .NET 8 Desktop Runtime instalado no PC
dotnet publish -c Release -r win-x64 --self-contained false -p:PublishSingleFile=true

O KVMote.exe gerado fica em publish\ — é só copiar e executar, sem instalação.


Limitações conhecidas

  • Canal único (9600 baud): durante o envio de clipboard, o mouse fica momentaneamente travado
  • Caracteres não-ASCII: acentos (é, ã, ç) não são suportados no clipboard — são ignorados
  • Monitor único: suporte a múltiplos monitores não implementado
  • PT-BR: alguns símbolos (/, ?, \, @) não podem ser enviados via clipboard no layout PT-BR ABNT2

Roadmap

  • Suporte a múltiplos monitores
  • Layout US-International como destino
  • Mapeamento completo PT-BR (símbolos restantes via HID raw)
  • Aplicativo separado de clipboard (OneDrive / TCP) para textos longos e imagens

Licença

MIT — use, modifique e distribua livremente.