0.目录
-
项目要求
-
板卡介绍
-
开发环境
-
功能实现
-
成果展示
-
心得体会
-
附件
1.项目要求
实现一个USB鼠标&键盘复合设备,摇动游戏手柄实现鼠标的移动,一个按键实现左键点击,另一个按键按下实现键盘敲入一串字符"eetree.cn"。
2.板卡介绍
ESP32-S2 WiFi模块是物联网、可穿戴电子设备和智能家居等应用场景的理想选择,另搭配输入控制、输出显示以及传感器感知和控制的套件,使其功能更加完善。
该模块板载了:
-
这是一款2.4 GHz WiFi 模组
-
内置 ESP32S2 系列芯片,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游戏机套件结合使用。
3.开发环境
本次任务使用VSCODE,安装PlatformIO,板卡选择Adafruit Metro ESP32-S2。
4.功能实现
将主要功能拆解为屏幕驱动、按键读取、摇杆读取和USB键鼠三部分。
程序流程图如下图所示:
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电阻网络的方式连接在一起,生成一个模拟电压量。按下任何一个按键都会改变这个模拟电压量的值。
ADC引脚被连接至GPIO1,通过pinMode(AOUT_GPIO, INPUT);将该引脚配置为输入模式,即可在loop()函数中轮询ADC的值,进而判断哪些按键被按下。
4.3 摇杆读取
摇杆使用的是FJ08K-N,摇杆的电阻被连接至RC震荡电路中,电阻阻值将影响输出PWM波的占空比与频率。
占空比可以通过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站演示。
6.心得体会
-
整体开发较为简单,ESP32有完整的例程可以参考。
-
电路图并不是很清楚,MSP430与ESP32的部分叠加在一起有些混乱。
-
ESP32无法直接控制加热电阻,默认状态下加热电路处于加热状态,容易烫手。
7.附件
链接:https://pan.baidu.com/s/1cQmy-eXg5YKvuNltWf2-qg?pwd=wwis
提取码:wwis