Você já notou como, no mundo louco da tecnologia, sempre há um pequeno projeto peculiar tentando resolver um problema tão nicho que seus apenas concorrentes podem ser uma chave de fenda canhota e um despertador de auto-escoamento?
Uso dois computadores diferentes no meu fluxo de trabalho diário e compartilho um único par de teclado/mouse entre eles. Tentar várias caixas de comutação USB encontradas na Amazon me fez perceber que todas sofrem de problemas semelhantes - leva um tempo para mudar, o processo é bastante desajeitado ao tentar encontrar o botão e, francamente, isso simplesmente não melhora com o tempo.
Tudo o que eu queria era uma maneira de usar um atalho de teclado para alternar rapidamente as saídas, emparelhadas com a capacidade de fazer o mesmo movendo magicamente o ponteiro do mouse entre os monitores. Este projeto permite que você faça as duas coisas, mesmo que seus computadores executem diferentes sistemas operacionais!
O dispositivo atua como um intermediário entre o teclado/mouse e o computador, estabelecendo e mantendo conexões com os dois computadores ao mesmo tempo. Em seguida, escolhe para onde encaminhar seu mouse e pressionar as teclas, dependendo da sua seleção. O teclado segue o mouse e vice -versa, então apenas arrastar o mouse para o outro desktop mudará os dois.
Para levar o cursor do mouse para pular magicamente, o descritor do relatório HID do mouse foi alterado para usar coordenadas absolutas e, em seguida, os relatórios do mouse (que ainda vêm em movimentos relativos) se acumulam internamente, mantendo a contagem precisa na posição.
Quando você tenta deixar a área do monitor na direção do outro monitor, ele mantém a coordenada Y e troca o X máximo para um X mínimo, depois vira as saídas. Isso garante que o cursor apareça perfeitamente na mesma altura no outro monitor, aumentando a percepção de uma transição suave.

Arrastar o mouse de Mac para Linux alterna automaticamente as saídas.
O interruptor real acontece no exato momento em que uma flecha para de se mover e a outra começa.
Atuando como um host USB e consultando seu teclado periodicamente, ele procura uma tecla de atalho pré -configurada no relatório HID (geralmente o Ctrl + Caps trava para mim). Quando encontrado, encaminhará todos os caracteres subsequentes para a outra saída.
Para ter uma indicação visual qual saída você está usando a qualquer momento, você pode redirecionar os LEDs do teclado e solicitar que eles forneçam o feedback necessário.
Ele também se lembra do estado de LED para cada computador, para que você possa pegar exatamente como o deixou.

