用电脑控制Nintendo Switch

本文将介绍运用 Arduino 模拟手柄操作,在电脑端使用 Python 发送指令模拟手柄操作,大大减少人工机械式操作,达到释放双手的效果。

材料

  • 单片机 (Arduino UNO R3 注意 USB 口旁边一定要有六根注脚)
  • USB线Type-A转Type-B(选 UNO R3 带线版就会送了)
  • USB 转 TTL 模块(CH340g)
  • Type C OTG 线
  • 公转母口杜邦线若干

软件包

下载并全部解压
https://kenshin.lanzous.com/b0algmgqh
密码:auah

过程

1. 将软件包中的 Python 和 Flip 安装在电脑上,注意 Flip 需要 Java 1.8,可以在官网下载,如果电脑有 Java 1.7 可能需要先卸载才不会报错(我就是没卸载报错了)。

2. 然后单片机用 USB 线连接电脑,如果电脑识别出设备为 ATmega16u2 直接到第四步,如果识别不错继续玩下看
3. 短接 USB 口旁边的两个触点

打开电脑设备管理器(Win 键+X 或者右键计算机-设备管理器)将未知设备右键,点击更新驱动,选择手动,文件夹设置为 Flip 目录下的 USB 目录,勾选“包括子文件夹”。
4. 安装驱动后识别出设备为 ATmega16u2 后打开 Flip,点击第一个图标,选择 ATmega16u2 确定

然后按第二个图标(或者 Ctrl+U)点击 “Open”,再选择手柄固件“Joystick.hex”,注意路径不能有中文按下“RUN”运行完,断开单片机与电脑的连接。
5. 配置 Python 环境,
方式一:
在cmd下输入: path=%path%;“script 目录” 接着按"Enter"回车键。注意不用打引号。
方式二:
复制你 Python 安装目录下的 script 目录。

然后点击“此电脑(右键)-高级系统设置-环境变量-系统变量-Path(双击)”添加 script 目录。

配置好之后就可以运行“安装库文件.bat“,确保五个库都成功安装
6. 使用 CH340g 连接 Arduino ,接线如图

刚刚刷固件的 USB 线用来插入 switch 模拟手柄用线,Arduino 用 CH340g 连接电脑。
7. 运行示例 simple_example.py ,保证 NSController.py 在同一文件夹内。这段代码作用是连按 A 键十下。

键位对应表(来源wwwwwwzx@bilibili

X Y A B L R ZL ZR 直接原名调用即可, 如ctr.A() 就是按下A键
主页键(h),截图键(c),加号键(p),减号键(m)
按下左摇杆(LS),按下右摇杆(RS)
十字键上(u)下(d)左(l)右(r)
左摇杆上(ls_u)下(ls_d)左(ls_l)右(ls_r)
右摇杆上(rs_u)下(rs_d)左(rs_l)右(rs_r)
然后函数内的数字可以控制按键的时间长短,以秒为单位,非正则保持不松开,如:
ctr.A() :按下A键后马上松开(默认按下0.1秒)
ctr.B(22) :按下B键22秒后松开
ctr.ls_r(-1) 或 ctr.ls_r(0) :将左摇杆向右推并保持,不松开
其他操作
ctr = Controller() 创建一个名为ctr的实例,并自动连接
ctr.release() 松开所有按键和摇杆
ctr.close() 断开控制
ctr.pause(33) 等待33秒
还有一些简单示范如
ctr.quit_app() 退出当前游戏
ctr.AccessBackupSave() 同时按下上+X+B来调用剑盾备用存档 等

后记

脱离电脑控制可以把脚本编译成固件,直接通电就能用。这个方法相对简单,我这种不会编程的也能写脚本(动森买水果那个就是我写的),比安卓手机用 joy-con droid 加上脚本精灵好多了,用手机连接还容易断联

Thanks To:
https://github.com/progmem/Switch-Fightstick
劳资是阿翔@bilibili (脚本来源)
無鸣晓竹@bilibili (可以看看他的手机控制)
wwwwwwzx@bilibili (固件来源)