Вы когда-нибудь замечали, как в сумасшедшем мире технологий всегда есть один причудливый маленький проект, пытающийся решить проблему, настолько нишу, что его единственные конкуренты могут быть левшей отверткой и самостоятельно упрямым будильником?
Я использую два разных компьютера в своем ежедневном рабочем процессе и разделяю одну пару клавиатур/мыши между ними. Попробуя несколько USB -переключателей, найденных на Amazon, заставили меня понять, что они все страдают от подобных проблем - для переключения требуется время, процесс довольно неуклюжий, когда пытается найти кнопку, и, честно говоря, он просто не становится лучше со временем.
Все, что я хотел, это способ использовать сочетание клавиш для быстрого переключения выходов, в сочетании с возможностью сделать то же самое, волшебным образом перемещая указатель мыши между мониторами. Этот проект позволяет вам выполнять оба, даже если ваши компьютеры запускают разные операционные системы!
Устройство действует как посредник между вашей клавиатурой/мышью и компьютером, устанавливая и поддержание соединений с обоими компьютерами одновременно. Затем он выбирает, куда пересылать мышь и нажатия клавиш, в зависимости от вашего выбора. Клавиатура следует за мышью и наоборот, поэтому просто перетаскивание мыши на другой рабочий стол переключится.
Чтобы заставить курсор мыши волшебным образом перепрыгнуть, дескриптор отчета мыши HID был изменен, чтобы использовать абсолютные координаты, а затем отчеты мыши (которые все еще поступают в относительных движениях) накапливались внутри, сохраняя точное подсчет на этой позиции.
Когда вы пытаетесь оставить область монитора в направлении другого монитора, он сохраняет координату Y и меняет максимальный x на минимальный x, затем переворачивает выходы. Это гарантирует, что курсор плавно появляется на той же высоте на другом мониторе, улучшая восприятие плавного перехода.

Перетаскивание мыши с Mac на Linux автоматически переключает выходы.
Фактический переключатель происходит в тот самый момент, когда одна стрелка перестает двигаться, а другая начинается.
Выступая в качестве USB -хоста и периодически запрашивая свою клавиатуру, он ищет предварительную горячую клавишу в отчете HID (обычно для меня блокировка Ctrl + Caps). Когда он будет найден, он будет пересылать все последующие символы на другой вывод.
Чтобы иметь визуальную индикацию, какой вывод вы используете в любой момент, вы можете перепрофировать светодиоды клавиатуры и попросить их предоставить необходимую обратную связь.
Он также помнит состояние светодиода для каждого компьютера, так что вы можете точно подобрать, как вы его оставили.

