手把手教你做一款HID键盘

Posted 嵌入式基地

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了手把手教你做一款HID键盘相关的知识,希望对你有一定的参考价值。

关注v-x-公-众-号:【嵌入式基地
后-台-回-复:【电赛】 即可获资料
回复【编程】即可获取
包括有:C、C++、C#、JAVA、Python、javascriptphp、数据库、微信小程序、人工智能、嵌入式、Linux、Unix、QT、物联网、算法导论、大数据等资料

在这里插入图片描述
原文链接 点击查看

这是一个自定义游戏键盘,带有四个热插拔机械键和可自定义的RGB LED。它由STM32F103Cx微控制器供电,并通过Arduino IDE进行编程。

公众号后台回复:stm32键盘 即可获取全部设计资料

功能概述:

  • 快速STM32F103Cx微控制器可实现低输入延迟。
  • USB全速,轮询速率为1000hz。
  • 可热插拔的键。
  • EEPROM设置存储。
  • 动态密钥自定义(使用Windows用户的GUI)
  • 具有添加更多功能的三种RGB模式。
  • 完全开源。
  • 兼容Arduino。
  • 模块化且易于携带。

设计框图

设计框图

键盘使用STM32F103C8T6作为控制器。由于USB端口上的电源引脚为5V供电,但是该款单片机需要使用3.3V电源供电,因此需要将5V转为3.3V,项目中使用MCP1703T来实现该功能。使用Cherry MX风格的机械开关来作为键盘的按键。另外,还可以通过按键来控制LED的模式、颜色、亮度。

系统原理图

图片

系统PCB

图片

PCB大小为58mm x 59mm。为了能够方便手工焊接,所有的SMD器件均使用0805封装。

图片硬件上提供了STLINK下载接口:
在这里插入图片描述

  • SWDIO-SWDIO
  • SWCLK-SWCLK
  • GND-GND
  • 3V3-3.3V

材料清单:

  • 1个STM32F103CxT6
  • 2个7.3mm高的触觉开关
  • 4个反向安装4-PLCC LED
  • 6个0805 10K欧姆电阻
  • 4个0805 68欧姆电阻
  • 5个0805 1.5K欧姆电阻
  • 3个N沟道SOT-23-3 3.3V电平MOSFET
  • 3个0805 100nF电容器
  • 2个0805 1uF电容器
  • 2个0805 20pF电容器
  • 1个0805 4.7uF电容器
  • 1个MCP1703T-3302T / DB 3.3V稳压器
  • 1个1210 500mA PTC自恢复保险丝
  • 1个USB3090微型USB A / B端口
  • 1x 90度接头排
  • 1个8MHz HC-49晶体
  • 4个圆形橡胶保险杠
  • 4个Kailh热插拔插槽
  • 4个Cherry MX RGB或同等开

安装STM32Duino

打开arduino ide,打开首选项,添加开发板管理网址

http://dan.drown.org/stm32duino/package_STM32duino_index.json

图片

添加完成之后,打开开发板管理器,搜索STM,安装STM32F1xx/GD32F1xx

图片

STM32Duino内的USB库已经提供的USB HID功能,但其轮询间隔为10ms,因此我们还要对其进行修改。

  • 进入目C:\\Users{username}\\AppData\\Local\\Arduino15\\packages\\stm32duino\\hardware\\STM32F1{版本名称}\\libraries\\USBComposite下,打开usb_hid.c文件
  • 搜索bInterval,将该值修改为0x01。轮询间隔修改为1ms

图片

代码配置说明

  • 去抖时间
    这是检测到按键后按键拒绝注册按键释放的时间。需要一个反跳时间,因为机械开关在按下后自然会“反跳”,如果不使用反跳计时器,可能会在很短的时间内记录多次错误的按键。在这种情况下,设置防抖计时器的方式不会影响延迟,因此更改此值不会使按键延迟更多。Cherry指定反弹时间为5毫秒,该值应适用于大多数机械开关。

  • RGB LED
    禁用此选项将禁用所有与RGB LED控制有关的代码。这可能会节省一些CPU周期,但不足以有效地更改键盘的性能。

  • 串行通讯
    禁用此选项将不允许通过串行或驱动程序软件对键盘进行编程,但是由于微控制器不再需要不断侦听串行命令,因此它将节省一些CPU周期。尽管理论上微控制器在不启用串行的情况下应该运行得更快,但是速度差异可以忽略不计。

  • RGB LED颜色和图案
    如果需要修改RGB LED颜色,则必须直接编辑代码。在checkRGBMode()函数下定义的颜色存储所有的灯光模式0颜色(静态),而incrementColor()下的颜色存储灯光模式2(颜色循环)颜色。
    更改颜色,只需更改rgbBrightness []值。这些值以百分比表示该颜色的亮度,其中0为0%,1为100%。rgbBrightness []中的1-3数组分别表示红色,绿色和蓝色。

  • ledDelay:
    这表示在灯光模式2下颜色切换过程之间的延迟,这意味着如果延迟较高,则颜色将缓慢切换,而如果延迟较低,则颜色将更快切换。

  • colorIncrementDelay
    这表示在灯光模式2下切换颜色之间的时间。

使用键盘

图片

  • 该键盘的使用非常简单,直接插入电脑USB口,即可作为正常,低延迟,轮询速率为1000hz的HID键盘使用。同时,还可以通过按键修改LED的模式和颜色。
  • 按键说明:

按下模式按钮的时间少于0.3s会更改照明模式。 按下按钮超过0.3s但少于5s会更改LED颜色,可以通过代码进行自定义。
按住按钮超过5s将开始改变LED的亮度,并且按住按钮时亮度将以1s的增量下降。亮度将在释放按钮时设定。

  • 灯光模式:

静态色
按下键时点亮
交替(默认固件在红色和蓝色之间,但是可以有多种颜色) 系统的所有配置信息都是存放在EEPROM中。

配置按键

若想能够随时、方便的修改按键对应的键值,则需要开启程序中的串口通信功能。有了该功能后,系统将可以通过串口命令对其进行配置。也可通过上位机软件对其进行配置

  • 串口命令:“s:{key number}:{character}:”

“s:1:k:”,将按键1设置为k

  • 使用上位机软件

图片

上位机软件说明

图片

  • 连接设备后,可以使用该程序即时设置按键绑定。为此,请使用名为"keybinds"的面板。您可以通过下拉菜单(参考帮助-键映射的键映射)选择键编号,然后可以通过文本框输入键绑定值。目前仅接受Ascii字符和数字,不幸的是,冒号不是可行的选择,因为它被用作分隔符。如果要禁用该键,只需在文本框中什么也不放,然后按set键即可。

  • 填写完两个选项后,只需按设置按钮,如果一切顺利,就可以设置按键绑定。即使断电,此新设置也将保存在微控制器上。

  • 原始序列号和状态
    这两个部分用于诊断目的。原始串行是设备发送回的串行数据的显示,状态面板显示了存储在设备上的不同设置。

组装

  • 效果图
    在这里插入图片描述
  • 底板

图片

  • 实物图

图片

以上是关于手把手教你做一款HID键盘的主要内容,如果未能解决你的问题,请参考以下文章

手把手教你做智能LED灯 LED灯的外形结构

手把手教你做一个简单的代理服务器

手把手教你做文本挖掘 (文末有惊喜)

手把手教你做视频播放器

手把手教你做视频播放器

手把手教你做接口测试