Сквозной порт для USB-мыши
В настоящее время я занимаюсь исследованием своего проекта. Моя цель проста: я хочу передать ввод от физической мыши на микрокомпьютер для обработки ввода и изменения, а также отправить ввод в виде USB HID на ПК.
Мышь ---> Микрокомпьютер (измененный ввод) ---> ПК
Микрокомпьютер предпочтительно должен иметь возможность как отправлять данные на ПК (в виде входов USB HID в качестве мыши), так и получать данные с ПК.
Я обнаружил, что Arduino Leonardo может работать как ведомое устройство USB и эмулировать движение мыши, что составляет половину того, что мне нужно. Мне нужен микрокомпьютер, способный работать как USB-хост, так и USB-ведомый. У меня нет опыта работы с микрокомпьютерами, и я не знаю, как найти что-то с этой функцией.
@James Meas, 👍1
Обсуждение2 ответа
Лучший ответ:
Наиболее простым решением этой проблемы было бы использование MCU с двумя интерфейсами USB, один из которых может быть USB-хостом. В линейке STM32F4 есть несколько таких деталей, а также, вероятно, других брендов, но не сразу ясно, есть ли какие-либо с существующей поддержкой Arduino. Что касается аппаратного обеспечения, я считаю, что вы можете сделать это с помощью недорогой платы STM32F446 "Nucleo", хотя контакты интерфейса USB доступны только на разъемах, которые вам нужно будет подключить к разъемам USB.
Возможно использование хост-щита USB, но это решение несколько «безвкусное», поскольку оно предполагает подвешивание довольно сложного контроллера к более примитивному микроконтроллеру, создавая «перевернутую» архитектуру и более дорогое, чем все- комплексное решение, но вы можете найти самый существующий код, который поможет вам в ваших усилиях.
Одна из самых простых вещей, которые вы могли бы сделать, — это использовать мышь PS/2 вместо USB и подключить ее к простому последовательному интерфейсу. Затем вы можете использовать плату, такую как Leonardo или одну из серии Teensy, которая имеет настраиваемый интерфейс USB-устройства, для представления на хост-компьютере USB-мыши.
Я думал об использовании пи в качестве USB-хоста, а затем передавать координаты через GPIO на ведомое устройство Arduino. Но я чувствую, что будет задержка ввода., @James Meas
Мне нравится nucleo как вариант, я просто беспокоюсь, что это может быть слишком сложно для меня, чтобы понять, и я не думаю, что у меня есть надлежащие инструменты, чтобы припаять разъем для usb (я никогда не покупал маленький компьютер как это раньше)., @James Meas
Интеграция прошивки действительно будет сложной задачей — хотя примеры гораздо более функциональны, они также гораздо менее готовы к работе, чем код Arduino. Что касается подключения USB-порта, то я взял дешевый удлинительный кабель USB, разрезал его пополам и обжал штыри разъема, чтобы подключить его к разъемам расширения платы (хотя будьте осторожны, цветовой код в дешевом USB кабелей обычно совершенно неправильно!). Все эти навыки стоит освоить, но каждый требует времени. Если это первый раз, вы, вероятно, захотите использовать хост-шилд или мышь ps/2, где вы можете оставаться исключительно Arduino., @Chris Stratton
спасибо за голову. Во время просмотра Adafruit я нашел симпатичную маленькую плату, Trinket M0, которую я могу соединить с хост-контроллером USB. https://github.com/gdsports/usb-metamorph/blob/master/README.md Я нашел этот репозиторий github, в котором много информации о USB и прочем. Я даже не уверен, о чем репозиторий, я просто просмотрел его, но безделушка m0 с хост-шилдом USB выглядит многообещающе., @James Meas
Хм, хотя эта комбинация может сработать, я беспокоюсь, что это может привести к худшему из обоих миров; нетипичная, только платформа квази-Arduino M0 и непрямая защита хоста., @Chris Stratton
Ядро кажется моим лучшим выбором. Как мне исследовать это дальше? На что следует обратить внимание, чтобы определить, способен ли компьютер работать в качестве устройства и хоста? Мне непонятно, что я ищу в даташитах и т.д. Спасибо., @James Meas
У аппаратного обеспечения есть функциональность, проблема заключается в том, что вам нужно будет выполнить много нетривиальной программной работы, в лучшем случае вам придется объединить два полных примера проектов, выяснить семантику передачи между ними, спорить компилятор более непосредственно и т. д. Определенно стоит затраченных усилий, если вы создаете продукт, менее понятный для одноразового использования и, вероятно, нет, если вы не знакомы с такими задачами. Что бы вы ни выбрали, начните с того, что каждый из хост-мыши и эмуляции мыши будет работать независимо., @Chris Stratton
Хорошо спасибо. Похоже, мне нужно будет на самом деле заказать устройство и немного повозиться с ним. Мне просто интересно, как я могу определить, какой компьютер имеет какие функции USB. Как вы узнали, что у Nucleo есть этот функционал? Было ли это через техническое описание SoC или что-то еще? Я, вероятно, закажу leonardo или что-то еще с тем же SoC, просто чтобы начать эмуляцию устройства (т.е. ведомое устройство, работающее как USB HID)., @James Meas
Итак, я нашел это: http://www.st.com/en/microcontrollers/stm32f446.html?querycriteria=productId=LN1875 Мы видим, что в разделе USB есть две записи: «USB OTG FS и USB OTG FS/HS». , так что я предполагаю, что это говорит о том, что есть два usb-контроллера, способных работать в режиме OTG. Это верно?, @James Meas
Я знаю, что уже много спрашивал, но как мне отличить USB-порты от USB-контроллера? Насколько я понимаю, это правда, что один хост может иметь много портов, а несколько портов не обязательно означают несколько контроллеров., @James Meas
Я не помнил, чтобы оба были способны к хосту, но это может быть так. Данная функция USB может поддерживать только одно соединение, мультиплексирование возможно только путем вставки концентраторов, что не является усложнением, которое вы, вероятно, хотели бы здесь., @Chris Stratton
Подключите USB Host Shield к Leonardo.
USB-мышь --- USB Host Shield --- Leonardo --- ПК
Библиотека USB Host Shield
Проект Circuits@Home
/*
* Проход через USB-мышь. Работает на уровне отчета HID. Отчет HID не декодируется.
* Протестировано на Leonardo с хост-шилдом Arduino USB, IDE 1.8.5 и Logitech Marble.
* трекбол/мышь. Это доказательство концепции, поэтому не гарантируется работа с
* все USB-мыши/трекболы.
*/
// Хост-мышь USB из библиотеки USB Host Shield. Установить с помощью диспетчера библиотек
#include <hidboot.h>
// Библиотека мыши USB-устройства, включенная в Arduino IDE 1.8.5
#include <Mouse.h>
// Удовлетворить IDE, которая также должна видеть статус включения в ino.
#ifdef dobogusinclude
#include <spi4teensy3.h>
#endif
#include <SPI.h>
class MouseRptParser : public MouseReportParser
{
protected:
void Parse(USBHID *hid, bool is_rpt_id, uint8_t len, uint8_t *buf);
};
void MouseRptParser::Parse(USBHID *hid, bool is_rpt_id, uint8_t len, uint8_t *buf)
{
Serial.print("MouseRptParser::Parse");
// Показать отчет USB HID мыши
for (uint8_t i = 0; i < len ; i++) {
Serial.print(' '); Serial.print(buf[i], HEX);
}
Serial.println();
// При ошибке - возврат
if (buf[2] == 1)
return;
if (len > 2) {
uint8_t mouseRpt[4];
mouseRpt[0] = buf[0];
mouseRpt[1] = buf[1];
mouseRpt[2] = buf[2];
mouseRpt[3] = 0;
HID().SendReport(1,mouseRpt,sizeof(mouseRpt));
}
}
USB Usb;
HIDBoot<USB_HID_PROTOCOL_MOUSE> HidMouse(&Usb);
MouseRptParser Prs;
void setup()
{
Serial.begin( 115200 );
#if !defined(__MIPSEL__)
while (!Serial) delay(1); // Дождитесь подключения последовательного порта — используется на платах Leonardo, Teensy и других со встроенным последовательным соединением USB CDC
#endif
Serial.println("Start");
if (Usb.Init() == -1) {
Serial.println("USB host shield did not start.");
}
delay( 200 );
HidMouse.SetReportParser(0, &Prs);
Mouse.begin();
}
void loop()
{
Usb.Task();
}
- Может ли Arduino Leonardo одновременно использовать USB-порт и последовательные контакты RX TX?
- Mac не обнаруживает последовательный порт для Леонардо
- Keyboard.print() пропускает клавиши
- Существует ли плата, которая может выступать как USB-хостом, так и клиентом для HID -устройств?
- Восстановление после потери USB-подключения (от Leonardo к Raspberry Pi)
- Библиотека джойстиков Arduino не распознается играми (Steam)
- Изменить USB VID и PID (Леонардо)
- Arduino Leonardo/Pro Micro сон и USB
Хотите иметь возможность изменять настройки мыши с компьютера? Можете ли вы объяснить, что вы хотите изменить? Скорость мыши? Можно ли это сделать на компьютере со специальным драйвером? Какая операционная система?, @Jot
Я хочу, чтобы компьютер посредника мог изменять входные данные для основного ПК на основе данных с основного ПК. Для того, что мне нужно, достаточно простого файлового канала или чего-то в этом роде. Я предполагаю, что это возможно с USB-контроллером в ведомом режиме, потому что я видел программные элементы управления RGB-клавиатурой и т. Д. Однако в этом случае мне не нужен доступ к мыши., @James Meas
Что вы хотите изменить? Скорость мыши? Кнопки? Автоповтор?, @Jot
Я хочу переместить физическую мышь, изменить движение в моем микрокомпьютере (например, умножить координаты на два), а затем отправить его на ПК (микрокомпьютер будет действовать как виртуальный HID)., @James Meas
Я не уверен, что это сработает. Мышь не знает координат. Если это возможно, то это можно сделать и на компьютере с Linux без Arduino. Я согласен с ответом @gdsports, прикрепите защитный экран USB-хоста., @Jot
Даже в инкрементальном режиме сообщаемые приращения могут быть умножены., @Chris Stratton