聊一聊万恶的esp家族中ESP-12F的管脚定义

在 DIY 中经常用到的 ESP 系列模组(如 ESP-8266、ESP32、NodeMCU),如果直接使用现成开发板通常不会出问题,但自己画板时却容易踩坑。经过多次验证后,总算弄清了官方的引脚定义,下面记录一些心得体会。

一、引脚定义与 Arduino IDE 中的使用

首先理解一个概念:Pin 指的是芯片的物理引脚序号,不是功能名称。以 ESP-12F 官方定义为例,如下图所示,芯片右侧最上方的引脚为 Pin 1,向下依次到 Pin 8;最下面一排的引脚跳过不算!从模块左侧最下方的引脚开始,作为 Pin 9,再向上依次增加到左侧最上方为 Pin 16

ESP-12F 模块引脚编号

了解了物理引脚编号后,再看下面这张带功能标识的图:

ESP-12F 引脚功能与 GPIO 标识

图中英文名称以及 GPIO 编号是各引脚的功能名,它们与物理引脚序号的对应关系如下表所示:

引脚序号与功能对应关系

在 Arduino IDE 中,大家更习惯使用类似 D0D1 这种丝印标号来操作 IO,比如 pinMode(D1, INPUT)。以常见的 D1 mini 为例:

D1 mini 引脚图

ESP-12F 同样可以映射到这种 D 编号体系,对应关系如下图:

ESP-12F D 编号对应图

因此,在使用 ESP-12F 时,你可以根据 D 编号编程,也可以直接使用 GPIO 后面的数字。例如初始化 GPIO5,以下两种写法效果相同:

  • pinMode(5, INPUT);
  • pinMode(D1, INPUT);

如果使用 DxAx 的形式,字母 D 和 A 不能省略

二、GPIO 默认状态与注意事项

ESP-12F 中实际可用的通用 IO 引脚只有 9 个IO9 和 IO10 不可用,在设计中几乎只是摆设。

其余引脚特性如下:

  • IO15 / D8 / Pin10:内部强制下拉到地,始终为低电平,无法作为通用输入使用,仅在片选等特定场景下可考虑。
  • ADC / A0 / Pin2:模组唯一的模拟输入通道,支持 10 位分辨率。
  • GPIO0 / D3 / Pin12:烧录固件时需要拉低,正常运行时应拉高或悬空,使用上稍显麻烦。
  • GPIO2 / D4 / Pin11:系统默认的串口发送引脚(TX)。若不进行初始化,它会一直输出系统日志;即使进行了初始化,有时仍然会发送日志,需要特别留意。不过该引脚也是 I2C 的 SDA 口,用于 I2C 通信时表现正常,因此推荐将它用作日志输出或 I2C SDA。
  • GPIO14 / D5 / Pin5:硬件 SPI 时钟(CLK)或 I2C 时钟(SCL),适合做 SPI/I2C 时钟线。

在实际测试中,将所有数字 GPIO 配置为输入且不外接上拉或下拉电阻时,除了 GPIO16GPIO15(运行状态下必须下拉)检测为低电平外,其余引脚默认均为高电平。

最后需要牢记:所有 IO 的驱动能力都有限,切勿直接驱动大电流负载