Можно ли создать устройство HID (например, клавиатуру), используя Arduino Uno?
Да, это! И есть отличный урок о том, как это сделать здесь
В настоящее время у меня есть кнопки ввода на Arduino, выдающие выходы на последовательной линии. Итак, как я могу превратить мою текущую прошивку во что-то, что может вести себя как HID клавиатура?
Как показано в руководстве, вам необходимо преобразовать код прошивки, чтобы вместо печати событий вы фактически инициировали события. Что вам нужно сделать, это добавить в свой код:
void triggerKey(uint8_t mod, uint8_t chr) {
uint8_t buf[8] = {mod, chr, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
// press key
Serial.write(buf, 8);
// emulate key press delay
delay(10);
buf[1] = 0x00;
// release key
Serial.write(buf, 8);
}
То, что вы делаете здесь, это отправка с вашего основного события Arduino микроконтроллера по последовательной линии на меньший микроконтроллер, который управляет USB-связью. Этот микроконтроллер возьмет эти ключевые «буферы» и передаст их при нажатии клавиши HID на клавиатуре USB через USB.
Помните, что ключевой символ ( chr
в данном коде) на самом деле является кодом, отправляемым через USB, который интерпретируется драйвером USB HID, который затем преобразует его в реальный символ с использованием текущей раскладки, настроенной для клавиатуры.
Символ mod
- это одна из клавиш-модификаторов, которые вы используете на клавиатуре (shift, control, alt ...), не 0x00
являющаяся модификатором.
- Должен ли я написать новый драйвер устройства окна?
Нет, тебе не нужно! С обновлением DFU ваше arduino будет восприниматься Windows как клавиатура USB.
- Должен ли я создать программный слой, который мог бы принимать мои последовательные данные и иметь окна, считывающие их как ввод HID?
Вам также не нужно этого делать, и это на самом деле очень плохая идея по многим причинам:
- ваше решение не будет переносимым, и поэтому вам придется взломать что-то для каждой платформы, которую вы можете использовать,
- ваше решение подразумевает много нового кода; чем больше кода написано, тем больше ошибок может быть в вашей системе,
- Ваше решение будет действительно хакерским, поскольку оно будет вести себя как драйвер устройства (т. е. земля ядра ), принимающее данные от пользовательской программы (т. е. земля пользователя ), и, вероятно, не будет работать, будет адом для отладки и подвержено проблемам безопасности. .. Если это вообще возможно сделать!
Я использую Uno, но я посмотрю на то, что вы написали, потому что в прошлый раз мы рассматривали обновление DFU, но мы как-то боимся кирпичей
Наконец, в комментарии у вас возникают опасения по поводу кирпичной кладки вашего Arduino. Пожалуйста, поверьте мне и автору статьи, что вы не можете кирпичить свой Arduino, выполняя прошивку:
ПРИМЕЧАНИЕ. Нет шансов «заложить» устройство с помощью этого метода. Микропрограмма загрузчика Arduino всегда может быть обновлена с использованием протокола DFU!
В случае, если что-то действительно сильно не так, и вы получаете повреждение загрузчика в маленьком AVR (atmega8u2), вы все равно можете перепрошить его, используя другой Arduino или
программатор Atmel, используя 6 контактов рядом с разъемом USB.
В конце, знайте, что единственный способ заглушить AVR, а значит и Arduino, это поиграть с предохранителями и сбросить программные предохранители. И даже в этом случае вы можете использовать
HVSP для сохранения своего устройства, хотя зачастую проще взять новый чип.