Switch《喷射战士 3》广场自动涂鸦工具

首发预购的《喷射战士 3》终于到货了, 迫不及待地打开游戏体验一番。

打完新手教程, 来到广场后发现了一个很有意思的功能: 当靠近其他玩家时, 他们头顶会显示自己绘制的涂鸦。

开服才没几天, 我却发现大家画得一个比一个离谱, 线条工整、细节丰富, 怎么看都不像是一笔一笔画出来的, 更像是直接把图片上传到了游戏里。

广场涂鸦

难道 Switch 有开发者模式, 可以通过电脑控制手柄按键完成绘制? 由于 Switch 也是刚买不久, 我便开始研究起这件事。

没想到游戏还没玩热乎, 网上就已经有人做出了保姆级的自动涂鸦工具。

【斯普拉遁】广场涂鸦自动化工具!保姆级教程

既然已经有现成的工具, 那不妨来分析一下它的实现原理。

顺着教程继续研究, 发现它使用的是 GitHub 上的一个开源项目 UARTSwitchCon, 它可以让 ESP32 模拟成 Nintendo Switch Pro Controller

整个思路其实并不复杂, 它并没有破解 Switch, 也没有修改游戏, 而是利用模拟手柄输入的方式完成自动绘制。

  1. ESP32 模拟成 Switch Pro 手柄
  2. 电脑通过串口向 ESP32 发送按键指令
  3. ESP32 再把这些指令转换成手柄输入, 从而自动控制游戏完成绘制

《喷射战士 3》的广场涂鸦实际上就是一块 320x120 的单色画布 (1-bit Bitmap)。只要把图片转换成对应的像素数据, 再控制模拟手柄逐点绘制, 就能把整张图片打印到游戏里。

整个过程速度并不快, 完成一张完整的涂鸦大约需要两个小时左右, 但胜在全程自动, 无需手动一点一点绘制。

如何选择 ESP32 开发板

既然知道了自动涂鸦是通过 ESP32 实现的, 那就先买一块开发板吧

然而, 当你打开淘宝搜索 ESP32 时, 映入眼帘的是各种各样的型号, 看得人眼花缭乱。

淘宝搜索 ESP32 结果

什么 ESP32、ESP32-C3、ESP32-C6、ESP32-S2、ESP32-S3… 这些到底有什么区?

而且同一个型号后面, 还会出现 N4、N8R2、N8R8、N16R8 之类的后缀, 这些又是什么意思?

Espressif ESP32 Development Board

更让人疑惑的是, 明明都是乐鑫 (Espressif) 的 ESP32, 为什么还有 源地、微雪、正点原子 等各种品牌? 第一次接触时, 真的让人摸不着头脑。

到底谁才是正版, 谁又是盗版?

芯片 vs 模组 vs 开发版

其实, 这几个概念很容易混淆。

  • 左边小小的一块才是真正的 ESP32 芯片
  • 中间的是乐鑫封装好的 ESP32 模组, 除了芯片外, 还集成了 Flash、PCB 天线, 并通过了各个国家和地区的无线电认证
  • 而右边的大板子则是各个厂商基于 ESP32 模组设计的开发板, 例如源地、微雪、正点原子等品牌

换句话说:

  • 芯片 = 乐鑫提供的核心计算单元
  • 模组 = 已经封装好、可以直接用的 ESP32 组件
  • 开发板 = 各厂商基于模组做出来的完整开发平台

它们之间最大的区别主要体现在接口、供电、电路设计以及外设配置上, 但核心都是同一个 ESP32

其实它们的关系和 NVIDIA 显卡差不多: 英伟达负责设计并供应 GPU 芯片, 而华硕、微星、技嘉、七彩虹等厂商则负责设计 PCB、电源、散热等外围电路, 最终生产出我们购买的显卡。

如果你的目的只是制作一个能够模拟 Nintendo Switch Pro Controller 的自动涂鸦工具, 那么完全没有必要追求高配置。购买最基础、最便宜的 ESP32 开发板就已经足够使用了。当然, 如果买的是 ESP32-S3、ESP32-C6 等新型号, 同样可以完成这个项目, 而且以后还能拿来折腾其他有趣的小项目, 并不会浪费。

ESP32 各系列 (S2 / S3 / C3 / C6) 有什么区别?

搞清楚了 ESP32 芯片、模组和开发板之间的关系之后, 接下来还有一个问题: ESP32、ESP32-S2、ESP32-S3、ESP32-C3、ESP32-C6 到底有什么区别?

其实, 它们并不是同一颗芯片换了个名字, 而是乐鑫推出的不同系列芯片。不同系列在 CPU 架构、性能、无线协议、USB、GPIO 数量以及功耗 等方面都有所区别。

简单来说, 可以先把它们理解成不同定位的产品:

