2013-04-26 162 views
4

我想用我的Arduino Mini ProRN-42 HID Bluetooth模块制作一个“键盘”。我可以用我的MacBook连接到它,它显示为蓝牙键盘。另外,我可以按下按钮并发送命令。Arduino + RN-42蓝牙模块HID

完美的权利吗?

不幸的是不......我不知道如何编码我需要发送给模块的字节,以告诉它按键和键释放。我一直在阅读每一本蓝牙RN-42手册,我可以把它放在手上,但我并不完全明白我应该发送给蓝牙模块。过去几周我一直在使用Google搜索进行搜索,而且我找不到任何能够帮助我的C代码。据我所知USB按键发送为十六进制数组。这是正确的吗?如果是这样,我将如何编码?

回答

-2

如果您希望Arduino发送键盘按消息到计算机,请使用Keyboard.press()用于按键,Keyboard.release()用于发布。我没有那种类型的Arduino或蓝牙模块,但是因为它将Arduino识别为键盘,所以我认为这应该可行...

+1

感谢您的意见,但不幸的是,这并不适用于所有的Arduinos。 “键盘”功能仅适用于莱昂纳多。 – user2238127 2013-04-28 15:24:08

+0

莱昂纳多(或Micro或Due)的键盘库适用于HID over USB。据我所知,它不适用于RN-42。 – efunneko 2014-08-04 00:24:41

1

因此,如果您确实拥有带HID-611的RN-42模块固件:

您只需将ASCII字符串发送到RN-42上的串行端口@ 115200波特,剩下的就完成了。所以如果你想Serial1.println("Hello");然后Hello(enter)将被发送到您的Mac。如果这不起作用,那么通过拉起GPIO11或发送命令到RN-42并打开HID模式,确保RN-42不处于SPP模式。

+0

我可以发送消息,那不是问题。我想用它来玩游戏。现在我可以发送Serial.write('a');每次按下该按钮时它都会打印一个'a'。但由于它在一个循环中,当我按住一个按钮时,它会告诉计算机每隔几微秒按一次'a',而不是实际按住按键。如果我做了一段时间循环,它会按一下键然后立即释放。我需要找出要发送的字节,告诉计算机我正在按下并按住该键。 – user2238127 2013-04-28 15:28:10

+0

谢谢你的回答。你是对的,我可以发送字符串,这工作正常。但是,我如何模拟按下的按键?因为我打算制作一个游戏控制器。计算机并不知道我按住了键,它只是看到一堆快速按键而不是长按键(按住键)。 – user2238127 2013-04-29 18:50:16

5

我写了一个arduino库silverball,它支持键盘和鼠标的RN42和HID协议。我有一个示例应用程序,显示如何通过BT模块发送HID原始报告。我的设计是用来从自定义控制器玩游戏。

正如之前所述,您需要将您的BT模块设置为HID模式(从串行连接发送命令S~,6或在启动模块时将GPIO11设置为高)。默认情况下,应该将模块设置为出厂时的键盘HID,但要将其设置为键盘,请将命令SH,0200发送到BT模块,并将其设置为键盘模式。

之后,你将需要简单的发送RAW报告给BT,他们将被格式化是这样的:

RN42 HID原始报表格式:

|start(1 byte)|length(1 byte)|descriptor(1 byte)|data(length - 1 [for the descriptor]) 

键盘的实例:

|0xFD|9|1|modifier|0x00|code 1|code 2|code 3|code 4|code 5|code 6 

键盘修饰符位(作为一个字节发送)

bit 7 |bit 6 |bit 5 |bit 4 |bit 3 |bit 2 |bit 1 |bit 0 
rt GUI |rt alt |rt shift |rt ctrl|lt GUI |lt alt |lt shift |lt ctrl 

我的代码可以在github上找到 - 用它来做任何你喜欢的!

+0

非常感谢。非常有帮助。我一直在为此工作数周! – user2238127 2013-05-11 15:47:32

0

所以,如果你真的有RN-42模块与HID-611固件:

所有你需要做的是对RN-42发送ASCII字符串到串行端口@ 115200 波特,和它会完成剩下的工作。

彼得是正确的,它很容易与RN-42 HID预装,它可以从sparkfun standalone或方便连接甚至soldered in a board购买。