850|4

65

帖子

0

TA的资源

一粒金砂(中级)

SparkFun Pro nRF52840 Mini 蓝牙键盘 [复制链接]

本章我们将学习如是使用SparkFun Pro nRF52840 Mini 来快速构建一个HID设备蓝牙键盘。

在开始之前,说一句题外话。 不得不说这个nRF52840 的Arduino库实在是太好用了, 如果自己DIY的话,非常推荐购买这个芯片的单片机来DIY具有蓝牙功能的作品。

在上章节我们已经详细的介绍了如何使用SparkFun Pro nRF52840 Mini实现蓝牙数据的发送,那么本节我们看下如何基于上节的代码实现蓝牙键盘的功能

 

正文

本章提供的代码是一个演示使用nRF52840模块的HID键盘应用程序的示例。HID键盘在各种电子设备中广泛使用,从计算机到智能手机,为用户提供无缝的输入体验。

功能:

  1. 蓝牙连接: 代码建立了BLE连接,使Bluefruit52模块能够与其他蓝牙设备进行无线通信。
  2. HID键盘仿真: 通过HID功能,模块可以仿真标准键盘,从而向连接的设备发送按键信息。
  3. LED控制: 代码包括根据连接设备发送的命令来控制LED的功能,展示了双向通信的可能性。

实现:

  1. 设置:

    • 代码初始化Bluefruit模块,并设置必要的BLE服务,包括设备信息服务(DIS)和HID。
    • 它配置广告数据包以宣布HID键盘服务,并开始广告以进行设备发现。
    • 连接间隔和功率设置经过优化,以实现性能和兼容性。
  2. 主循环:

    • 循环检查来自串行监视器的键盘输入。当输入字符时,它将使用HID功能将其作为按键发送。
    • 代码处理按键按下和释放,确保键盘行为正常。
  3. 回调:

    • 定义一个回调函数来回显当前的蓝牙连接状态。

 

接下来我将介绍如何实现上述涉及的功能

 

设置:

 

我们可以保留上节的大部分功能函数,仅仅需要在初始化蓝牙连接之后,初始化HID设备

image.png  

上图为对比HID的初始化和没有HID的初始化。左侧为带HID设备的初始化,右侧为仅仅只有蓝牙功能的初始化。而实现这么多功能只需要引入bluefruit.h 库, bluefruit.h 内封装了我们所需的所有功能


 

主循环:

 

在程序的主循环中,程序会一直从串口检测是否有数据输入,如果有数据输入的话,则把数据的输入作为键盘的输入。并且发送的远程的蓝牙设备同时改变按键的按下状态,使其在下一次循环的时候释放这个按键并且等待下一次按下。

void loop() 
{
  // Only send KeyRelease if previously pressed to avoid sending
  // multiple keyRelease reports (that consume memory and bandwidth)
  if ( hasKeyPressed )
  {
    hasKeyPressed = false;
    blehid.keyRelease();
    
    // Delay a bit after a report
    delay(5);
  }
    
  if (Serial.available())
  {
    char ch = (char) Serial.read();

    // echo
    Serial.write(ch); 

    blehid.keyPress(ch);
    hasKeyPressed = true;
    
    // Delay a bit after a report
    delay(5);
  }
}

回调

 

setKeyboardLedCallback function主要是用于蓝牙的状态显示,当蓝牙未连接的时候,LED会一直处于闪烁状态。当蓝牙连接成功之后LED将停止闪烁。

void set_keyboard_led(uint16_t conn_handle, uint8_t led_bitmap)
{
  (void) conn_handle;
  
  // light up Red Led if any bits is set
  if ( led_bitmap )
  {
    ledOn( LED_RED );
  }
  else
  {
    ledOff( LED_RED );
  }
}

 

接下来我们将程序烧录到开发板中,并且使用手机连接上这个蓝牙设备。 使用串口助手向开发板发送消息的同时观察手机上的响应

6月19日

 

源码文件:

blehid_keyboard.ino (3.83 KB, 下载次数: 0)
此帖出自RF/无线论坛

最新回复

蓝牙最小窗口延时是7.5ms,另外蓝牙属于有连接的协议,通信负担比RF大,蓝牙的优势也就是自动跳频和整体的无线连接 、传输规范化   详情 回复 发表于 2024-7-6 18:00

回复
举报

6027

帖子

2

TA的资源

版主

为啥现在很多无线键盘都要配接收器,不直接用蓝牙?

此帖出自RF/无线论坛

点评

我猜有的接收器用的不是蓝牙可能是2.4G模块  详情 回复 发表于 2024-6-19 17:10

回复

65

帖子

0

TA的资源

一粒金砂(中级)

wangerxian 发表于 2024-6-19 11:38 为啥现在很多无线键盘都要配接收器,不直接用蓝牙?

我猜有的接收器用的不是蓝牙可能是2.4G模块

此帖出自RF/无线论坛

点评

是的,但是蓝牙的频道也是2.4GHz。难不成那种2.4GHz优势更大,延时更低?  详情 回复 发表于 2024-6-19 19:55

回复

6027

帖子

2

TA的资源

版主

御坂10032号 发表于 2024-6-19 17:10 我猜有的接收器用的不是蓝牙可能是2.4G模块

是的,但是蓝牙的频道也是2.4GHz。难不成那种2.4GHz优势更大,延时更低?

此帖出自RF/无线论坛

点评

蓝牙最小窗口延时是7.5ms,另外蓝牙属于有连接的协议,通信负担比RF大,蓝牙的优势也就是自动跳频和整体的无线连接 、传输规范化  详情 回复 发表于 2024-7-6 18:00

回复

156

帖子

2

TA的资源

一粒金砂(高级)

wangerxian 发表于 2024-6-19 19:55 是的,但是蓝牙的频道也是2.4GHz。难不成那种2.4GHz优势更大,延时更低?

蓝牙最小窗口延时是7.5ms,另外蓝牙属于有连接的协议,通信负担比RF大,蓝牙的优势也就是自动跳频和整体的无线连接 、传输规范化

此帖出自RF/无线论坛

回复
您需要登录后才可以回帖 登录 | 注册

猜你喜欢
随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
快速回复 返回顶部 返回列表