系列 CPU 架构 主频 无线协议 主要应用场景与特点
ESP32 双核 Xtensa LX6 240 MHz Wi-Fi 4 + Bluetooth Classic / BLE 经典初代, 生态极度丰富, 成本低
ESP32-S2 单核 Xtensa LX7 240 MHz Wi-Fi 4 强化安全与触控, 支持原生 USB (OTG)
ESP32-S3 双核 Xtensa LX7 240 MHz Wi-Fi 4 + BLE 5 AI 指令增强, 支持 USB OTG, 人脸识别/屏幕主流
ESP32-C3 单核 RISC-V 160 MHz Wi-Fi 4 + BLE 5 ESP8266 的升级替代, 低成本基础 IoT
ESP32-C6 单核 RISC-V 160 MHz Wi-Fi 6 + BLE 5 + 802.15.4 (Thread/Zigbee) 支持 Wi-Fi 6、Thread、Zigbee 等新协议, 支持 Matter 协议生态, 物联网网关首选
ESP32-P4 双核 RISC-V 400 MHz 无 最高算力, 1080P 显示、摄像头、边缘 AI

如果只是第一次接触 ESP32, 其实没必要被这些参数吓到。对于这个自动涂鸦项目来说, ESP32 的性能要求并不高, 只要 固件支持对应型号 即可, 不需要特意追求更高配置。

另外, ESP32 各系列并不是简单的 “数字越大性能越强”, 例如 C6 并不是 S3 的性能升级版, 而是针对新一代无线协议设计的不同产品线。因此, 购买时不要只看型号数字, 根据项目需求和固件支持情况选择即可。

N4、N8R2、N8R8、N16R8 分别代表什么?

除此之外, 还会看到一些类似 N4、N8R2、N8R8、N16R8 的型号后缀, 它们又是什么意思?

这些看似复杂的命名, 其实主要用来表示模块内搭载的 Flash (Flash Memory, 闪存) 和 PSRAM (Pseudo SRAM, 伪静态随机寻址内存) 容量。

简单来说, 这两者在芯片系统里分工明确:

  • Flash: 掉电不丢失数据, 类似于电脑的固态硬盘 (SSD)。用于存放程序固件、配置文件、静态页面或音视频素材等。
  • PSRAM: 掉电数据丢失, 类似于电脑的运行内存 (RAM)。当运行复杂算法、处理大尺寸图像/音频流或运行 HTTP/S 客户端等耗内存任务时, 原生片上 SRAM 往往不够用, 就需要借助 PSRAM 进行外挂扩展。

以经典 ESP32 和 ESP32-S3 为例, 不同模组还会提供不同容量的 Flash 和 PSRAM

2022 年 ESP32 常指 ESP32-WROOM-32E 系列

模块型号 内置 SRAM 内置 ROM 外扩 PSRAM 外扩 Flash
ESP32-WROOM-32E-N4 520 KB 448 KB 无 (0 MB) 4 MB
ESP32-WROOM-32E-N8 520 KB 448 KB 无 (0 MB) 8 MB
ESP32-WROOM-32E-N16 520 KB 448 KB 无 (0 MB) 16 MB

2022 年 ESP32-S3 常指 ESP32-S3-WROOM-1 系列

模块型号 内置 SRAM 内置 ROM 外扩 PSRAM 外扩 Flash
ESP32-S3-WROOM-1-N4 512 KB 384 KB 无 (0 MB) 4 MB
ESP32-S3-WROOM-1-N8 512 KB 384 KB 无 (0 MB) 8 MB
ESP32-S3-WROOM-1-N16 512 KB 384 KB 无 (0 MB) 16 MB
ESP32-S3-WROOM-1-N4R2 512 KB 384 KB 2 MB 4 MB
ESP32-S3-WROOM-1-N4R8 512 KB 384 KB 8 MB 4 MB
ESP32-S3-WROOM-1-N8R2 512 KB 384 KB 2 MB 8 MB
ESP32-S3-WROOM-1-N8R8 512 KB 384 KB 8 MB 8 MB
ESP32-S3-WROOM-1-N16R2 512 KB 384 KB 2 MB 16 MB
ESP32-S3-WROOM-1-N16R8 512 KB 384 KB 8 MB 16 MB

需要注意的是, 更大的 Flash 或 PSRAM 并不意味着芯片本身性能更强, 它们主要影响的是程序和数据能够使用的存储空间。

这些存储规格是 向下兼容的。同一系列中, 存储规格较低的模块, 其程序无需修改, 就可以直接运行在更高规格的模块上。

例如, 一个只需要 4 MB Flash 的程序, 可以运行在 8 MB 或 16 MB Flash 的模块上; 同样, 不使用 PSRAM 的程序, 也可以运行在带有 2 MB 或 8 MB PSRAM 的模块上。

对于自动涂鸦项目来说, 程序本身对 Flash 和 PSRAM 的需求并不高, 所以也没有必要为了更大的存储容量专门购买高规格模块。

注意! 小心商家以次充好