Чтобы избежать несоответствия версий и сообщили о проблемах пути при строительстве, а также спасти вас от необходимости загрузки большого SDK, проект теперь объединяет минимальный Pico SDK и Tinyusb.
В системах Debian/Ubuntu, обязательно установите их:
sudo apt install cmake gcc-arm-none-eabi libnewlib-arm-none-eabi build-essential
Вы должны быть в состоянии строить, работая:
cmake -S . -B build
cmake --build build
Кроме того, чтобы восстановить веб -интерфейс, проверить WebConfig/ и выполнить ./render.py , вам понадобится установлен Jinja2.
Чтобы восстановить диск, проверьте диск/ папку и запустите ./create.sh , при необходимости настройте. Вам понадобятся dosfstools (для предоставления mkdosfs),
В качестве альтернативы, вы можете использовать предварительно построенные изображения. Поскольку версия 0.6 существует только одно универсальное изображение. Вам нужен файл .uf2, который вы просто скопируете на устройство одним из следующих способов:
Вариант 1 - (прошивка 0,6 и позже) Поместите устройство в «Режим конфигурации», одновременно нажав левый Ctrl + правый сдвиг + C + O. Устройство Ваша клавиатура подключена к перезагрузке и превратится в USB -накопитель под названием «Настольный». Все, что вам нужно сделать, это скопировать файл .uf2 в него. Как только изображение будет проверено, устройство будет мигать и перезагрузиться, а затем перейдите к обновлению другой платы. Во время этой операции светодиод будет мигать. Как только это будет сделано, он будет писать Flash и перезагрузить, завершая операцию.
ПРИМЕЧАНИЕ - это не настоящий общий USB -диск, вы не можете использовать его для копирования файлов в него.
Опция 2 - Использование ROM Bootloader - удерживайте кнопку встроенной бортовой кнопку при подключении каждого PICO и скопируйте UF2 на флэш -накопитель. Изображения позже, чем 0,6 Поддержка, удерживая кнопку без необходимости возиться с источником питания, но «кнопка удержания при закуливании» всегда должна работать, независимо от состояния устройства.
Вы когда-нибудь пытались переместить этот слайдер YT в определенную позицию, но ваша мышь движется слишком прыгающе, и внезапно вы перемещаете свою руку, как 5 лет, и вы снова играете «Операция» снова и снова?
Нажмите правый Ctrl + правый Alt, чтобы переключить режим медленного мыши. Указатель мыши значительно замедлится, что позволит вам выполнить более тонкую точную работу и при этом при этом при этом снова быстро движется мышь, быстро нажимая те же ключи.
Если вы хотите заблокировать себя на один экран, используйте RIGHT CTRL + K . Это убедится, что вы не случайно не покидаете свой текущий экран. Чтобы выключить, нажмите ту же комбо клавишу снова.
Вы можете заблокировать оба компьютера одновременно, используя RIGHT CTRL + L Чтобы использовать эту функцию, сначала настройте ОС для каждого вывода в конфигурации (поскольку ярлыки разные).
Если вы играете, есть вероятность, что ваша игра может работать не так, как с режимом Absolute Mouse. Чтобы решить эту проблему, вводится игровой режим , переключается LEFT CTRL + RIGHT SHIFT + G В игровом режиме вы заблокированы на текущем экране, и ваша мышь ведет себя как стандартная относительная мышь. Это также должно исправить различные проблемы виртуальной машины, в настоящее время не поддерживаемые операционные системы и т. Д.
Предположительно встроенный, чтобы не допустить входа в режим ожидания компьютера, но, по правде говоря, это просто весело смотреть. Выкл по умолчанию заставит указатель вашей мыши подпрыгивать вокруг экрана, как мяч понга. При включении он активируется после периода неактивности, определенного в заголовке пользователя, и автоматически выключается, как только вы отправляете какие -либо выходные данные на этот экран.
Потенциальное пример использования - у меня есть багги USB -док, которая не возобновит видео из режима ожидания, поэтому не позволяя ему спать, может быть удобным обходным путем.
Схема основана на двух платах Raspberry Pi Pico, выбранных потому, что они дешевые (4,10 евро / ПК), могут быть вручную припаянные, и большинство поставщиков имеют их в наличии.
PICO подключаются с использованием UART и разделены аналоговыми устройствами ADUM1201 Двойной цифровой изолятор (~ 3 €) или гораздо более дешевым, более быстрым и совместимым с PIN Ti ISO7721DR (~ 1,5 €), который является предпочтительным выбором.
Несмотря на то, что они обычно не имеют поддержки двойного USB, благодаря удивительному проекту, в котором USB реализуется с использованием программируемого волшебства ввода -вывода, найденного в RP2040, есть поддержка, чтобы он действовал как как USB -хост, так и устройство.
Чтобы сделать вещи максимально простыми для сборки DIY, следы были сохранены с одной стороны, а количество деталей, хранящихся до минимума.

Дифференциальные линии USB D+/D- должны быть идентичны по длине, но они немного асимметричны, чтобы противостоять разнице в длине на соответствующих трассах GPIO, поэтому общая длина должна соответствовать.
ZD (дифференциальный импеданс) предназначен как 90 Ом (удалось получить ~ 107, достаточно близко :)).
Толщина предназначена для того, чтобы составлять 1,6 мм для работы с помощью Snap-Fit, как и ожидалось.
Есть 2 версии печатной платы (нет основных различий для пользователя). Оригинал (v1.0) легче припаять и собирать, в то время как v1.1 предлагает некоторые обновления, такие как:
Эта версия немного сложнее вручную припоять из -за небольшого переходного подавителя напряжения и резисторов 0805, но она полностью выполнима. Телевизионные телевизоры могут быть опущены (не рекомендуются), и это все равно будет работать.
Предстоящий - плата с голым RP2040S, который не нуждается в PICO, меньше и удобнее.
Поскольку я не очень хорош в 3D, дело простое и простое, но выполняет работу. Это должно быть легко печатать, использовать ~ 33 г филаменты и занимает пару часов.
Горизонтальные движения печатной платы противостоят колышкам, скользящим сквозь отверстия и вертикальные движения с помощью привязки на бокам - винты не требуются. Случай получил небольшую редизайну, чтобы показать логотип и два дополнительных выдульки для привязки, поэтому он обеспечивает лучшую печать.
Разъемы Micro USB на обеих досках смещен со стороны корпуса, поэтому немного большие отверстия должны позволять кабелям добраться.
Крышка имеет конструкцию с приготовлением подготовки, с слотом отвертки для отверстия. Маркировка сверху утоплена и может быть закончена, например, карандашами, чтобы дать лучший контраст (или просто оставить как есть).

