本教程需要你拥有一张ESP-32
、STM32
或者CH32
开发板。并且本文只基于ESP-32
进行讲解。
1 前言
本文只是一个粗浅的教程,详细可以加QQ群946057081
讨论。
在开始正文前,我想先列举一下我尝试过的方案。
- NXBT:这是目前最火的项目,但是它要求使用树莓派或者linux系统的PC。
树莓派太贵,所以我没采用。
之后我又折腾过WSL
、VMWare
、VirtualBox
,但是都没成功。
VMWare
是我最接近成功的一次,有兴趣各位可以试试。
而且此项目年久失修,我估计switch到16.0
固件以后就没法用了。 - NintendoSwitchController: 纯日语项目,很不友好,需要
Arduino Leonardo
,贵。 - EasyCon:本文主角。支持多种单片机,价格控制在
50元人民币
以内,可以自制脚本,接上采集卡还能使用图像识别(采集卡要另外买,差不多200来块),功能强大。
2 准备工作
2.1 下载整合包
首先,你需要下载整合包。
这里我提供了交流群中2022年12月更新的文件:
{{< tabs >}}
{{< tab “ESP-32” >}}
{{< button label=“点击下载ESP32整合包” link=“https://cdn.hluvmiku.tech/download/ESP32.zip” style=“solid”>}}
{{< /tab >}}
{{< tab “STM32” >}}
{{< button label=“点击下载STM32整合包” link=“https://cdn.hluvmiku.tech/download/STM32.zip” style=“solid”>}}
{{< /tab >}}
{{< tab “CH32” >}}
{{< button label=“点击下载CH32整合包” link=“https://cdn.hluvmiku.tech/download/CH32.zip” style=“solid”>}}
{{< /tab >}}
{{< /tabs >}}
你可以根据自己的需求选择下载不同的文件。
2.2 购买对应的开发板
建议根据下载的整合包里的PDF文件购买开发板。
2.2.1 ESP-32
我使用的是ESP-32
。
请注意不要购买ESP32-Cx
、 ESP32-Sx
型号。
并且最好购买带有`cp2102关键字的开发版。
薄膜键盘可以不用买,但是数据线一定要买,是比较老的那种接口,具体可以问客服。
针脚可以联系客服让厂商帮你焊好(不焊也可以用)。
这里是我的购买截图
2.2.2 其他
请参考整合包中PDF文件进行购买。
2.3 安装驱动
如果整合包中包含驱动,则安装驱动,
若无,直接进行下一步。
2.4 烧录固件
所有的整合包中都包含EasyCon
固件以及烧录文件,你可以直接烧录。
下面我将以ESP-32
为例进行讲解。
1、 启动烧录程序。点击烧录程序后,选择ESP32
,然后点击OK
。
你应该会看到如图所示界面
2、 点击...
,选择整合包中的固件,并选中。在后方的地址输入 0x0
。并选择正确的串口。
3、 点击start
出现如图所示的界面代表烧录成功
3 使用EasyCon
3.1 下载EasyCon并使用
你可以在这里找到对应文件。
下载并解压他们。
打开后你会看到这样的界面。
点击自动连接
即可与开发版连接。
3.2 EasyCon语法介绍
按键
- 语法:
键位 [持续时间(ms)|DOWN|UP]
- 示例:
A
(按下A键50毫秒)、HOME 1000
(按下Home键1秒)、LEFT DOWN
(按住左十字键,需要手动用LEFT UP松开) - 全部按键:
A
、B
、X
、Y
、UP
、DOWN
、LEFT
、RIGHT
、MINUS
、PLUS
、L
、R
、ZL
、ZR
、HOME
、CAPTURE
。
摇杆
- 语法:
LS|RS 方向|角度 [, 持续时间(ms)]
LS|RS RESET
LSS|RSS 方向
(1.45新增慢推语法,仅支持方向,不支持角度)
等待
- 语法:
[WAIT] 等待时间(ms)
- 示例:
WAIT 500
、2000
注释
- 语法:
# 注释内容
- 注意:多写注释是个好习惯,尤其是分享脚本给别人的时候。
输出
- 语法:
PRINT 输出内容
- 注意:联机模式专用,在控制台显示文字。
消息推送
- 语法:
ALERT 输出内容
- 注意:联机模式专用,发送推送消息,基于推送加服务。需要先关注<pushplus推送加>小程序生成token并在设置->推送设置页面配置。
循环
- 语法:
- FOR [循环次数]
…
NEXT
- FOR [循环次数]
常量与变量
- 常量语法:
常量名 = 值
- 变量基础语法:
$索引
- 变量进阶语法:
$变量名
、$$变量名
赋值
- 语法:
目标变量 = 值
或目标变量 = 来源变量
含变量的基础语句
- 输出:
PRINT 用&分隔的输出内容
- 按键:
键位 变量名
- 摇杆:
LS|RS 方向|角度 变量名
- 等待:
WAIT 变量名
条件分支
- 语法:
- IF 条件
…
ELSE … ENDIF
- IF 条件
4 部分脚本
自动刷活动
> [!note] >需要不在同行第一只宝可梦放刷活动用宝可梦,并且该宝可梦第一个技能应该为需要使用的技能。
使用时,需连接网络,并进入联机太晶对战界面再运行脚本。
此外,还需要将捕捉用的精灵球选择为普通球(否则太浪费)并且买999个。
FOR X 100 WAIT 100 A 100 WAIT 100NEXT
自动取孵
#1.语速调到最快,关闭取名,关闭学技能,自动记录最好关闭#2.将【园模镇:西】标记为目的地,并打开原地旋转模式#3.同行携带要生蛋的两只宝可梦#4.将盒子打开的界面调成将要放蛋的第一个空箱子#5.放蛋的空箱子的前一个箱子第一列空出来,第二列只放火焰之躯宝可梦【孵蛋用】#6.菜单界面光标默认调到野餐,脚本开始时人物退出盒子,退出菜单,并骑上神兽#7.初始站位需站在园模镇橄榄球场远离可梦中心球筐左侧,面朝宝可梦中心,球筐在右侧#8.默认20周期的,孵其他宝可梦,孵蛋时间需自行调节,料理位置按自己的配方调整#9.部分延时为防止卡顿,加的时间有点长,可自行修改,如果野餐不成功,请重新开始即可#10.by 倚夏&law 宝可梦取孵一体脚本2.86【圆模镇】(往复式孵蛋)
#【※※※※运行前清修改数值※※※※】#======初始数值调整【必看】======_孵蛋箱数 = 1 #需自行计算箱数,一次料理54+颗蛋左右【一次料理,孵蛋两箱,约1.5小时】_孵蛋周期 = 25 #直接填写孵蛋宝可梦的孵蛋周期,可看下方的周期表_料理次数 = 4 #一次料理54颗蛋左右,根据料理次数换算成你要孵蛋的箱数_料理位置 = 8 #就是17号配方【超级花生酱三文治】在第几行_料理左右 = 0 #就是17号配方【超级花生酱三文治】在 0左 还是 1右_跳过野餐 = 1 #1开启,不进行野餐直接孵蛋,初始站位不变,并将光标放到孵蛋的第一箱第一个蛋,同行只有一只孵蛋用宝可梦_蛋蛋力LV3 = 1 #1开启,将制作蛋蛋力LV3,需要两个甜味料和一份生菜,一次料理85颗左右_甜味料位置 = 5 #倒数第几行
#======进阶调整数值【可选】======_孵蛋延时 = 60 #默认60,如果存在没孵出来的蛋,打开图鉴或者服装,自行加大,每加1延迟孵蛋时间2秒_拿取延时 = 100 #默认100,改小增大吞键可能性_按键延迟 = 500 #默认500,按键间隔的延迟
_复位功能 = 1 #1开启 0关闭_复位周期 = 3 #几箱复位一次_往对侧 = 3500 #往球场对侧方向行走时间_往中心 = 1500 #往球场中心方向行走时间
_闪光识别 = 0 #1开启,需用采集卡,并自制标签,烧录需注释【@闪光】_自动放生闪光识别 = 0 #1开启,需用采集卡,烧录需删除放生代码
#自行按照以下周期选择适合的(周期数据查询神奇百科)#网站:https://wiki.52poke.com/wiki/宝可梦列表(按孵化周期分类)#孵蛋时间有盈余的,会在第一个蛋的界面空转几圈#5周期= 5 例如鲤鱼王#10周期=10 例如一对鼠#15周期=15 例如斗笠菇#20周期=20 例如小火龙#25周期=25 例如冰砌鹅#30周期=30 例如沙河马#35周期=35 例如伊布#40周期=40 例如烈咬陆鲨
#函数--------------------------FUNC POINT #朝向目的地 600 Y 200 2700 B 200 2000 L 100 400ENDFUNC#函数--------------------------
# 准备阶段FOR 5 RCLICK 200NEXT
#开始运行
$5 = _跳过野餐IF $5 = 0 #自动野餐---------------------------------------------------- PRINT 自动野餐开始 CALL POINT LS 270,500 500 LS 270 B 200 WAIT 1500 LS RESET 300 LS 90,2000 200 PLUS 200 300 LS 270,700 CALL POINT PRINT 走到野餐位置,开始野餐 FOR 3 X 50 50 NEXT FOR 5 50 A 100 50 NEXT WAIT 7000 #等待野餐时间 L 500 WAIT 1000 #走到篮子位置 LS UP,200 WAIT _按键延迟 LS LEFT,320 WAIT _按键延迟 LS UP,500 WAIT _按键延迟 LS RIGHT,330 WAIT _按键延迟 LS DOWN,300 WAIT 500 #做料理 $1 = 1 FOR _料理次数 500 PRINT 开始做料理 LS DOWN,200 WAIT _按键延迟 FOR 10 50 A 100 50 NEXT WAIT 5000 #等待选配方界面 $5 = _蛋蛋力LV3 IF $5 = 0 #17号料理 根据料理位置设置次数 PRINT 制作17号料理 $4 = _料理位置 $4 -= 1 FOR $4 LS DOWN,100 100 NEXT $4 = _料理左右 #判定料理配方在左右 IF $4 = 0 #在左 WAIT 100 ELSE #在右 LS RIGHT,100 WAIT 200 ENDIF WAIT _按键延迟 FOR 5 50 A 100 50 NEXT WAIT 8000 #开始做三文治 FOR 3 LS 90,550 100 A DOWN 100 LS 270,525 A UP 100 NEXT #放面包和签子 WAIT 3000 LS UP,550 WAIT _按键延迟 FOR 120 #等三文治转圈画面 50 A 100 50 NEXT $5 = 7 #蛋蛋力LV2拿蛋7轮 $4 = 23 ELSE PRINT 制作蛋蛋力LV3料理 $4 = _甜味料位置 X 200 200 A 200 200 PLUS 200 200 FOR $4 100 UP 100 100 NEXT 200 FOR 2 100 A 100 100 NEXT 200 PLUS 200 200 A 200 WAIT 8000 #等待做料理 LS UP,550 FOR 130 #等三文治转圈画面 50 A 100 50 NEXT $5 = 10 #蛋蛋力LV3拿蛋10轮 $4 = 16 ENDIF 8000 #吃料理时间 A 200 2000 PRINT 吃料理时间 PRINT 吃了 & $1 & 次料理 $1 += 1 LS UP,45 WAIT _按键延迟 # 拿蛋阶段 PRINT 开始拿蛋 $3 = 1 FOR $5 #等待过程中每10秒吹一次口哨 FOR $4 R 200 WAIT 10000 NEXT #连A拿蛋 FOR 52 A 100 WAIT 300 NEXT #连B取消对话框 300 B 100 WAIT 300 B 100 WAIT 300 #循环一次时间5分 PRINT 拿蛋 & $3 & 轮 $3 += 1 NEXT # 返回循环做料理 NEXT PRINT 野餐拿蛋结束 # 结束野餐 2000 FOR 5 50 Y 100 50 NEXT FOR 13 150 A 200 150 NEXT 200 PRINT 开始返回球场 LS 270,200 500 PLUS 600 #返回球场 500 LS 90,1200 #走到栏杆边 200 LS 90 B 300 1000 LS RESET CALL POINT LS 270,1000 #交换工具人---------------------------------------------------- PRINT 交换工具人 500 #拿出孵蛋宝可梦 FOR 3 X 50 50 NEXT 3000 UP 200 FOR 5 50 A 100 50 NEXT 2000 L 200 500 RIGHT _拿取延时 200 Y 200 300 FOR 2 100 LEFT _拿取延时 100 NEXT 300 FOR 2 100 DOWN _拿取延时 100 NEXT 200 A 100 200 UP _拿取延时 300 MINUS 300 FOR 5 UP 50 NEXT 100 A 100 200 RIGHT _拿取延时 200 A 100 200 R 200 500 PRINT 交换已完成ENDIF#自动孵蛋-----------------------------------------------------$1 = 1 #列数 1为第一列,不要修改$2 = 1 #已孵蛋箱数$3 = _孵蛋周期$3 *= 3$3 /= 2$3 += _孵蛋延时$6 = 1
PRINT 开始孵蛋FOR _孵蛋箱数 FOR 6 #盒子取蛋 500 MINUS 300 FOR 8 DOWN 50 NEXT 100 A 100 200 DOWN _拿取延时 100 FOR $1 100 LEFT _拿取延时 100 NEXT FOR 3 A 100 100 NEXT FOR 13 50 B 100 50 NEXT 1500 #往复式孵蛋---------------------------- LS 90,_往对侧 FOR $3 FOR 10 LS 90 A 50 NEXT FOR 10 LS 270 A 50 NEXT NEXT LS RESET LS 270,4500 #往复式孵蛋---------------------------- 500 #复位 $5 = _复位功能 IF $5 = 1 IF $6 = _复位周期 IF $1 = 6 $6 = 0 LS 180,100 400 L 100 600 LS 90,2000 500 LS 270,_往中心 600 CALL POINT ENDIF ENDIF ENDIF 500 #宝可梦放回盒子 FOR 3 X 50 50 NEXT FOR 5 50 A 100 50 NEXT 2000 DOWN _拿取延时 300 LEFT _拿取延时 300 #自动放生代码【烧录需删除】-------------------------- $5 = _自动放生闪光识别 $4 = 0 IF $5 = 1 PRINT 开始放生 FOR 5 $5 = @LV IF $5 < 95 BREAK ENDIF $5 = @闪光 IF $5 > 95 PRINT 第 & $2 & 箱第 & $1 & 列出闪了!!! DOWN 100 300 $4 += 1 ELSE FOR $5 = @打开菜单 IF $5 > 95 BREAK ELSE A 100 500 ENDIF NEXT FOR $5 = @放生 IF $5 > 95 BREAK ELSE UP 100 200 ENDIF NEXT FOR $5 = @放生2 IF $5 > 95 BREAK ELSE A 100 1200 ENDIF NEXT FOR $5 = @放生3 IF $5 > 95 BREAK ELSE UP 100 400 ENDIF NEXT FOR $5 = @放生4 IF $5 > 95 A 100 1500 ELSE BREAK ENDIF NEXT ENDIF NEXT IF $4 > 0 FOR $5 = @回到第二行 IF $5 < 95 UP 100 200 ELSE BREAK ENDIF NEXT ENDIF ENDIF #自动放生代码-------------------------- MINUS 300 #闪光识别代码----------------------------------------------------- FOR 8 $5 = _闪光识别 IF $5 = 1 #烧录模式将下行的代码注释掉,在前面加上【#】即可,无采集卡同理 $5 = @闪光 #烧录需将此行注释,如【#$5 = 闪光】 IF $5 > 95 PRINT 第 & $2 & 箱第 & $1 & 列出闪了!!! ENDIF ENDIF DOWN 100 100 NEXT #闪光识别代码----------------------------------------------------- 300 A 100 FOR 3 UP 100 NEXT 300 FOR $1 100 RIGHT _拿取延时 100 NEXT FOR 3 A 100 100 NEXT FOR 3 B 100 100 NEXT 2000 FOR 3 A 50 NEXT 2000 IF $1 != 6 #换下一列 FOR $1 100 RIGHT _拿取延时 100 NEXT ELSE 200 R 100 300 ENDIF PRINT 第 & $2 & 箱第 & $1 & 列已孵完 $1 += 1 NEXT $2 += 1 $6 += 1 $1 = 1NEXTPRINT 结束
5 进阶操作
你可以购买一个采集卡,然后自制标签,这样就可以使用图像识别了。
6 结语
使用EasyCon和相关的开发板为Nintendo Switch玩家提供了一种便捷、经济的方式来自定义并模拟控制器的操作。无论你是希望为特定游戏创建自定义的宏,还是希望进行更复杂的操作,本教程为你提供了开始的基础。