利用ESP32芯片DIY有线键盘转无线键盘模块软键篇 – 哔哩哔哩

未分类 徐 自远 1206℃

利用ESP32芯片DIY有线键盘转无线键盘模块软键篇



hi,大家好。欢迎来到大熊实验室。上篇文章说了硬件部分,那这篇文章主要讲解软件部分如何实现无线键盘。

在上篇文章说我说过了键盘转无线模块的硬件设计,那这次就来说说软件部分。ESP32软件的开发并没有使用乐鑫原厂的SDK来开发,原因有这么几个:

第一:每个芯片都有自己的一套开发环境,我的电脑上安装的东西实在太多了。正好乐鑫官方对Arduino有了很好的支持。

第二:使用arduino开发的话没有什么学习成本,同时有很多通用的库可以使用,省时省力。

::__IHACKLOG_REMOTE_IMAGE_AUTODOWN_BLOCK__::0

其实关于ESP32作为蓝牙HID设备部分,官方的代码里面是有相关库的,只是我们平时没仔细去看,目录层级比较深可能不好找,具体层级我贴出来。

::__IHACKLOG_REMOTE_IMAGE_AUTODOWN_BLOCK__::1

那么,说了这么多。我们到底要怎么去实现第一步,将ESP32作为蓝牙键盘设备呢。其实可以直接用官方的库,但是有些麻烦,于是为了方便大家使用我其实去基于官方库封装了另一个库。这个库作用也很键盘,屏蔽掉多余的操作,只留下了这次项目需要的几个接口。

  1. 启动蓝牙HID
  2. 上报电量信息
  3. 上报HID报文
  4. 接收HID报文下发给键盘
::__IHACKLOG_REMOTE_IMAGE_AUTODOWN_BLOCK__::2

蓝牙部分其实没有什么好说的,都是非常固定的东西。主要开始将ch9350报文部分吧。

作为ESP32读取USB键盘信息的中间芯片,说实话CH9350做的并不好,国产芯片真的是有各种各样的问题(预告一下,下一个版本我会使用CH579F做一个更小的转换模块)。首先,CH9350有很多个工作模式,这几个模式中最终我使用了模式2,这点如果小伙伴们去按照硬件打板的话要注意了。至于各个模式的区别除了模式0/1和其他模式区别很大,剩下的几个模式没发现有特别大的区别,这个文档中也是有描述。

::__IHACKLOG_REMOTE_IMAGE_AUTODOWN_BLOCK__::3
::__IHACKLOG_REMOTE_IMAGE_AUTODOWN_BLOCK__::4

说一下我为什么选择模式2,当ch9350工作在模式0/1时,下位机的ch9350不不断发送请求帧直到上位机相应的停止发送命令。

::__IHACKLOG_REMOTE_IMAGE_AUTODOWN_BLOCK__::5

其实如果我们不对键盘进行控制的话,直接发送请求停止上报的数据帧也没什么。但是实际上我们是需要控制键盘的,比如键盘上有大小写锁定显示灯,如果我们不控制键盘那么这个灯你就永远控制不了。但是,我们的数据是在循环中读取的,而CH9350的状态进行切换时会不断发送请求帧,这就导致了代码实现上要考虑太多种情况,非常麻烦。关键一点是,CH9350本身就不太稳定,所以为了不考虑处理这些问题,我就直接忽略掉状态0/1了。

究竟是怎么从CH9350读取数据的呢?

我利用了ESP32的串口2,因为串口1是用来烧录用的。

::__IHACKLOG_REMOTE_IMAGE_AUTODOWN_BLOCK__::6

在初始化系统的时候,将蓝牙回调传入。回调作用是当键盘大小写等锁定时我们的ESP32能够接收到,当接收到以后我们直接去下发报文给CH9350让它去控制键盘亮锁定灯,这里需要注意,CH9350有时候状态切换很快,有时候状态切换很慢。

::__IHACKLOG_REMOTE_IMAGE_AUTODOWN_BLOCK__::7

具体下发给CH9350的键盘锁定报文,官方给的PDF文档我看得云里雾里,但是幸好论坛里有人问过官方人员得到的回答是:

::__IHACKLOG_REMOTE_IMAGE_AUTODOWN_BLOCK__::8

也就是说下发给CH9350的报文要有11个字节,同时状态的实际内容要在第8个字节,这也就是我代码里为什么这么写的原因

::__IHACKLOG_REMOTE_IMAGE_AUTODOWN_BLOCK__::9

然后我用4层if判断去读取真实键盘数据并发送,篇幅原因不展开了。直接贴源码

::__IHACKLOG_REMOTE_IMAGE_AUTODOWN_BLOCK__::10
::__IHACKLOG_REMOTE_IMAGE_AUTODOWN_BLOCK__::11

 

利用ESP32芯片DIY有线键盘转无线键盘模块软键篇 – 哔哩哔哩https://www.bilibili.com/read/mobile?id=8840490&share_token=1f8c7411-cfba-475b-bc5b-11af5c920e36

转载请注明:徐自远的乱七八糟小站 » 利用ESP32芯片DIY有线键盘转无线键盘模块软键篇 – 哔哩哔哩

喜欢 (5)

苏ICP备18041234号-1 bei_an 苏公网安备 32021402001397号