|
极客工坊有帖子是搭硬件实现HID设备功能,但经搜索和了解,不用搭电路照样让我们的Arduino uno r3作HID 键盘或鼠标,这全归功于板子上的atemga16u芯片,平常是作为usb转串口的其实这是内部程序实现的,也就是说通过给它换所谓的bootloader即可实现其keyboard或鼠标功能,我只尝试了键盘的实现,所以这里只讲做键盘这方面的。这里先讲述一下,基本的工作原理如下图:
根据上图,你可能会有疑问,HID识别码是个什么东东,其实这是我自己这么叫的,可以认为就是按键ID,用来告诉atmega16u2哪些按键按下了,这里有个规则,如图:
hid码
说明:特殊按键,就是一些修饰键,如ctrl,shift,alt等,这里这么简单说,可能会不太理解,结合下面具体做法就会明白了。
下面就具体说一下怎么实现,其实大体就分两方面工作:
1.Atmega328p的程序编写和下载;
2.Atmega16u2的bootloader下载;
展开来说:
1.Atmega328p的程序编写和下载:(1)下载对应的支持库,其实就是简单的串口通信封装的一些方法和对应按键的按键ID的宏定义:下载地址USBKeyboard,库下载后解压安装。
说明一下,之前库是下载的网上的,不过有个小毛病,没考虑到同时按下多个键的情况,而且每发送一个按键按下的消息后都会发送按键松开的消息,我稍微修改了一下,将按键松开的消息独立出来,同时添加了一些同时按下按键的方法。代码里未做注释,不过能看懂,在这里稍稍说一下:
以字符串的形式发送消息的方法:Keyboard.print(),例如Keyboard.print("helloWorld");//区分大小写
只发送单个按键按下不松消息的方法:Keyboard.sendKeyStrokeUnReleased(KEY_A);//按下按键A且不松开
或Keyboard.sendKeyStroke(KEY_A, 0);//第二个参数是修饰键ID(shift等),用的话要使用对应宏定义见hid_keys.h
只发送按键松开的消息,其实就是HID码全是0:Keyboard.sendKeyReleased();//没有按下按键
同时按下两个按键的方法:如,Keyboard.sendKeyStrokeUnReleased(KEY_A, KEY_B, 0);//同时按下A、B键
其他的自己看吧,很简单的
(2)可打开刚安装的库的Example,其中有个helloworld,或者自己创建新的sketchbook如下:[mw_shl_code=cpp,true]#include <USBKeyboard.h>
void setup()
{
Keyboard.init();
}
void loop()
{
delay(5000);
Keyboard.print("hello world");
}
[/mw_shl_code]
编译上传到uno板子,当然你也可以编写属于自己的代码,如此就完成第一步工作了。
2.Atmega16u2的bootloader下载:
下载bootloader的方法,论坛里有相关帖子,网上也有很多,自己多搜搜看看吧,搜到的台湾的一个论坛方法是让atmega16u2进入DFU模式,但悲催的是,我的板子是国内山寨货不能进入DFU模式,无语,便宜果然没好货,感兴趣的可以看最后我贴的帖子地址,之后又搜了好多资料,终于找到适合我自己用的方法,因为我只有ft232r usb转串口线,所以我参考了YFduino论坛里YFRobot的帖子:利用ft232r的Bitbang模式给arduino控制器重新烧写bootloader,因为以我的条件我只能用这种方法,在此感谢!
说一操作过程吧:
(1)下载avrdude压缩包,,地址:avrdude
压缩包里有avrdude和其对应的avrdude-GUI以及用到的两个bootloader,一个是支持keyboard的Arduino-keyboard-0.3.hex和原来的做usb转串口的Arduino-usbserial-uno.hex
(2)将FT232R串口线与uno r3板子上的Atmega16u2连接,如图:
打开avrdude-GUI,按照如图操作:
这就完成了两大工作,之后将Ft232r串口线与板子断开,将Arduino UNO r3板子通过他的USb口连接电脑,在电脑上找个能输文本的地方,单击光标闪动,你会看到每隔5s就会有一个helloWorld字符串出现,怎么样不错吧,利用这个探索其它的玩法吧!
如果想让板子回到原来的状态,为Atmega16u2下载Arduino-usbserial-uno.hex即可
参考资料:
1.Cooper Maa论坛(台湾的)帖子:(可能需要翻墙)
讓Arduino Uno變成USB鍵盤
USBKeyboard Library
2.YFduino
利用ft232r的Bitbang模式给arduino控制器重新烧写bootloader
3.极客工坊
arduino uno mega2560等各种不同板子bootloader烧写方法
等等
|
|