【问题标题】:Arduino + RN-42 Bluetooth module HIDArduino + RN-42 蓝牙模块 HID
【发布时间】:2013-04-21 01:12:58
【问题描述】:

我正在尝试用我的Arduino Mini Pro 和RN-42 HID Bluetooth 模块制作一个“键盘”。我可以用我的MacBook 连接到它,它显示为蓝牙键盘。此外,我可以按下按钮并发送命令。

完美对不对?

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

【问题讨论】:

    标签: c module bluetooth arduino hid


    【解决方案1】:

    我编写了一个 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 上找到 - 随心所欲地使用它!

    【讨论】:

    • 非常感谢。非常有帮助。我已经为此工作了好几个星期!
    【解决方案2】:

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

    您所要做的就是将 ASCII 字符串发送到串行端口 @115200 RN-42 的波特率,剩下的就交给它了。

    Peter 是对的,预装 HID 的 RN-42 非常简单,可以从 sparkfun standalone 甚至 soldered in a board 购买以方便连接。

    【讨论】:

      【解决方案3】:

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

      您所要做的就是将 ASCII 字符串发送到 RN-42 上的串行端口 @115200 波特,剩下的事情就交给它了。所以如果你想Serial1.println("Hello"); 那么Hello(enter) 将被发送到你的Mac。如果这不起作用,则通过上拉 GPIO11 或向 RN-42 发送命令并打开 HID 模式来确保 RN-42 未处于 SPP 模式。

      【讨论】:

      • 我可以发送消息,这不是问题。我想用它来玩游戏。现在我可以发送 Serial.write('a');每次按下该按钮时它都会打印一个“a”。但是由于当我按住一个按钮时它处于循环状态,它会告诉计算机每隔几微秒按一次“a”,而不是实际按住键。如果我做一个while循环,它会按一次键然后立即释放。我需要找出要发送的字节,以告诉计算机我当前正在按住该键。
      • 感谢您的回答。你说得对,我可以发送字符串,这很好用。但是我如何模拟被按住的键呢?因为我打算做一个游戏控制器。计算机不知道我在按住键,它只是看到一堆快速按键而不是一个长按键(也就是被按住的键)。
      【解决方案4】:

      如果您希望 Arduino 向计算机发送键盘按下消息,请使用Keyboard.press() 进行按键操作,使用Keyboard.release() 进行释放。我没有那种类型的 Arduino 或那个蓝牙模块,但由于它把 Arduino 识别为键盘,我认为这应该可以工作......

      【讨论】:

      • 感谢您的输入,但不幸的是,这不适用于所有 Arduino。 “键盘”功能仅适用于 Leonardo。
      • Leonardo(或 Micro 或 Due)的键盘库用于通过 USB 的 HID。据我所知,它不适用于 RN-42。
      猜你喜欢
      • 1970-01-01
      • 2018-08-23
      • 1970-01-01
      • 2016-04-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-19
      • 2018-03-10
      相关资源
      最近更新 更多