| Компонент | QTY | Цена за единицу / € | Цена / € |
|---|---|---|---|
| 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 |
| Заголовки 2.54 1x03 | 2 | 0,08 | 0,16 |
| Общий | 11.53 |
Ti ISO7721DR можно использовать вместо Adum - это совместимый с PIN, намного дешевле и с лучшими характеристиками.
| Компонент | Часть | QTY | Цена за единицу / € | Цена / € |
|---|---|---|---|---|
| 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 |
| ( Или Adum1201brz) | ||||
| C1, C2 | CAP 0805 SMD 100NF | 2 | 0,09 | 0,18 |
| R1, R2, R3, R4 | Res 0805 SMD 27oM | 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 | Заголовки 2.54 1x03 | 2 | 0,08 | 0,16 |
| Общий | 11.22 |
USB-A Connector может быть Molex MX-67643-0910 или более дешевым/бюджетным, который разделяет те же размеры.
Дополнительные шаги:
Если у вас есть какой -то опыт работы с электроникой, вам это не нужно. Тем не менее, некоторые из вас не могут этого, и в этом случае это видео может помочь вам пройти через процесс. Обратите внимание, что после пайки вы должны очистить поток от печатной платы, чтобы предотвратить коррозию.
Стандартный процесс для этого заключается в использовании изопропилового спирта и старой зубной щеткой. Но угадайте, что? Я не кладу свою старую зубную щетку онлайн, так что вам просто придется импровизировать эту часть :)

