怎么用电脑控制Switch-用电脑控制Switch教程
本文将介绍如何运用单片机作为中介,从PC/Mac/Linux端控制switch的按键操作。
更新
增加孵蛋脚本(hatch_egg.py)可以自行切换来孵化任意圈数的宝可梦。该脚本使用旷野地带的孵蛋屋,使用前清空默认盒子,只保留一只同行(例如火躯),并打开菜单后,连续按A能默认飞到旷野地带的蛋屋。开始代码时退出到大地图即可。
增加自动放生脚本(release.py)可以自行修改需要放生盒子内的宝可梦数,盒子内需从左到右紧密排布
增加自动刷日期脚本(change_date.py)可以自行修改运行次数。为了刷乱数帧,需先触发VS对战bug
增加自动四大天王脚本(league.py)
默认已知
1. 刷固件进单片机 参见这里
2. 如何运行python代码
3. 基本编程基础。实际上十分简单,照葫芦画瓢即可,我也提供了一些样例,例如 advance_frame.py 是宝可梦剑盾团体战乱数连续刷帧(3帧)的按键流程写法
硬件需求
1. 单片机 (Arduino UNO R3)
2. USB 转 TTL 模块 (FT232RL)
3. USB 线若干 (例如USB Type B 转 Type A, mini USB 转 Type A这些) 导线若干
加起来几十块就能搞定
软件需求
可以从我的fork里下载:https://github.com/wwwwwwzx/Switch-Fightstick
注:我改的版本可以同时按下多个按键 这样可以在旷野地带绕圈(参考circle_in_wild_area.py)
1. Joystick.hex (我已经编译好了atmega16u2的版本,直接刷进Arduino UNO R3即可)
2. NSController.py(python类文件,基本写好了接口,其他代码需要调用到它)
3. Python样例,连同上一个文件见 example 文件夹
4. 安装pyserial,命令行 pip install pyserial 即可
连线
控制方向如下:
电脑端(PC/Mac/Linux) -> USB到TTL模块 -> 单片机 -> [Switch底座 (充电或视频采集用,非必须) ->] -> Switch
连线图
其中USB转TTL模块与单片机的连线见图示 (注意电源线VCC和地线GND不要连错,有些模块可能需要3.3V 需要看清说明)
使用方法
1)将我提供的Joystick.hex刷入单片机中 (只需一次即可,以后就不用再刷了)
注:此时单片机直接连电脑
2)按上图连线,并断开其他手柄的连接
3)运行示例 simple_example.py ,保证NSController.py在同一文件夹内
这段代码作用是连按A键十下
如果检测到多个硬件(“Found multiple devices”),且不是第一个,把对应USB模块的地址带上引号作为字符串输入到Controller 的括号里即可(通过插拔模块可以分辨)
例如看到
Found multiple devices:
/dev/cu.usbserial-A50285BI
/dev/cu.usbserial-AO0099VT
而第二个是你连switch的,那么把第三行修改成 ctr = Controller('/dev/cu.usbserial-AO0099VT') 再次运行即可
如果没有响应,可以尝试对调一下TX RX的接线。指令发出的时候模块上TX RX两个灯都会亮
4)如果成功了,那可以试试参考我的样本编写复杂的自动化流程了。
键位对应表
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来调用剑盾备用存档 等
总结
(1)这样就不用为了实现不同的功能而反复刷固件,只需在电脑上运行不同python代码段即可。孵蛋圈数不同也可以自己调。有些地方可以自行减少等待时间提高效率,有些地方增加时间提高稳定性。自由度增加许多。
(2)为了编写自己的固件也不用反复调试操作时机的时间轴(在原本程序构架上实现也不是很直觉)【我是为了之后可能的其他机械(乱数)操作,又懒得反复调时间就这么搞了】
(3)将来可能可以写个app 用键盘实时控制switch
(4)结合采集卡读出画面,甚至还可以反复读档在LGPE里刷闪超梦三鸟等