先固定板型和方向,数字才有意义
先看开发板修订和模组完整印字,再打开 v1.1 对应的正面图、Header Block 与原理图。官方把两侧连接器称为 J1 和 J3;表中的 No. 是连接器内部的物理编号,Name 是板上的信号名称。不要凭网页照片的左边或右边猜排针,也不要把面包板行号当 GPIO。
本文固定 N8R8,是因为同一块 PCB 装上不同模组后,可用引脚也可能不同。N8R8 的 Octal PSRAM 已经使用内部信号,即使排针上印着 35、36、37,也不应接外设。先把板型记录写在接线表第一行,之后每条线才可追溯。
参考:[1] 乐鑫 DevKitC-1 v1.1 用户指南:固定文档提交 927ed7e[2] DevKitC-1 v1.1 原理图,2022-11-30,第 2 页[3] ESP-IDF v5.5.5 / S3:GPIO Summary 与保留引脚
追一条线:位置编号 → 网络名 → GPIO → 代码
以外接 LED 计划使用的 GPIO4 为例:用户指南 J1 的 No.4 写着 Name 4,原理图连接到 GPIO4 网络,再进入模组 IO4;Arduino 的 pinMode(4, OUTPUT) 中数字 4 指 GPIO4。这个例子中的位置与 GPIO 恰好相同,不是通用规则。
再看 J1 No.12,它的 Name 是 8,对应 GPIO8;程序写 12 会操作 GPIO12,和你接到 J1 第十二个针脚完全不是一回事。对于供电脚,3V3、5V 和 GND 是电源网络,不是可以传给 digitalWrite 的编号。RST 对应 EN,也不能按普通 GPIO 使用。
| v1.1 物理位置 | 丝印 / GPIO | 本文用途 |
|---|---|---|
| J1 No.4 | 4 / GPIO4 | 后续外接 LED 候选 |
| J1 No.5 | 5 / GPIO5 | 后续按钮候选 |
| J1 No.12 | 8 / GPIO8 | I2C SDA 候选 |
| J1 No.15 | 9 / GPIO9 | I2C SCL 候选 |
| J1 No.1 / No.2 | 3V3 | 本系列低压模块电源;不是信号脚 |
| J1 No.22 / J3 多个 G | G / GND | 电源与信号的公共参考 |
- 做到这里,你应该看到
- 任一计划信号都能在排针表、原理图和代码中找到同一个 GPIO 网络。
参考:[1] 乐鑫 DevKitC-1 v1.1 用户指南:固定文档提交 927ed7e[2] DevKitC-1 v1.1 原理图,2022-11-30,第 2 页[4] Arduino-ESP32 3.3.12:通用 S3 引脚别名
先划掉存储、启动和正在使用的板上信号
GPIO Matrix 允许很多外设信号路由到不同 GPIO,但它不能消除物理占用,也不保证每个脚都有 ADC、输入、输出等所有功能。S3 的 GPIO0、3、45、46 是启动配置脚。初级实验避开它们,避免外部上拉、下拉或模块输出改变复位时的启动条件。
S3 的 GPIO26–32 通常用于 Flash/PSRAM;Octal 存储还涉及 GPIO33–37。对本文 N8R8,官方板手册特别指出引出的 GPIO35/36/37 不可供外设使用。不要把“软件禁用 PSRAM”当作解除模组内部连线的方法。
GPIO19/20 是原生 USB D−/D+,GPIO43/44 在本板用于 UART0 桥接。GPIO38 接 v1.1 可寻址 RGB 灯。保留这些信号,可以减少上传、监视与第一次外接实验互相干扰;有明确任务需要复用时,应另读该接口的配置与电气限制。
参考:[1] 乐鑫 DevKitC-1 v1.1 用户指南:固定文档提交 927ed7e[2] DevKitC-1 v1.1 原理图,2022-11-30,第 2 页[3] ESP-IDF v5.5.5 / S3:GPIO Summary 与保留引脚
Arduino 的 SDA、A0 和 LED_BUILTIN 还要再查一层
Arduino 别名来自所选 board variant。core 3.3.12 的 generic esp32s3 将 SDA/SCL 设为 8/9,A0 是 GPIO1,而不是排针第零脚;换到另一个开发板目标,别名可能改变。涉及接线时,正文和程序应优先写出已核对的具体 GPIO。
尤其要小心板载灯:generic esp32s3 的 PIN_RGB_LED 仍定义为 48,并用虚拟 LED 编号支持相应 API;本文 v1.1 实物电路的 RGB 控制线却在 GPIO38。不要据此把 LED_BUILTIN 当作普通外接 LED,也不要把“板载灯不亮”直接判成上传失败。本系列首次上传用串口日志验收,首次灯实验用明确的外接 GPIO。
- 如果卡住了
- 程序没有控制到目标时,先核对 FQBN 的 variant 和实际 GPIO,再检查电路;不要同时更换引脚、框架和供电。
参考:[1] 乐鑫 DevKitC-1 v1.1 用户指南:固定文档提交 927ed7e[4] Arduino-ESP32 3.3.12:通用 S3 引脚别名
做一张项目级表,而不是抄一张“安全引脚大全”
为每条线填写:主控物理位置、GPIO、模块端标识、方向、电平、共享用途和依据。第一版可计划 LED=GPIO4,按钮=GPIO5,I2C=GPIO8/9;“候选”表示没有与本系列保留信号冲突,仍需检查你的完整项目。一个项目里两段程序都把 GPIO4 配成不同用途,同样会冲突。
接线前按表逐项从板端指到模块端,断电确认;表和代码不同就先统一。之后加外设或换板,更新这张表,而不是只改一个宏后继续试。本文没有在本站实板量过这些排针或运行 GPIO 程序;依据是指定修订的手册、原理图和固定版本源码。
- 做到这里,你应该看到
- 能回答每条线为什么接这里,以及哪些信号被预留;无法说明的线暂不接。
参考:[1] 乐鑫 DevKitC-1 v1.1 用户指南:固定文档提交 927ed7e[2] DevKitC-1 v1.1 原理图,2022-11-30,第 2 页[3] ESP-IDF v5.5.5 / S3:GPIO Summary 与保留引脚[4] Arduino-ESP32 3.3.12:通用 S3 引脚别名
资料来源与版本说明
本文依据下列官方文档与上游资料独立整理,适用范围与版本以本文所列组合为准。资料核对日期:。资料核对、程序构建与实板测试分别记录,不互相替代。