A virtual HID USB joystick created using ESP32S2/S3/RP2040
- Switch主机 * 1
- ESP32S2/ESP32S3/RP2040开发板 * 1
- 本人测试用设备:
- LOLIN S2 Mini:ESP32S2芯片,单核240MHz,N4R2 12.5元 注意近期有10%左右的网友无法刷入circuitpython官方固件,猜测可能是模块问题,如果担心设备问题,尽量选择Raspberry Pi Pico
- ESP32-S3-DevKitC-1-N16R8:ESP32S3芯片,双核240MHz,N16R8,支持蓝牙 59元
- Raspberry Pi Pico (W): 带W版本 包含网络模块 51元,不带W 25元
- 由于我希望降低大家的使用成本,后续的研发,测试,我将在LOLIN S2 Mini上进行
- USB线(连接主机与开发板) * 1
使用前请一定要看一下
- 模拟NS手柄,控制NS主机
- 支持自定义宏脚本,实现游戏自动化
- 内部集成部分宝可梦剑盾功能的宏脚本
- TCP管理基本功能
-
LCD单色液晶显示支持(已废弃,计划采用WEB方式代替) -
实体按键支持(已废弃,计划采用WEB方式代替) -
Web管理(脚本的启动、停止、参数配置)
-
远程管理功能(首选HTTP服务,其次TCP/UDP或MQTT,尽量不依赖其他服务器或客户端软件,独自实现远程管理功能)
-
通过NS的HDMI输出连接PC端,实现简单图像识别,增强脚本功能
-
宝可梦朱紫脚本制作
直接使用circuitpython官方固件即可,固件下载链接(https://circuitpython.org/downloads)。
-
设备OTG口连接PC,Windows与Mac都可
-
如果设备为 EPS32S3-N16R8 或 LOLIN S2 Mini,可直接使用项目中打包好固件,不需要自行编译,直接进行固件写入操作
-
PC安装docker
-
修改firmware/esp32s3-n16r8/Dockerfile文件:
WORKDIR /root/circuitpython/ports/espressif/boards # https://github.com/adafruit/circuitpython/tree/main/ports/espressif/boards/espressif_esp32s3_devkitc_1_n8r2 RUN cp -r espressif_esp32s3_devkitc_1_n8r2 espressif_esp32s3_devkitc_1_n16r8 && \ sed -i 's/ESP32-S3-DevKitC-1-N8R2/ESP32-S3-DevKitC-1-N16R8/g' espressif_esp32s3_devkitc_1_n16r8/mpconfigboard.h && \ sed -i 's/USB_VID = 0x303A/USB_VID = 0x0F0D/g' espressif_esp32s3_devkitc_1_n16r8/mpconfigboard.mk && \ sed -i 's/USB_PID = 0x7003/USB_PID = 0x00C1/g' espressif_esp32s3_devkitc_1_n16r8/mpconfigboard.mk && \ sed -i 's/USB_PRODUCT = "ESP32-S3-DevKitC-1-N8R2"/USB_PRODUCT = "HORI CO.,LTD."/g' espressif_esp32s3_devkitc_1_n16r8/mpconfigboard.mk && \ sed -i 's/USB_MANUFACTURER = "Espressif"/USB_MANUFACTURER = "HORIPAD S"/g' espressif_esp32s3_devkitc_1_n16r8/mpconfigboard.mk && \ # CIRCUITPY_ESP_FLASH_MODE DIO -> QIO sed -i 's/dio/qio/g' espressif_esp32s3_devkitc_1_n16r8/mpconfigboard.mk && \ # CIRCUITPY_ESP_FLASH_SIZE 8MB -> 16MB sed -i 's/8MB/16MB/g' espressif_esp32s3_devkitc_1_n16r8/mpconfigboard.mk && \ echo 'CIRCUITPY_ESP32_CAMERA = 0' >> espressif_esp32s3_devkitc_1_n16r8/mpconfigboard.mk && \ # QUAD -> OCTAL sed -i 's/CONFIG_SPIRAM_MODE_QUAD/CONFIG_SPIRAM_MODE_OCT/g' espressif_esp32s3_devkitc_1_n16r8/sdkconfig && \ # 2MB -> 8MB sed -i 's/2097152/8388608/g' espressif_esp32s3_devkitc_1_n16r8/sdkconfig
由于官方固件不支持N16R8,所以在N8R2上进行修改。请修改时,参考自己的设备,根据自己设备信息修改。
注:VID与PID改为0x0F0D与0x00C1是依据模拟设备修改,不修改是否可以使用我没做尝试,还是尽量修改。
-
进入firmware/esp32s3-n16r8目录,运行下面脚本进行编译:
docker build . -t circuitpython docker run -d --rm -v $(PWD)/build:/root/build circuitpython
由于网络环境等因素问题,可能有些资源下载比较慢或经常中断,这个问题需要自行解决。
等待很长一段时间后,编译完成,build目录会生成大量文件,保留firmware.bin或firmware.uf2文件即可(依据自己刷入固件的方式)
-
Chrome浏览器打开ESP Web Flasher 页面(https://nabucasa.github.io/esp-web-flasher/)刷写固件
-
ESP32进入固件写入模式(按住0或BOOT,点击RST,松开0或BOOT即可)
-
页面操作,连接设备,Baudrate选择460800 (LOLIN S2 Mini) / 921600 (ESP32S3N16R8)
-
擦除设备,选择bin固件,同时把起始地址改为0x0,开始写入
-
写入完成后双击设备上的RST按钮,或重新插拔设备即可
-
修改src/resources/config.json中的wifi节点,type分为wifi和ap两种模式。
-
把工作目录src下所有文件目录,拷贝至ESP32S3被识别出盘符即可,相同文件目录覆盖
-
下载依赖库
-
本地安装python,并且配置环境变量(python运行目录,pip下载包运行目录加入Path)。
-
运行下面代码:
本地安装circup:
pip3 install circup
esp32安装库:
circup install asyncio adafruit-circuitpython-hid adafruit-circuitpython-ntp
-
配置文件路径:ESP32目录/resources/config.json
采用TCP方式进行管理,默认开启5000端口
后续,删除游戏,并重新安装后,卡顿问题解决,对运行效率有需求的朋友可自行修改脚本。
更新OpenCV图像识别方式,效果如下:
- 燃烧の小宇宙 提供朱紫无限复制道具(1.01版BUG)脚本