[ПРИМЕЧАНИЕ] Руководство по сборке видео охватывает PCB v1.0. Пересмотренная версия очень похожа, и процедура в основном такая же.
Конфигурация
Left ShiftLeft Ctrl + Right Shift + C + O - введите режим конфигурацииRight Shift + F12 + D - Удалить конфигурацию FlashRight Shift + F12 + Y - Сохранение экрана. Сметное смещениеИспользование
Right CTRL + Right ALT - переключатель медленного режима мышиRight CTRL + K - блокировка/разблокировка мыши на рабочем столеRight CTRL + L - блокируйте оба выхода одновременно (установите выводную ОС ранее, см.Left ShiftLeft CTRL + Right Shift + G - режим переключения игр (заблокировать на экран, действуйте как стандартная мышь)Left CTRL + Right Shift + S - включить заставкуLeft CTRL + Right Shift + X - отключить заставкуLeft CTRL + Caps Lock - переключатель между выходамиПримечание. Некоторые клавиатуры не отправляют оба смены в одно и то же время должным образом, поэтому ярлык был изменен - работать для всех. Приносим извинения за путаницу.
Этот шаг не требуется, но это может быть удобно, если ваши экраны не совсем выровнены или различаются по размеру. Цель состоит в том, чтобы указатель мыши вышел на одинаковую высоту.

Просто припарковать мышь на большем экране на высоте меньшего/нижнего экрана (проиллюстрировано) и нажмите Right Shift + F12 + Y Ваш светодиод (и крышки блокировки) должен мигать в подтверждении.
Повторите для нижней границы (если она выше границы с большим экраном). Это будет сохранено, чтобы вспыхивать, и это должно сохранить это калибровочное значение с этого момента.
У Windows и Mac есть проблемы с несколькими экранами и абсолютным позиционированием, поэтому необходимы обходные пути (все еще экспериментальные). Существует лучший обходной путь, но сейчас вам нужно установить операционную систему для каждого вывода и количества экранов.
Ваши основные экраны должны быть в середине, а вторичный экран (ы) по краям. Чтобы настроить фактические параметры, откройте страницу веб -конфигурации для вашего устройства.

Начиная с FW 0,6, вводится улучшенный режим конфигурации. Чтобы настроить устройство, следуйте этим инструкциям:


В: Почему бы просто не создать хорошую онлайн -веб -страницу, например, Via, вместо того, чтобы иметь дело с этой странной вещью USB -диска? A: Загрузка JavaScript из случайного онлайн -места, которое взаимодействует с вашими входными устройствами, является потенциальным риском безопасности. Веб -страница конфигурации локально, и ничего не загружается извне.
Q: Хром на Linux не работает. A: Вам, вероятно, нужно настроить разрешения /разработки или создать соответствующий файл правил UDEV и убедиться, что ваш пользователь находится в правильной группе, например, так:
/etc/udev/rules.d/99-deskhop.rules
KERNEL=="hidraw*", SUBSYSTEM=="hidraw", ATTRS{idVendor}=="1209", ATTRS{idProduct}=="c000", GROUP="plugdev", MODE="0660"
Обратите внимание, что веб -страница конфигурации не является «странной» из -за преднамеренного запутывания - она самообучения из -за очень ограниченного хранения. Весь источник на 100% открыт и часть этого репо. Вам рекомендуется восстановить все самостоятельно.
Когда вы подключите новое периферийное устройство USB, плата будет дважды мигает светодиод и поручил другой плате сделать то же самое. Таким образом, вы можете проверить, работает ли USB и исходящая связь для каждой доски.
Сделайте этот тест, сначала подключив клавиатуру с одной стороны, а затем с другой. Если все в порядке, в обоих случаях светодиоды будут быстро вспыхивать.
Некоторые функции отсутствуют нарочно, несмотря на то, что он облегчит использование устройства или проще для настройки. Вот быстрое расстройство этих решений:
Это до сих пор ничего не гарантирует, но я считаю, что это делает разумный набор основных правил, чтобы обеспечить вам безопасность и защиту.
Конечно. Рекомендуется наличие изолятора, но он должен работать без него.
Движение мыши выполняется в абстрактном координатном пространстве, и ваш компьютер выясняет, как это соответствует физическому экрану, поэтому оно должно просто работать.
Я ничего не продаю, это просто личный, некоммерческий хобби.
[Обновление] Похоже, вы можете заказать его в qty 1 (для либо печатной платы, собранной печатной платы или полностью собравшегося устройства) у Elecrow, если вы перейдите по этой ссылке, как сообщается пользователям, ваша плата будет появилась пустая , и вам придется написать прошивку самостоятельно.
[Update2] - Я никогда не просил Elecrow ни за что, но пару дней назад они предложили спонсировать проект с небольшим бюджетом, который будет использоваться для будущего прототипирования совета директоров. Поскольку моя цель состоит в том, чтобы создать лучшую доску с более чем 2 выходами и т. Д., Я считаю, что услуги по прототипированию могут быть полезны для проекта.
Да, идея состояла в том, чтобы заставить его вести себя так, как будто это был один компьютер.
Это должно работать. После недавнего обновления FW поддержка комбинированных приемников должна быть намного лучше.
Это должно работать - попробовал беспроводную мышь Anker с отдельным приемником, и это сработало просто отлично.
Проверьте устранение неполадок вики, в которой могут быть некоторые ответы.
Есть несколько альтернатив программного обеспечения, которые вы можете использовать, если это работает в вашей конкретной ситуации.
Итак, в чем дело со всем энтузиазмом? Я не могу в это поверить - пожалуйста, позвольте мне поблагодарить всех вас! Я никогда не ожидал такого интереса к простому личному проекту, поэтому первоначальные функции довольно простые (точно так же, как мои кулинарные навыки) и в основном охватывают свою собственную использование. Следите за обновлениями прошивки, которые должны обеспечить более широкую совместимость устройств, больше функций и меньше ошибок. Поскольку это хобби-проект, я ценю ваше понимание за то, что он ограничен по времени и обещаю сделать все возможное.
Запланированные функции:
Работая над версией Lite , которая предоставляет основную функциональность с одной платой Pico W, еще больше снижая стоимость и позволяет вам попробовать ее даже без добавления аппаратного обеспечения или печатной платы.
Опрос мыши теперь должен работать при 1000 Гц (провалы на графике-моя рука, болящая от всего движения :-)):

Я не делаю это для получения прибыли или по какой -либо другой причине, кроме как попытаться помочь людям, создав лучшую рабочую среду для всех. Если вы хотите продолжить поддержку проекта, пожалуйста, рассмотрите возможность сделать небольшое пожертвование на такую благотворительную организацию, как врачи без границ .
Пожалуйста, позвольте мне поблагодарить всех, кто помог или рассмотрел это!
Я любезно прошу, чтобы любой, кто пытается построить этот проект, понимал, и признал, что я не несю ответственности за какие -либо травмы, ущерб или другие последствия. Ваша безопасность важна, и я призываю вас тщательно подходить к этому проекту, принимая необходимые меры предосторожности и принимая личную ответственность за ваше благополучие на протяжении всего процесса. Пожалуйста, не получайте электрическую точку зрения, сжигают, стрессут и не сердитесь. Веселитесь и наслаждайтесь!
Счастливого переключения!