这里还有一个容易踩坑的地方: ESP32 这个名称使用了很长时间, 它实际上是一个产品家族的名称, 而不是某一颗特定的 SoC

因此, 看到商品名称里写着 ESP32, 并不能直接判断它使用的是哪一款芯片, 还需要进一步确认具体的 SoC 型号和模组型号。

ESP32-WROOM 系列就经历了不同版本:

模块型号 内置 ESP32 芯片型号 内置 SRAM 内置 ROM 乐鑫推荐状态
ESP32-WROOM-32 ESP32-D0WDQ6 520 KB 448 KB 不推荐用于新设计
ESP32-WROOM-32SE ESP32-D0WD 520 KB 448 KB 不推荐用于新设计
ESP32-WROOM-32D ESP32-D0WD 520 KB 448 KB 不推荐用于新设计
ESP32-WROOM-32E ESP32-D0WD-V3 520 KB 448 KB 2022 年新设计推荐

虽然它们都叫 ESP32-WROOM, 但内部使用的 SoC 并不完全相同。

所以, 购买 ESP32 开发板时, 不要只看商品标题里的 ESP32。尤其是遇到价格特别低的产品, 更应该确认具体的 SoC 型号和模组型号, 不要看到低价就以为是捡漏, 可能只是老型号的库存。

简单来说, ESP32 是一个大类名称, 具体是什么芯片, 最终还是要看它使用的 SoC 和模组型号。

烧录固件

固件烧录有两种方法, 可以根据自己的习惯选择: 一种是使用官方的 esptool.exe 命令行工具手动烧录, 另一种是直接使用在线网页工具进行刷写。

使用 esptool.exe 烧录

从 Espressif esptool - [备份下载] 下载 esptool.exe, 再从 Switch FW 12.0.0+ Support! - [备份下载] 下载固件。

下载并解压后, 将 esptool.exe 和固件文件放在同一个目录, 然后打开命令提示符, 执行以下命令

esptool.exe --baud 230400 write_flash 0x0 /PRO-UART0.bin

其中 PRO-UART0.bin 就是需要烧录的固件文件。

这种方法比较适合习惯使用命令行, 或者希望手动控制烧录过程的用户。

使用在线工具烧录

如果不想使用命令行, 也可以直接使用在线网页工具进行烧录 ESP32 ONLINE FLASH TOOL

ESP32 ONLINE FLASH TOOL

打开网页后, 按照页面提示连接 ESP32 开发板并选择固件进行刷写即可。

对于第一次接触 ESP32 的用户来说, 使用在线工具会更加直观, 不需要额外安装 esptool 或其他开发环境。

制作单色位图

制作单色位图有两个方法, 可以使用 PS 制作, 或者使用在线网站制作

Photoshop 方法

新建一张 320×120 像素的图片

新建图片

将我们想要制作成涂鸦的图片拖入画布中

拖入图片

在菜单栏中依次点击 图像 -> 模式 -> 索引颜色

选择索引颜色

在弹出的索引颜色设置中, 按照以下方式进行设置

  • 颜色: 3
  • 强制: 黑白
  • 透明度: 勾选
  • 仿色: 可根据实际效果自行选择

设置完成后, 点击确定

设置索引颜色选项

最后, 将图片保存为 BMP 格式

在新版 Photoshop 中, 如果图像包含图层, 或者使用了 BMP 不支持的颜色模式 (例如 CMYK、16 位/32 位通道), 直接使用 “另存为” 可能找不到 BMP 格式。

需要选择 存储副本, 然后再选择 BMP 格式进行保存

存储为副本

在线网站方法

对于不方便使用 Photoshop 的玩家, 也可以使用在线网站 the Pixel Art 制作图片

设置参数如下:

  • 阈值: 128
  • 模式: 黑白
  • 缩放值: 1

在线制作黑白图片

开始! 自动涂鸦

前期准备工作都完成了, 终于到了最激动人心的环节!

下载 AutoSplatoon, 打开软件后选择正确的串口号

AutoSplatoon

连接成功后, 在 Switch 上搜索手柄。点击手动控制, 在弹出的窗口中点击 A 键, 确认手柄已经成功与 Switch 匹配。

AutoSplatoon 手动控制

点击上传 BMP, 导入事先制作好的 320×120 单色位图

AutoSplatoon 上传 BMP

打开喷射战士 3 的涂鸦界面, 将画笔调至最细, 并移动到画布的左上角。在 AutoSplatoon 中点击开始, Switch 就会开始自动绘图。

整个绘制过程大约需要 2 个小时, 耐心等待程序运行完成即可。

涂鸦过程中, 可以看到图片正在一点一点地绘制出来

正在绘制涂鸦

等待程序运行完成后, 整张图片就绘制完成了

涂鸦绘制即将完成


原文

github.com/nullstalgia/ClubchatGames
github.com/epiX86/Splatoon-tool
MicroPython for ESP32

最后更新于 2026-09-24