Avez-vous déjà remarqué comment, dans le monde fou de la technologie, il y a toujours ce petit projet excentrique essayant de résoudre un problème, alors niche que ses seuls concurrents pourraient être un tournevis gaucher et un réveil auto-caché?
J'utilise deux ordinateurs différents dans mon flux de travail quotidien et partage une seule paire de clavier / souris entre eux. Essayer plusieurs boîtes de commutation USB trouvées sur Amazon m'a fait réaliser qu'ils souffrent tous de problèmes similaires - il faut un certain temps pour changer, le processus est assez maladroit lorsque vous essayez de trouver le bouton et franchement, cela ne s'améliore pas avec le temps.
Tout ce que je voulais, c'était un moyen d'utiliser un raccourci clavier pour changer rapidement les sorties, jumelé avec la possibilité de faire de même en déplaçant par magie le pointeur de la souris entre les moniteurs. Ce projet vous permet de faire les deux, même si vos ordinateurs exécutent différents systèmes d'exploitation!
L'appareil agit comme un intermédiaire entre votre clavier / souris et l'ordinateur, établissant et entretenant des connexions avec les deux ordinateurs à la fois. Ensuite, il choisit où transmettre votre souris et vos frappes, selon votre sélection. Le clavier suit la souris et vice versa, donc le simple fait de faire glisser la souris vers l'autre bureau changera les deux.
Pour que le curseur de la souris saute comme par magie, le descripteur de rapport HID de souris a été modifié pour utiliser des coordonnées absolues, puis les rapports de la souris (qui viennent toujours dans des mouvements relatifs) s'accumulent en interne, en gardant le décompte précis sur la position.
Lorsque vous essayez de quitter la zone de moniteur dans le sens de l'autre moniteur, il conserve la coordonnée Y et échange le x maximum pour un x minimum, puis retourne les sorties. Cela garantit que le curseur apparaît parfaitement à la même hauteur sur l'autre moniteur, améliorant la perception d'une transition en douceur.

Faire glisser la souris de Mac à Linux commutant automatiquement les sorties.
L'interrupteur réel se produit au moment même où une flèche cesse de bouger et que l'autre commence.
Agissant en tant qu'hôte USB et interrogeant périodiquement votre clavier, il recherche une cure de tête préconfigurée dans le rapport HID (généralement Ctrl + Caps Lock pour moi). Lorsqu'il est trouvé, il transmettra tous les caractères suivants à l'autre sortie.
Pour avoir une indication visuelle de la sortie que vous utilisez à un moment donné, vous pouvez réutiliser les LED du clavier et les faire fournir les commentaires nécessaires.
Il se souvient également de l'état LED pour chaque ordinateur, vous pouvez donc comprendre exactement comment vous l'avez quitté.

