是否可以使用Arduino uno构建HID设备(如键盘)?
当时,我在Arduino上有按钮输入,在串行线上提供了输出。因此,如何将当前的固件转换为可以像HID键盘一样工作的固件?
- 我应该编写一个新的窗口设备驱动程序吗?
- 我是否应该创建一个软件层来接收我的串行数据,并让Windows将其读取为HID输入?
- 如果有可能,是否有更好的方法可以实现?
是否可以使用Arduino uno构建HID设备(如键盘)?
当时,我在Arduino上有按钮输入,在串行线上提供了输出。因此,如何将当前的固件转换为可以像HID键盘一样工作的固件?
Answers:
是否可以使用Arduino uno构建HID设备(如键盘)?
是的!还有的就怎么做,在一个伟大的教程在这里
当时,我在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通信的较小的微控制器。该微控制器将获取这些按键“缓冲区”,并通过USB HID键盘按键通过USB传输它们。
请注意,关键字符(chr
在此处的代码中)实际上是通过USB发送的关键代码,由USB HID驱动程序解释,然后使用您为键盘设置的当前布局将其转换为真实字符。
该mod
角色是你的键盘(换挡,控制,ALT ...)上的修饰键之一,0x00
是没有任何修改。
- 我应该编写一个新的窗口设备驱动程序吗?
不,您不需要!随着DFU升级,Windows将您的arduino视为USB键盘。
- 我是否应该创建一个软件层来接收我的串行数据,并让Windows将其读取为HID输入?
您无需这样做,由于许多原因,这实际上是一个非常糟糕的主意:
我使用的是Uno,但我会看一下您发布的内容,因为上次我们考虑过DFU更新,但我们有点怕砖砌东西
最后,在评论中,您担心砖砌arduino。请相信我和本文的作者,您不能对您的arduino进行固件更新:
注意:使用这种方法不可能“砖化”设备。可以始终使用DFU协议更新Arduino引导加载程序固件!
万一发生严重错误,并且在小型AVR(atmega8u2)中出现引导加载程序损坏,您仍然可以使用另一个arduino或 atmel编程器,使用USB插头旁边的6针重新刷新它。
最后,要知道,连接AVR和Arduino 的唯一方法是使用保险丝并复位编程保险丝。即使这样,您也可以使用 HVSP保存设备,尽管仅购买新芯片通常会减少麻烦。
我创建了一个项目,该项目完全替代了Arduino Bootloader。您可以上传草图并将其用作HID。在Github上查看Project HID:https : //github.com/NicoHood/HID