C 阿杜伊诺+;RN-42蓝牙模块HID

C 阿杜伊诺+;RN-42蓝牙模块HID,c,module,bluetooth,arduino,hid,C,Module,Bluetooth,Arduino,Hid,我正试图用我的电脑和一个模块制作一个“键盘”。我可以用手机连接到它,它显示为蓝牙键盘。此外,我可以按下按钮,它会发送命令 完全正确 不幸的是不是。。。我不知道如何编码我需要发送到模块的字节来告诉它按键和按键释放。我一直在阅读每一本蓝牙RN-42手册,但我并不完全理解我应该向蓝牙模块发送什么。在过去的几周里,我也一直在用谷歌搜索,但我找不到任何有助于我的C代码。据我所知,USB按键是以十六进制数组的形式发送的。是这样吗?如果是这样,我将如何编写代码?如果您希望Arduino向计算机发送键盘按键信息

我正试图用我的电脑和一个模块制作一个“键盘”。我可以用手机连接到它,它显示为蓝牙键盘。此外,我可以按下按钮,它会发送命令

完全正确


不幸的是不是。。。我不知道如何编码我需要发送到模块的字节来告诉它按键和按键释放。我一直在阅读每一本蓝牙RN-42手册,但我并不完全理解我应该向蓝牙模块发送什么。在过去的几周里,我也一直在用谷歌搜索,但我找不到任何有助于我的C代码。据我所知,USB按键是以十六进制数组的形式发送的。是这样吗?如果是这样,我将如何编写代码?

如果您希望Arduino向计算机发送键盘按键信息,请将其用于按键和释放。我没有那种类型的Arduino或蓝牙模块,但由于它将Arduino识别为键盘,我认为这应该可以工作…

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


您所要做的就是将ASCII字符串发送到RN-42上的串行端口@115200波特,它将完成其余的工作。所以如果你想
Serial1.println(“你好”)
然后
Hello(enter)
将被发送到您的Mac。如果这不起作用,则通过拉起GPIO11或向RN-42发送命令并打开HID模式,确保RN-42未处于SPP模式。

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

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

之后,您将需要简单地向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 
键盘修改器位(作为一个字节发送)

我的代码可以在上找到-使用它为任何你喜欢的


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

您所要做的就是将ASCII字符串发送到串行端口@115200 在RN-42上输入波特,剩下的就由它来完成


Peter是对的,预装HID的RN-42非常容易,可以从sparkfun购买,甚至可以轻松连接

感谢您的输入,但不幸的是,这并不适用于所有Arduinos。“键盘”功能仅适用于莱昂纳多。莱昂纳多(或Micro或Due)的键盘库用于通过USB的HID。据我所知,它不适用于RN-42。我可以发送消息,这不是问题所在。我想用它来做游戏。现在我可以发送序列号了。写('a');每次我按下那个按钮,它都会打印一个“a”。但是,因为当我按下一个按钮时,它处于一个循环中,它会告诉计算机每隔几微秒按一次“a”,而不是实际按下键。如果我做一个while循环,它会按一次键,然后立即释放。我需要找出要发送的字节,告诉计算机我正在按住那个键。谢谢你的回答。你说得对,我可以发送字符串,这很好。但是我如何模拟按键被按下?因为我打算做一个游戏控制器。电脑不知道我按下了键,它只是看到了一连串的快速按键,而不是一次长按键(也就是按键被按下)。非常感谢。非常有用。我已经为此工作了好几个星期了!
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