用ESP32实现一个USB键盘鼠标设备
实现一个USB鼠标&键盘复合设备,摇动游戏手柄实现鼠标的移动,一个按键实现左键点击,另一个按键按下实现键盘敲入一串字符"eetree.cn"
标签
嵌入式系统
显示
USB
ESP32
寒假一起练
MDYi
更新2023-03-27
北京交通大学
1160

0.目录

  1. 项目要求

  2. 板卡介绍

  3. 开发环境

  4. 功能实现

  5. 成果展示

  6. 心得体会

  7. 附件

 

1.项目要求

实现一个USB鼠标&键盘复合设备,摇动游戏手柄实现鼠标的移动,一个按键实现左键点击,另一个按键按下实现键盘敲入一串字符"eetree.cn"。

 

2.板卡介绍

ESP32-S2 WiFi模块是物联网、可穿戴电子设备和智能家居等应用场景的理想选择,另搭配输入控制、输出显示以及传感器感知和控制的套件,使其功能更加完善。

该模块板载了:

  • ESP32-S2-MINI-1模组

  • 这是一款2.4 GHz Wi­Fi 模组

  • 内置 ESP32­S2 系列芯片,Xtensa® 单核 32 位 LX7 微处理器

  • 内置芯片叠封 4 MB flash,可叠封 2 MB PSRAM

  • 37 个 GPIO,具有丰富的外设

  • 板载 PCB 天线

配套的ESP32 S2 开发板除了ESP32wifi模组之外还集成了USB TYPE -C接口,两个按键,一个电源指示灯,一个用户LED灯,2排10pin的排针,将重要IO引出。使用USB供电或通过排针3.3V供电。

ESP32-S2 是一款高度集成、高性价比、低功耗、主打安全的单核 Wi-Fi SoC,具备强大的功能和丰富的 IO 接口。使用乐鑫ESP-IF开发环境,我们可以通过USB对其编程,作为带wifi的MCU单独使用,也可以烧录AT固件,作为WiFi透传模块与RP2040游戏机套件结合使用。

Fis76JnDCgZixkiVDU8POkM7Q3P0

FjGdCrpZi69GCcU70_4GQnx1bMl3

 

3.开发环境

本次任务使用VSCODE,安装PlatformIO,板卡选择Adafruit Metro ESP32-S2

 

4.功能实现

将主要功能拆解为屏幕驱动、按键读取、摇杆读取和USB键鼠三部分。

程序流程图如下图所示:

FnSn0Q6Z8y8oj8dkTPuhYhhsLdni

4.1 屏幕驱动

屏幕使用1.54寸TFT-LCD屏,分辨率128x128。

屏幕驱动使用TFT_eSPI库,在User_Setup_Select.h中注释掉其他屏幕配置,使用自定义配置。

User_Setup.h文件中进行自定义配置,主要内容如下:

#define ST7735_DRIVER
#define TFT_WIDTH  128
#define TFT_HEIGHT 128
#define ST7735_GREENTAB3
#define TFT_SCLK 41
#define TFT_MOSI 21
#define TFT_RST  18
#define TFT_DC   17
#define TFT_CS   13
#define TFT_BL   -1
#define TOUCH_CS -1

如果不添加“#define ST7735_GREENTAB3”会出现像素点偏移的问题。

字体与SPI配置保持默认即可。

编译后可先测试屏幕能否点亮,如果不能点亮注意使用的引脚是否正确。

4.2 按键读取

IO扩展板上的1个按键和旋转编码器的3个输入端口是通过R-2R电阻网络的方式连接在一起,生成一个模拟电压量。按下任何一个按键都会改变这个模拟电压量的值。

FmkWJnmFWssV4LETiYwTCiAL8NBI

ADC引脚被连接至GPIO1,通过pinMode(AOUT_GPIO, INPUT);将该引脚配置为输入模式,即可在loop()函数中轮询ADC的值,进而判断哪些按键被按下。

4.3 摇杆读取

摇杆使用的是FJ08K-N,摇杆的电阻被连接至RC震荡电路中,电阻阻值将影响输出PWM波的占空比与频率。

FrYTWEMExseJth-SGmh5_INNK4el

占空比可以通过PWM_Value = pulseIn(PWM_GPIO, HIGH);直接读取。

频率则通过中断计算IO翻转时间,进而计算占空比。

void blink() {                      //中断函数blink()
    time1 = time2;                  //保留上一次数值
    time2 = micros();               //读取现在的时间数值
    time_ = time2 - time1;          //计数两个下降沿之间的所经过的时间
    Freq = 1000000.0 / time_;       //计算频率  pl = 1/(time_/1000)  时间的倒数
}

得到占空比与频率后即可反推摇杆的位置。

4.4 USB键鼠

键鼠控制通过ESP32中USB库实现。

#include "USB.h"
#include "USBHIDKeyboard.h"
#include "USBHIDMouse.h"

C:\Users\……\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.6\libraries\USB路径下可以找到该库与例程。

稍作修改即可实现键盘与鼠标控制。

 

5.成果展示

视频见B站演示。

Fu-BUdrEp4cIaagTX41nR1j4HmUi

 

6.心得体会

  • 整体开发较为简单,ESP32有完整的例程可以参考。

  • 电路图并不是很清楚,MSP430与ESP32的部分叠加在一起有些混乱。

  • ESP32无法直接控制加热电阻,默认状态下加热电路处于加热状态,容易烫手。

 

7.附件

链接:https://pan.baidu.com/s/1cQmy-eXg5YKvuNltWf2-qg?pwd=wwis

提取码:wwis

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