Para evitar problemas de incompatibilidade de versão e caminho relatado ao criar, além de evitar que você precise baixar um SDK grande, o projeto agora agrupa o mínimo de Pico SDK e o TinyUSB.
Em um sistema Debian/Ubuntu, instale -os:
sudo apt install cmake gcc-arm-none-eabi libnewlib-arm-none-eabi build-essential
Você deve ser capaz de construir correndo:
cmake -S . -B build
cmake --build build
Além disso, para reconstruir a interface do usuário da web, verifique o webconfig/ e execute ./render.py , você precisará de Jinja2 instalado.
Para reconstruir o disco, verifique o disco/ pasta e execute ./create.sh , ajuste o seu sistema, se necessário. Você precisará de dosfstools (para fornecer mkdosfs),
Como alternativa, você pode usar as imagens pré-construídas. Desde a versão 0.6, existe apenas uma única imagem universal. Você precisa do arquivo .UF2 que você simplesmente copia para o dispositivo de uma das seguintes maneiras:
Opção 1 - (firmware 0.6 e posterior) Coloque o dispositivo no "modo de configuração", pressionando simultaneamente Ctrl + Shift Direito + C + O. Dispositivo O teclado está conectado à reinicialização e se transforma em uma unidade USB chamada "Deskhop". Tudo o que você precisa fazer é copiar o arquivo .uf2 para ele. Depois que a imagem for verificada, o dispositivo piscará e reiniciará e prossiga para atualizar a outra placa. Durante esta operação, o LED piscará. Uma vez feito, ele escreverá flash e reiniciará, preenchendo a operação.
Nota - Esta não é uma unidade USB genérica real, você não pode usá -la para copiar arquivos para ele.
Opção 2 - Usando o ROM Bootloader - Mantenha o botão de bordo enquanto conecta cada pico e copie o UF2 à unidade flash que aparece. Imagens depois de 0,6 Suporte segurando o botão sem precisar mexer na fonte de alimentação, mas o botão "Hold enquanto conecta" deve sempre funcionar, independentemente do estado do dispositivo.
Já tentou mover o slider de vídeo YT para uma posição específica, mas o mouse se move muito saltado e, de repente, você está movendo sua mão com super atência como se estivesse 5 e jogando "Operação" de novo?
Pressione Ctrl + Alt à direita para alternar um modo de camundongo lento. O ponteiro do mouse diminui consideravelmente, permitindo que você faça o trabalho de precisão mais refinado e ainda faça com que seu mouse se movesse normalmente pressionando rapidamente as mesmas teclas novamente.
Se você quiser se trancar em uma tela, use RIGHT CTRL + K . Isso garantirá que você não deixe acidentalmente sua tela atual. Para desligar, pressione a mesma combinação de teclas novamente.
Você pode bloquear os dois computadores de uma só vez usando RIGHT CTRL + L . Para fazer uso desse recurso, primeiro configure o sistema operacional para cada saída na configuração (pois os atalhos são diferentes).
Se você está jogando, há uma chance de seu jogo não funcionar corretamente com o modo absoluto do mouse. Para resolver esse problema, um modo de jogo é introduzido, alternado pelo LEFT CTRL + RIGHT SHIFT + G Quando no modo de jogo, você está bloqueado na tela atual e seu mouse se comporta como um mouse relativo padrão. Isso também deve corrigir vários problemas de máquinas virtuais, atualmente sistemas operacionais não suportados etc.
Supostamente incorporado para impedir que o computador entre em espera, mas a verdade seja dita - é divertido de assistir. Por padrão , fará o seu ponteiro de mouse saltar pela tela como uma bola de pong. Quando ativado, ele é ativado após um período de inatividade definido no cabeçalho da configuração do usuário e desliga automaticamente assim que você enviar qualquer saída para essa tela.
Exemplo de uso em potencial - tenho uma doca USB de buggy que não retomará o vídeo do modo de espera, portanto, não permitir que o sono possa ser uma solução alternativa.
O circuito é baseado em duas placas de pico de Raspberry Pi, escolhidas porque são baratas (4,10 € / pc), podem ser soldadas à mão e a maioria dos fornecedores os possui em estoque.
Os picos são conectados usando o UART e separados por um isolador digital de canal duplo ADUM1201 (~ 3 €) ou um Ti ISO7721DR muito mais barato, mais rápido, mais rápido e compatível com pinos (~ 1,5 €), que é a escolha preferida.
Embora eles normalmente não tenham suporte para USB duplo, graças a um projeto incrível em que o USB é implementado usando a assistência programável de IO encontrada no RP2040, há suporte para atuar como host e dispositivo USB.
Para manter as coisas o mais simples possível para construções de bricolage, os traços foram mantidos de um lado e o número de peças mantidas no mínimo.

As linhas diferenciais USB D+/D devem ser idênticas em comprimento, mas são ligeiramente assimétricas de propósito para combater a diferença de comprimento no GPIO correspondente traça o Pico PCB, para que os comprimentos gerais devem corresponder.
O ZD (impedância diferencial) é direcionado como 90 ohm (conseguiu ~ 107, perto o suficiente :)).
A espessura foi projetada para ser de 1,6 mm para que o Snap-Fit funcione conforme o esperado.
Existem 2 versões do PCB (não há grandes diferenças para o usuário). Original (v1.0) é mais fácil de soldar e montar, enquanto a v1.1 oferece algumas atualizações como:
Esta versão é um pouco mais difícil de soldar manualmente devido aos pequenos resistores supressores de tensão transitória e 0805, mas é totalmente factível. Em teoria, as TVs podem ser omitidas (não recomendadas) e ainda funcionarão.
Próxima - A placa com RP2040, que não precisa de picos, é menor e mais conveniente.
Como não sou muito bom com o 3D, o caso é simples e básico, mas faz o trabalho. Deve ser fácil de imprimir, usa ~ 33g de filamento e leva algumas horas.
Os movimentos horizontais da PCB são combatidos por pinos deslizando através de orifícios e movimentos verticais por terminais de encaixe nas laterais - não é necessário parafusos. O caso recebeu uma ligeira redesenho para apresentar o logotipo e dois terminais adicionais de encaixe, por isso fornece uma vedação melhor.
Os conectores micro USB em ambas as placas são compensados do lado do gabinete, portanto, os orifícios ligeiramente maiores devem permitir que os cabos estejam chegando.
A tampa é de um design de encaixe, com um slot para abertura da chave de fenda. As marcações no topo estão recuadas e podem ser finalizadas com os giz de cera para dar um melhor contraste (ou simplesmente deixar como está).