Pour éviter les problèmes d'inadéquation de la version et les problèmes de chemin signalés lors de la construction, ainsi que de vous éviter d'avoir à télécharger un grand SDK, le projet regroupe désormais un SDK Pico minimal et Tinyusb.
Sur un système Debian / Ubuntu, assurez-vous de les installer:
sudo apt install cmake gcc-arm-none-eabi libnewlib-arm-none-eabi build-essential
Vous devriez pouvoir construire en fonctionnant:
cmake -S . -B build
cmake --build build
De plus, pour reconstruire l'interface utilisateur Web, vérifier WebConfig / et exécuter ./render.py , vous aurez besoin de Jinja2 installé.
Pour reconstruire le disque, vérifier le disque / dossier et exécuter ./create.sh , ajuster votre système si nécessaire. Vous aurez besoin de Dosfstools (pour fournir des MKDOSFS),
Alternativement, vous pouvez utiliser les images prédéfinies. Depuis la version 0.6, il n'y a qu'une seule image universelle. Vous avez besoin du fichier .uf2 que vous copiez simplement sur l'appareil de l'une des manières suivantes:
Option 1 - (firmware 0.6 et ultérieure) Mettez le périphérique en "Mode de configuration" en appuyant simultanément à gauche Ctrl + Shift à droite + C + O. Appareil dans lequel votre clavier est branché à redémarrer et se transformer en un lecteur USB appelé "Deskhop". Tout ce que vous avez à faire est de y copier le fichier .uf2. Une fois l'image vérifiée, l'appareil flash et redémarrer, puis procéder à la mise à niveau de l'autre carte. Pendant cette opération, la LED clignote. Une fois cela fait, il écrira Flash and Reboot, terminant l'opération.
Remarque - Ce n'est pas un véritable lecteur USB générique, vous ne pouvez pas l'utiliser pour y copier des fichiers.
Option 2 - Utilisation du chargeur de démarrage ROM - Maintenez le bouton embarqué lors de la connexion de chaque PICO et copiez l'UF2 sur le lecteur flash qui apparaît. Des images plus tard que 0,6 prennent en charge le maintien du bouton sans avoir à jouer autour de l'alimentation, mais le "bouton de maintien en bouchage" doit toujours fonctionner, quel que soit l'état de l'appareil.
Avez-vous déjà essayé de déplacer ce curseur vidéo YT vers une position spécifique, mais votre souris bouge trop et soudain, vous déplacez votre main avec précarition comme si vous étiez 5 ans et que vous jouiez à nouveau "opération"?
Appuyez sur la droite Ctrl + ALT à droite pour basculer un mode de souris lent. Le pointeur de la souris ralentira considérablement, vous permettant de faire le travail de précision le plus fin et de faire bouger votre souris normalement en appuyant rapidement à nouveau les mêmes clés.
Si vous souhaitez vous enfermer sur un écran, utilisez RIGHT CTRL + K Cela s'assurera que vous ne quittez pas accidentellement votre écran actuel. Pour désactiver, appuyez à nouveau sur le même combo de touche.
Vous pouvez verrouiller les deux ordinateurs à la fois en utilisant RIGHT CTRL + L Pour utiliser cette fonctionnalité, configurez d'abord le système d'exploitation pour chaque sortie dans la configuration (puisque les raccourcis sont différents).
Si vous jouez, il y a une chance que votre jeu ne fonctionne pas correctement avec le mode de souris absolue. Pour résoudre ce problème, un mode de jeu est introduit, basculé par LEFT CTRL + RIGHT SHIFT + G . En mode jeu, vous êtes verrouillé sur l'écran actuel et votre souris se comporte comme une souris relative standard. Cela devrait également résoudre divers problèmes de machines virtuelles, actuellement des systèmes d'exploitation non pris en charge, etc.
Soi-disant intégré pour empêcher l'ordinateur d'entrer en veille, mais à vrai dire - c'est juste amusant à regarder. Off par défaut , fera rebondir votre pointeur de souris autour de l'écran comme une balle pong. Lorsqu'il est activé, il s'active après une période d'inactivité définie dans l'en-tête de configuration utilisateur et s'éteint automatiquement dès que vous envoyez une sortie vers cet écran.
Exemple d'utilisation potentiel - J'ai une cure de bogue USB qui ne reprendra pas la vidéo de la veille, donc ne pas le permettre de dormir peut être une solution de contournement pratique.
Le circuit est basé sur deux planches Raspberry Pi Pico, choisies car elles sont bon marché (4,10 € / pc), peuvent être soudées à la main et la plupart des fournisseurs les ont en stock.
Les PICOS sont connectés à l'aide de UART et séparés par un isolateur numérique à double canal ADUM1201 ADUM1201 (~ 3 €) ou un TI ISO7721DR beaucoup moins cher, plus rapide et compatible PIN (~ 1,5 €) qui est le choix préféré.
Bien qu'ils n'aient normalement pas de support pour Dual USB, grâce à un projet incroyable où l'USB est implémenté en utilisant la magie IO programmable trouvée dans RP2040, il existe un support pour agir à la fois en tant qu'hôte et appareil USB.
Pour garder les choses aussi simples que possible pour les constructions de bricolage, les traces ont été maintenues d'un côté et le nombre de pièces maintenues au minimum.

