Funpack3-1活动基于XG24-EK2703A低功耗蓝牙键盘鼠标复合设备开发
随着智能设备的普及,对于多功能、便携式输入设备的需求日益增长。传统的鼠标和键盘在使用时往往受限于物理连接,而蓝牙技术的成熟为实现无线输入设备提供了可能。本项目旨在开发一款集成蓝牙鼠标和键盘功能的复合设备,以满足用户在移动设备或桌面环境中对便
标签
Funpack活动
接口
EFR32MG24
FunPack3-1
XG24-EK2703A板卡
小屁孩06
更新2024-03-05
35

1. 项目简介

项目背景


随着智能设备的普及,对于多功能、便携式输入设备的需求日益增长。传统的鼠标和键盘在使用时往往受限于物理连接,而蓝牙技术的成熟为实现无线输入设备提供了可能。本项目旨在开发一款集成蓝牙鼠标和键盘功能的复合设备,以满足用户在移动设备或桌面环境中对便捷输入的需求。

本项目以硬禾学堂联合DigiKey发起的Funpack第三季第一期“得捷购”活动的任务2为需求使用Silicon Labs的XG24-EK2703A板卡进行鼠标、键盘复合设备进行开发实验项目。


任务实现目标功能

  • 滚轮模拟:设备上的两个按键将模拟鼠标滚轮的上下翻页功能。短按其中一个按键实现向上翻页,短按另一个按键实现向下翻页。
  • 字符输入:同时长按两个按键2秒,设备将通过蓝牙发送预设的字符序列"EETREE.CN"。这一功能可以用于快速输入特定的文本或作为快捷键使用。


2. 硬件设备介绍

XG24-EK2703A板卡

G24-EK2703A是一款基于EFR32MG24片上系统的开发套件,具备超低成本、低功耗和小巧的特点。该套件支持2.4GHz无线通信,兼容蓝牙LE、蓝牙mesh、Zigbee、Thread和Matter协议,为无线物联网产品的开发和原型制作提供了极大的便利。

整个评估套件最核心部分是EFR32MG24B210F1536IM48无线SoC芯片,是使用蓝牙低功耗和蓝牙网状网络实现物联网无线连接的理想选择,适用于智能家居、照明和便携式医疗设备产品。该芯片是EFR32MG24无线SoC芯片家族系列中的中高端型号,以ARM Cortex-M3为核心、主频为78MHz且支持2.4GHz无线通信,带有1536KB闪存和256KBRAM,并且还搭载了AI/ML硬件加速功能,能够满足在嵌入式系统中部署轻量级AI应用。

该板卡套件所有的例程和相应的板卡资料都集成在了SDK开发包中,辅以配套的Simplicity Studio Version 5工具,只需要将SDK下载进Simplicity Studio Version 5中就可以进行例程的演示,操作方便简单,板卡接口如下图所示:


套件特性

  • 一个USB接口
  • 一个板载SEGGER J-Link 调试器,支持SWD
  • 两个LED和两个按钮
  • 虚拟COM端口
  • 数据包跟踪接口(PTI)
  • 一个支持外部硬件连接的mikroBus插座和一个Qwiic连接器
  • 32 位 ARM Cortex-M33,78 MHz最高工作频率
  • 1536 kB 闪存和 256 kB RAM


硬件组件 如下图所示:




3. 项目方案

根据项目需求,实现页面滚动和发送字符串功能,其实可以采用两种方案实现,一种是实现基于BLE的蓝牙鼠标复合设备,各单独实现键盘操作和鼠标操作功能,另一方案是只实现键盘设备,发送字符串和PageUP、PageDown按键实现页面滚动功能,本次实现主要采用方案1.


  • 方案1:

方案描述:
根据项目需求,实现基于BLE的蓝牙鼠标复合设备, 算法逻辑功能实现主要按键中断和定时器中断触发,通过访问 状态机 状态情况,判定用户所触发的操作功能,状态机:键盘按键状态机记录按键状态结合定时器实现状态转移,任务状态机记录所触发的操作任务。

当按键中断发生时,首先判断是单个按键按下,还是第二个按键按下。单个按键按下时,启动定时器1(超时时间1秒),这里默认认定,当一个按键按下1秒时间内,没有第二个按键按下,则认为是只有单个按键按下,触发BTN0按下或BTN1按下的鼠标滚动功能;当定时器1未触发超时中断时即有第二个按键按下,则停定定时器1,启动定时器2进行定时2秒,即按题目要求按下2秒发送EETREE.CN字符串,当定时器2超时满足发送字符串触发条件,进行字符串发送任务状态设定。当两个定时器任意一个超时中断发生时,触发GATT协议报告发送操作,程序流程如下图所示:


程序流程图:


方案2
算法逻辑功能和定时器中断触发流程与方案1相同,只是在发送操作时,上下翻页功能与发送字符串功能均通过键盘发送,本人做过相关实验,可以实现相关功能。

4. 模块功能实现

4.1 开发环境准备

首先下载安装Simplicity Studio5,更新安装G24-EK2703A板卡开发所需的SDK,本项目使用SDK为gecko_sdk 最新版本是 4.4,正常在IDE配置过程中,IDE会提示安装最析的SDK组件,但是由于网络环境不佳,可能会自动安装失败,如果遇到安装失败情况,请按离线SDK安装方式进行安装:

  • 进入 sdk 界面下载最新版本SDK,目前 geckosdk 最新版本是 4.4 https://github.com/SiliconLabs/geckosdk
  • 打开 Simplicity Studio,安装 sdk:


  • 扩展应用示例配置加载,如果你要使用到 https://github.com/SiliconLabs/bluetooth_applications里面示例项目,又不能自动化安装SDK,这样你有可能在示例库中找不到示例项目,参照如下流程对示例项目进行手动添加:



4.2 项目初始化

Step 1. 
查看丰富的例程,从示例中选择一个与你所做项目相关的示例 创建工程,如下所示:

Step 2.
项目初始化流程参照https://github.com/SiliconLabs/bluetoothapplications/tree/master/bluetoothhid_keyboard步骤进行配置初始化:


4.3 按键功能


  • 按键硬件连接如下图所示,BTN0和BTN1 分别接PB2和PB3端口,以上拉电阻进行上拉

  • 按键配置,添加BTN1:

[Platform] → [Driver] → [Button] → [Simple Button] → default instance name: btn1.

  • 按键中断及按键状态代码:


4.4 定时器功能


  • 定时器配置,添加相关服务组件: [Application] → [Utility] → [Timer]


  • 定时器相关代码:

4.5 键盘鼠标报告


  • 技术方案研究,通过阅读低功耗蓝牙设备相关文档,可以找到单独键盘和鼠标REPORT MAP定义方法,找了一些BLOG说的不具体,后来通过ChatGPT4对相关问题进行提问,解决相关问题与疑惑:

  • GATT配置:

  • 键盘鼠标Report Map:


报告ID是在报告的开始处的一个字节,用来标识单个报告的身份。这个字节的值通常是
唯一的,并且不同的设备(如键盘,鼠标等) 将会被分配不同的报告ID。

在Human Interface Device (HID)协议中,Report Map是用来定义设备如何交换数据
的。而Report 1D分配给各个独立的报告,用于辨识该报告代表哪个具体的设备,例如
键盘或鼠标。下面的例子展示了如何在键盘和鼠标的Report Map中指定Report 1D:

键盘Report Map:

0x05, 0x01, // USAGE_PAGE (Generic Desktop)
0x09, 0x06, // USAGE (Keyboard)
0xa1, 0x01, // COLLECTION (Application)
0x85, REPORT_ID, // REPORT ID
... //其他相关定义
Oxc0。 // COLLECTION END
  • 键盘鼠标报告任务发送相关代码:


5. 功能演示

  • 复合设备连接



  • 单按键上翻与下翻功能:看右侧进度条,实现了上翻功能


  • 双按键字符串发送功能

6. 活动总结与未来计划建议

首先, 感谢硬禾学堂联合DigiKey发起的Funpack第三季第一期“得捷购”活动,让我有机会参与实现有关蓝牙通信功能的开发与实践,在项目开发过程中,遇到一些问题和挑战,也通过咱们的群组得到帮助与处理,再次通过本次项目实践也总结出提高项目开发效率的一些方法:

  • 遇到问题和挑战:先找身边的资源,官方网站,官方GIT项目的ISSUE进行排查解决;
  • 破局方法:要利用更强大的检查工具、网站进行相关资源获取,必要时使用ChatGPT等大语言模型进行提问、分析、推理得出实验方案进行测试,本项目中关于复合设备Report Map的定义和报告发送方面的疑问大语言模型给了我很好的回答;
  • 未来计划建议:尝试使用该设备进行IOT方面开发,Simplicity Studio5开发工具集图形化操作比较方便,当出现深层次问题时不容易了解到内部逻辑以及中断触发调用关系,如果能完善相关文档和流程会更好。


希望硬禾学堂和DigiKey越办越好。









附件下载
bluetooth_hid_keyboard_commit.zip
源代码
团队介绍
小屁孩
评论
0 / 100
查看更多
目录
硬禾服务号
关注最新动态
0512-67862536
info@eetree.cn
江苏省苏州市苏州工业园区新平街388号腾飞创新园A2幢815室
苏州硬禾信息科技有限公司
Copyright © 2023 苏州硬禾信息科技有限公司 All Rights Reserved 苏ICP备19040198号