树莓派与 ESP32 引脚冲突检查
把 I2C、SPI、UART 各用哪几根针选出来,重复占用、功能不支持、启动绑带针和 Flash 保留针会一次标出来。
开发板
3B / 4B / 5 / Zero 的排针布局相同,功能以每针的第一复用为准。
外设占用
I2C1I2C
SPI0SPI
UART0UART
额外占用的 GPIO
点选你另外接的 LED、按键、继电器等,用来检查它们和总线有没有撞针。
0必须改的冲突
2需要注意的引脚
8 / 28已占用 / 可用 GPIO
20还剩几根空闲
排针示意
13V3
3GPIO2I2C1 SDA
5GPIO3I2C1 SCL
7GPIO4
9GND
11GPIO17
13GPIO27
15GPIO22
173V3
19GPIO10SPI0 MOSI
21GPIO9SPI0 MISO
23GPIO11SPI0 SCLK
25GND
27GPIO0
29GPIO5
31GPIO6
33GPIO13
35GPIO19
37GPIO26
39GND
25V
45V
6GND
8GPIO14UART0 TX
10GPIO15UART0 RX
12GPIO18
14GND
16GPIO23
18GPIO24
20GND
22GPIO25
24GPIO8SPI0 CE0
26GPIO7
28GPIO1
30GND
32GPIO12
34GND
36GPIO16
38GPIO20
40GPIO21
已占用 注意 冲突 电源 空闲
鼠标悬停在针脚上可以看到完整说明和占用它的外设。电源和地不参与冲突判断。
检查结果
- 注意
GPIO14 是下载/控制台串口UART0 的 TX(第 8 针 GPIO14) 默认用于烧录和日志输出,改作他用会导致下载失败或看不到启动信息。
涉及针脚:8
- 注意
GPIO15 是下载/控制台串口UART0 的 RX(第 10 针 GPIO15) 默认用于烧录和日志输出,改作他用会导致下载失败或看不到启动信息。
涉及针脚:10
- 说明
树莓派 I2C 引脚自带 1.8k 上拉再并 4.7k 外部上拉会让总线等效电阻偏低,短距离通信一般不需要额外上拉;长线或高容性负载才补。
接线前多看一眼
排针上的物理编号和 GPIO 编号不是一回事。树莓派第 3 针是 GPIO2,第 11 针是 GPIO17;买模块时资料里写「接 GPIO17」,指的是 BCM 编号,不是物理位置。接错针轻则不工作,重则把 5V 灌进 3.3V 引脚,芯片当场报废。
电源引脚尤其要核对。树莓派排针同时有 5V 和 3.3V,丝印挨得近;ESP32 DevKit 的 VIN 可以吃 5V,但 3V3 是稳压输出,不能反灌。给传感器供电前先看它要几伏、能承受多大电流,别直接从 GPIO 取电驱动电机或继电器线圈。
总线设备数量也有上限。I2C 理论上可以挂一百多个地址,实际受总线电容限制,线长了上升沿变慢,通常三五米就是上限;SPI 的片选每多一个设备就多一根 CS,别把 CS 固定死。UART 是一对一,多个设备要加分时或切换。
ESP32 的 ADC2 和 Wi-Fi 互斥,这是新手最常踩的坑:GPIO25/26/27 读数在 Wi-Fi 开启后乱跳,不是模块坏了,是 ADC2 被射频占用。需要稳定模拟读数就用 GPIO32 到 39(ADC1),或者关了 Wi-Fi 再采。树莓派没有板载 ADC,读模拟量要外接 ADS1115 之类的芯片。
需要查具体针脚定义,用开发板 GPIO 引脚速查;串口波特率和定时器的计算在串口波特率误差 与单片机定时器计算。
为什么两根针不能同时做 I2C 和 UART?
一根 GPIO 在某一时刻只能复用成一种外设功能。芯片内部是一个多路选择器,选了 I2C 的 SDA 就不能再选 UART 的 TX。软件层面也许能分时切换,但总线时序不允许,实际用起来就是两边都不工作。
ESP32 的 GPIO34 到 39 为什么不能做输出?
这几根针在芯片里只有输入通路,没有输出驱动。做 ADC 输入、按键读取没问题,但拿去驱动 LED、做 SPI 的 MOSI 或 UART 的 TX 就不会有信号。它们也没有内部上拉/下拉,接按键要外加电阻。
启动绑带针(strapping pin)有什么坑?
ESP32 上电或复位时会采样几根针的电平来决定启动模式。GPIO0 低电平进下载模式,GPIO2 必须为高,GPIO12 必须为低,GPIO15 影响启动日志。外设若在这些针上接了会拉低/拉高的电路,可能导致板子起不来或者进不了 Flash。
树莓派的 GPIO14/15 为什么最好别占用?
这两根是 UART0,默认是串口控制台。占用后系统启动日志看不到,救援时也没法用串口登录。确实要用就把控制台关掉(在 config.txt 里禁用 console),并确认没有其他服务占用串口。
I2C 到底要不要外加上拉?
树莓派的 GPIO2/3 板上已经有 1.8k 上拉,短距离接一两个模块通常不用再加;ESP32 的 GPIO21/22 没有板载上拉,必须靠模块自带的 4.7k 或自己补。上拉太小会增加总线电容充电电流,太大则上升沿变慢,4.7k 是常见折中。
为什么图里同一根针显示两个外设?
那正是冲突:你在两个外设的下拉框里选了同一个物理针。工具会把涉及的针标红,并在下面列出具体是哪两个功能。改掉其中一个即可。