Les lignes différentielles USB D + / D- devraient être de longueur identique, mais elles sont légèrement asymétriques exprès pour contrer la différence de longueur sur les traces GPIO correspondantes PICO PCB lui-même, de sorte que les longueurs globales doivent correspondre.
ZD (impédance différentielle) est visé à 90 ohms (a réussi à obtenir ~ 107, assez près :)).
L'épaisseur est conçue pour être de 1,6 mm pour que Snap-Fit fonctionne comme prévu.
Il existe 2 versions du PCB (pas de différences majeures pour l'utilisateur). L'original (v1.0) est plus facile à souder et à assembler, tandis que V1.1 offre des mises à niveau comme:
Cette version est légèrement plus difficile à manquer à la soudure en raison des petites résistances de suppresseur de tension transitoire et 0805, mais elle est totalement faisable. Les téléviseurs peuvent en théorie être omis (non conseillé) et cela fonctionnera toujours.
À venir - Le planche avec RP2040 qui n'a pas besoin de PICOS, est plus petit et plus pratique.
Comme je ne suis pas très bon avec la 3D, le cas est simple et basique, mais fait le travail. Il doit être facile à imprimer, utilise ~ 33 g de filament et prend quelques heures.
Les mouvements horizontaux de PCB sont contrés par des chevilles glissant à travers les trous et les mouvements verticaux par des pattes d'incapacité sur les côtés - aucune vis requise. Le boîtier a reçu une légère refonte pour comporter le logo et deux pattes supplémentaires, donc elle fournit un meilleur sceau.
Les connecteurs micro USB sur les deux planches sont décalés du côté du boîtier, donc des trous légèrement plus grands devraient permettre aux câbles d'atteindre.
Le couvercle est d'une conception en instantané, avec une fente de tournevis à ouvrir. Les marques sur le dessus sont encastrées et peuvent être terminées avec par exemple des crayons pour donner un meilleur contraste (ou simplement laissé tel quel).

| Composant | Qté | Prix unitaire / € | Prix / € |
|---|---|---|---|
| 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 |
| En-têtes 2.54 1x03 | 2 | 0,08 | 0,16 |
| Total | 11.53 |
TI ISO7721DR peut être utilisé à la place de l'ADUM - il est compatible, beaucoup moins cher et avec de meilleures spécifications.
| Composant | Partie | Qté | Prix unitaire / € | Prix / € |
|---|---|---|---|---|
| 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 | En-têtes 2.54 1x03 | 2 | 0,08 | 0,16 |
| Total | 11.22 |
Le connecteur USB-A peut être Molex MX-67643-0910 ou un budget moins cher / budgétaire qui partage les mêmes dimensions.
Étapes supplémentaires:
Si vous avez une certaine expérience de l'électronique, vous n'en avez pas besoin. Cependant, certains d'entre vous pourraient ne pas le faire, et dans ce cas, cette vidéo pourrait vous guider à travers le processus. Veuillez noter qu'après souder, vous devez nettoyer le flux du PCB pour éviter la corrosion.
Le processus standard à faire consiste à utiliser de l'alcool isopropylique et une vieille brosse à dents. Mais devinez quoi? Je ne mets pas ma vieille brosse à dents en ligne, donc vous devrez juste improviser cette partie :)

[Remarque] Le guide d'assemblage vidéo couvre PCB v1.0. La version révisée est très similaire et la procédure est fondamentalement la même.
Configurer
Left ShiftLeft Ctrl + Right Shift + C + O - Entrez le mode configRight Shift + F12 + D - supprimer la configuration flashRight Shift + F12 + Y - Enregistrer le décalage de l'interrupteur d'écranUsage
Right CTRL + Right ALT - bassin de souris plus lentRight CTRL + K - Verrouillage / déverrouiller la commutation de bureau de la sourisRight CTRL + L - verrouiller les deux sorties à la fois (définissez le système d'exploitation de sortie avant, voir les raccourcis ci-dessous)Left ShiftLeft CTRL + Right Shift + G - Mode de jeu à bascule (verrouiller pour écran, agir comme souris standard)Left CTRL + Right Shift + S - Activer l'économiseur d'écranLeft CTRL + Right Shift + X - Désactiver l'économiseur d'écranLeft CTRL + Caps Lock - Commutation entre les sortiesRemarque: Certains claviers n'envoient pas les deux quarts de travail en même temps, c'est pourquoi le raccourci a été changé - pour travailler pour tout le monde. Excuses pour la confusion.
Cette étape n'est pas requise, mais elle peut être pratique si vos écrans ne sont pas parfaitement alignés ou diffèrent en taille. L'objectif est de faire sortir le pointeur de la souris à la même hauteur.

Il suffit de garer votre souris sur l'écran plus grand à la hauteur de l'écran plus petit / inférieur (illustré) et appuyez sur Right Shift + F12 + Y Votre LED (et verrouillage des bouchons) doit clignoter en confirmation.
Répétez pour la bordure inférieure (si elle est au-dessus de la bordure de l'écran plus grand). Cela sera enregistré pour flash et il devrait maintenir cette valeur d'étalonnage à partir de maintenant.
Windows et Mac ont des problèmes avec plusieurs écrans et un positionnement absolu, donc des solutions de contournement sont nécessaires (toujours expérimentales). Il y a une meilleure solution de contournement en construction, mais pour l'instant, vous devez définir le système d'exploitation pour chaque sortie et nombre d'écrans.
Vos écrans principaux doivent être au milieu et des écrans secondaires sur les bords. Pour configurer les options réelles, ouvrez la page de configuration Web de votre appareil.

À partir de FW 0.6, un mode de configuration amélioré est introduit. Pour configurer votre appareil, suivez ces instructions:


Q: Pourquoi ne pas simplement créer une belle page Web en ligne comme via au lieu de gérer ce truc de lecteur USB étrange? R: Chargement JavaScript d'un emplacement en ligne aléatoire qui interagit avec vos appareils d'entrée est un risque de sécurité potentiel. La page Web de configuration est locale uniquement et rien n'est jamais chargé à l'extérieur.
Q: Le chrome sur Linux ne fonctionne pas. R: Vous devez probablement modifier les autorisations / Dev ou créer un fichier de règles UDEV correspondant et assurer que votre utilisateur est dans le bon groupe, comme ainsi:
/etc/udev/rules.d/99-deskhop.rules
KERNEL=="hidraw*", SUBSYSTEM=="hidraw", ATTRS{idVendor}=="1209", ATTRS{idProduct}=="c000", GROUP="plugdev", MODE="0660"
Veuillez noter que la page Web de configuration n'est pas "bizarre" en raison d'une obscurcissement délibéré - il est auto-décompressant en raison d'un stockage très limité. Une source entière est 100% ouverte et une partie de ce dépôt. Vous êtes encouragé à tout reconstruire vous-même.
Lorsque vous connectez un nouveau périphérique USB, la carte flashera deux fois la LED et demandera à l'autre carte de faire de même. De cette façon, vous pouvez tester si l'USB et la communication sortante fonctionnent pour chaque conseil d'administration.
Faites ce test en branchant d'abord le clavier d'un côté puis de l'autre. Si tout va bien, les LED clignoteront rapidement d'avant en arrière dans les deux cas.
Certaines fonctionnalités manquent exprès, malgré le fait qu'elle rendrait l'appareil plus facile à utiliser ou plus simple à configurer. Voici une ventilation rapide de ces décisions:
Cela ne garantit toujours rien, mais je pense que cela fait un ensemble raisonnable de règles de base pour vous garder en sécurité et protégé.
Bien sûr. Le fait d'avoir un isolateur est recommandé, mais cela devrait fonctionner sans lui.
Le mouvement de la souris se fait dans un espace de coordonnées abstrait et votre ordinateur détermine comment cela correspond à l'écran physique, donc cela devrait simplement fonctionner.
Je ne vends rien, ce n'est qu'un projet de passe-temps personnel et non commercial.
[MISE À JOUR] Il semble que vous puissiez le commander dans Qté de 1 (pour PCB, PCB assemblé ou un appareil entièrement assemblé) à partir d'Elecrow si vous suivez ce lien comme indiqué par les utilisateurs, votre carte arrivera vide et vous devez écrire le firmware vous-même.
[Update2] - Je n'ai jamais rien demandé d'Elecrow, mais il y a quelques jours, ils ont proposé de parrainer le projet avec un petit budget qui sera utilisé pour le futur prototypage du conseil d'administration. Étant donné que mon objectif est de créer une meilleure carte avec plus de 2 sorties, etc., je pense que les services de prototypage pourraient être bénéfiques pour le projet.
Oui, l'idée était de le faire se comporter comme si c'était un seul ordinateur.
Cela devrait fonctionner. Après une récente mise à jour FW, la prise en charge des récepteurs combo devrait être bien meilleure.
Cela devrait fonctionner - a essayé une souris sans fil Anker avec un récepteur séparé et cela a très bien fonctionné.
Découvrez le wiki de dépannage qui pourrait avoir des réponses.
Il existe plusieurs alternatives logicielles que vous pouvez utiliser si cela fonctionne dans votre situation particulière.
Alors, quel est le problème avec tout l'enthousiasme? Je ne peux pas le croire - s'il vous plaît, permettez-moi de vous remercier tous! Je ne m'attendais pas à ce genre d'intérêt pour un projet personnel simple, donc les fonctionnalités initiales sont assez basiques (tout comme mes compétences en cuisine) et couvrent principalement ma propre USecase. Restez à l'écoute pour les mises à jour du micrologiciel qui devraient apporter une compatibilité des périphériques plus large, plus de fonctionnalités et moins de bogues. Comme il s'agit d'un projet de passe-temps, j'apprécie votre compréhension d'être limité dans le temps et de promettre de faire de mon mieux.
Caractéristiques planifiées:
Travailler sur une version Lite qui fournit des fonctionnalités de base avec une seule carte Pico W, réduisant encore plus le coût et vous permettant de l'essayer même sans matériel ni PCB ajouté.
Le sondage de la souris devrait maintenant fonctionner à 1000 Hz (les creux du graphique sont mon bras blessé par tout le mouvement :-)):

Je ne fais pas cela à profit ou toute autre raison, sauf pour essayer d'aider les gens en créant un meilleur environnement de travail pour tout le monde. Si vous souhaitez soutenir davantage le projet, veuillez envisager de faire un petit don à un organisme de bienfaisance comme des médecins sans frontières .
Veuillez me permettre de remercier tous ceux qui ont aidé ou considéré comme!
Je demande gentiment à quiconque tente de construire ce projet comprenne et reconnaît que je ne suis pas responsable des blessures, des dommages-intérêts ou d'autres conséquences. Votre sécurité est importante et je vous encourage à aborder attentivement ce projet, à prendre les précautions nécessaires et à assumer la responsabilité personnelle de votre bien-être tout au long du processus. Veuillez ne pas être électrocuté, brûlé, stressé ou en colère. Amusez-vous et profitez-en!
Happy Switchin '!