| Componente | Qty | Preço unitário / € | Preço / € |
|---|---|---|---|
| Raspberry Pi Pico | 2 | 4.10 | 8.20 |
| ADUM1201BRZ | 1 | 2.59 | 2.59 |
| Cap 1206 Smd 100nf | 2 | 0,09 | 0,18 |
| USB-A PCB Conn. | 2 | 0,20 | 0,40 |
| Cabeçalhos 2,54 1x03 | 2 | 0,08 | 0,16 |
| Total | 11.53 |
O Ti ISO7721DR pode ser usado em vez do ADUM - é compatível com PIN, muito mais barato e com melhores especificações.
| Componente | Papel | Qty | Preço unitário / € | Preço / € |
|---|---|---|---|---|
| U1, U2 | Raspberry Pi Pico | 2 | 4.10 | 8.20 |
| J1, J4 | USB-A PCB Conn. | 2 | 0,20 | 0,40 |
| U4 | Ti ISO7721DR | 1 | 1.40 | 1.40 |
| ( Ou ADUM1201BRZ) | ||||
| C1, C2 | CAP 0805 SMD 100NF | 2 | 0,09 | 0,18 |
| R1, R2, R3, R4 | Res 0805 SMD 27OHM | 4 | 0,03 | 0,12 |
| U3, U5 | Tpd4e1u06dbvr | 2 | 0,31 | 0,62 |
| C3, C4 | Cap 4.7UF SMD 0805 | 2 | 0,07 | 0,14 |
| J2, J3 | Cabeçalhos 2,54 1x03 | 2 | 0,08 | 0,16 |
| Total | 11.22 |
O conector USB-A pode ser o Molex MX-67643-0910 ou um orçamento mais barato que compartilha as mesmas dimensões.
Etapas adicionais:
Se você tem alguma experiência com a eletrônica, não precisa disso. No entanto, alguns de vocês podem não, e nesse caso este vídeo pode ajudar a guiá -lo durante o processo. Observe que, após a solda, você deve limpar o fluxo do PCB para evitar a corrosão.
O processo padrão para fazer isso é usar álcool isopropílico e uma escova de dentes velha. Mas adivinhe? Não estou colocando minha escova de dentes velha online, então você só terá que improvisar essa parte :)

[Nota] O guia de montagem de vídeo cobre o PCB v1.0. A versão revisada é muito semelhante e o procedimento é basicamente o mesmo.
Config
Left ShiftLeft Ctrl + Right Shift + C + O - insira o modo de configuraçãoRight Shift + F12 + D - Remova a configuração flashRight Shift + F12 + Y - salvar o deslocamento do interruptor da telaUso
Right CTRL + Right ALT - Alterne o modo de mouse mais lentoRight CTRL + K - troca de travas/desbloqueio para desktopRight CTRL + L - bloqueie as duas saídas de uma só vez (defina o sistema operacional de saída antes, consulte os atalhos abaixo)Left ShiftLeft CTRL + Right Shift + G - alterna o modo de jogo (trava na tela, atue como mouse padrão)Left CTRL + Right Shift + S - Ativar protetor de telaLeft CTRL + Right Shift + X - Desativar a telaLeft CTRL + Caps Lock - alterne entre saídasNota: Alguns teclados não enviam os dois turnos ao mesmo tempo, é por isso que o atalho foi alterado - para funcionar para todos. Desculpas pela confusão.
Esta etapa não é necessária, mas pode ser útil se suas telas não estiverem perfeitamente alinhadas ou diferirem em tamanho. O objetivo é que o ponteiro do mouse sai exatamente na mesma altura.

Basta estacionar o mouse na tela maior na altura da tela menor/inferior (ilustrada) e pressionar Right Shift + F12 + Y . O seu LED (e o bloqueio do caps) deve piscar em confirmação.
Repita a borda inferior (se estiver acima da borda da tela maior). Isso será salvo para piscar e deve manter esse valor de calibração a partir de agora.
O Windows e o MAC têm problemas com várias telas e posicionamento absoluto; portanto, são necessárias soluções alternativas (ainda experimentais). Há uma solução alternativa melhor em construção, mas por enquanto você deve definir o sistema operacional para cada saída e número de telas.
Suas telas principais precisam estar nas telas médias e secundárias nas bordas. Para configurar as opções reais, abra a página de configuração da Web para o seu dispositivo.

Começando com o FW 0.6, um modo de configuração aprimorado é introduzido. Para configurar seu dispositivo, siga estas instruções:


P: Por que não simplesmente criar uma boa página da web online, como via, em vez de lidar com essa coisa estranha de unidade USB? R: Carregar JavaScript de um local online aleatório que interage com seus dispositivos de entrada é um risco potencial de segurança. A página da Web de configuração é apenas local e nada é carregado externamente.
P: O cromo no Linux não funciona. R: Você provavelmente precisa ajustar /desenvolver permissões ou criar um arquivo de regras udev correspondente e garantir que seu usuário esteja no grupo certo, assim:
/etc/udev/rules.d/99-deskhop.rules
KERNEL=="hidraw*", SUBSYSTEM=="hidraw", ATTRS{idVendor}=="1209", ATTRS{idProduct}=="c000", GROUP="plugdev", MODE="0660"
Observe que a página da Web Config não é "estranha" por causa da ofuscação deliberada - é auto -decompressão devido ao armazenamento muito limitado. A fonte inteira é 100% aberta e parte deste repositório. Você é incentivado a reconstruir tudo sozinho.
Quando você conecta um novo periférico USB, a placa exibe o LED duas vezes e instrui a outra placa a fazer o mesmo. Dessa forma, você pode testar se o USB e a comunicação de saída funciona para cada placa.
Faça este teste ligando primeiro o teclado de um lado e depois do outro. Se estiver tudo bem, os LEDs piscam rapidamente em ambos os casos.
Alguns recursos estão faltando de propósito, apesar de facilitar o uso do dispositivo ou mais simples de configurar. Aqui está um rápido colapso dessas decisões:
Isso ainda não garante nada, mas acredito que faz um conjunto razoável de regras básicas para mantê -lo seguro e protegido.
Claro. Ter um isolador é recomendado, mas deve funcionar sem ele.
O movimento do mouse é feito no espaço de coordenadas abstratas e o seu computador descobre como isso corresponde à tela física, para que apenas funcione.
Não estou vendendo nada, este é apenas um projeto de hobby pessoal e não comercial.
[Atualização] Parece que você pode encomendá -lo em qty de 1 (para PCB, PCB montado ou um dispositivo totalmente montado) da Elecrow, se você seguir este link, conforme relatado pelos usuários, sua placa chegará em branco e você precisará escrever o firmware.
[UPDATE2] - Eu nunca pedi a Elecrow nada, mas alguns dias atrás eles se ofereceram para patrocinar o projeto com um pequeno orçamento que será usado para futuros prototipagem de placa. Como meu objetivo é criar uma placa melhor com mais de 2 saídas, etc., acredito que os serviços de prototipagem podem ser benéficos para o projeto.
Sim, a idéia era fazê -lo se comportar como se fosse um único computador.
Deve funcionar. Após uma atualização recente da FW, o suporte para receptores combinados deve ser muito melhor.
Ele deve funcionar - tentei um mouse sem fio Anker com um receptor separado e funcionou muito bem.
Confira o wiki de solução de problemas que pode ter algumas respostas.
Existem várias alternativas de software que você pode usar se isso funcionar em sua situação específica.
Então, qual é o problema com todo o entusiasmo? Eu não posso acreditar - por favor me permita agradecer a todos! Eu nunca esperava esse tipo de interesse em um projeto pessoal simples, portanto, os recursos iniciais são bastante básicos (assim como minhas habilidades de culinária) e cobrem principalmente minha própria USECASE. Fique atento às atualizações de firmware que devem trazer compatibilidade mais ampla de dispositivos, mais recursos e menos bugs. Como este é um projeto de hobby, agradeço seu entendimento por ser limitado e prometer fazer o melhor que posso.
Recursos planejados:
Trabalhando em uma versão Lite que fornece funcionalidade básica com apenas uma placa Pico W, reduzindo ainda mais o custo e permitindo que você a experimente, mesmo sem hardware ou PCB adicional.
As pesquisas de mouse agora devem funcionar a 1000 Hz (os quedas no gráfico estão do meu braço sofrendo com todo o movimento :-)):

Não estou fazendo isso com fins lucrativos ou qualquer outro motivo, exceto tentar ajudar as pessoas, criando um ambiente de trabalho melhor para todos. Se você deseja apoiar ainda mais o projeto, considere fazer uma pequena doação para uma instituição de caridade como médicos sem fronteiras .
Por favor, permita -me agradecer a todos que ajudaram ou considerando!
Peço gentilmente que qualquer pessoa que tenta construir este projeto entenda e reconheça que não sou responsável por ferimentos, danos ou outras consequências. Sua segurança é importante e encorajo você a abordar esse projeto com cuidado, tomando as precauções necessárias e assumindo a responsabilidade pessoal por seu bem-estar durante todo o processo. Por favor, não seja eletrocutado, queimado, estressado ou com raiva. Divirta -se e divirta -se!
Happy Switchin '!