树莓派和普通电脑不一样的地方在于它还带了17个可编程的GPIO(General Purpose Input/Output),可以用来驱动各种外设(如传感器,步进电机等)。但GPIO的编号方法有些混乱,不同的API(如wiringPi,RPi.GPIO等)对GPIO的端口号编号并不一样,下面则用图表标明了对应的叫法,这样在看程序例子的时候可以确定物理是哪个接口。
GPIO库
- wiringPi C,有Perl, PHP, Ruby, Node.JS和**Golang**的扩展,支持wiringPi Pin和BCM GPIO两种编号
- RPi.GPIO Python,支持Board Pin和BCM GPIO两种编号
- Webiopi,Python, 使用BCM GPIO编号
- WiringPi-Go, Go语言,支持以上三种编号
编号规范
- 第一列是wiringPi API中的缺省编号,
wiringPiSetup()
采用这列编号 - 第二列(Name)往往是转接板的编号
- 第三列是树莓派板子上的自然编号(左边引脚为1-15,右边引脚为2-26),
RPi.GPIO.setmode(GPIO.BOARD)
采用这列编号 - 树莓派主芯片提供商Broadcom的编号方法,相当于调用了
WiringPiSetupGpio()
或RPi.GPIO.setmode(GPIO.BCM)
采用这列编号
wiringPi Pin | Name | Board Pin | BCM GPIO |
---|---|---|---|
0 | GPIO 0 | 11 | 17 |
1 | GPIO 1 | 12 | 18 |
2 | GPIO 2 | 13 | 21 |
3 | GPIO 3 | 15 | 22 |
4 | GPIO 4 | 16 | 23 |
5 | GPIO 5 | 18 | 24 |
6 | GPIO 6 | 22 | 25 |
7 | GPIO 7 | 7 | 4 |
8 | SDA | 3 | 0 |
9 | SCL | 5 | 1 |
10 | CE0 | 24 | 8 |
11 | CE1 | 26 | 7 |
12 | MOSI | 19 | 10 |
13 | MISO | 21 | 9 |
14 | SCLK | 23 | 11 |
15 | TXD | 8 | 14 |
16 | RXD | 10 | 15 |
Rev.2 新增的引脚:
wiringPi Pin | Name | Board Pin | BCM GPIO |
---|---|---|---|
17 | GPIO 8 | 28 | |
18 | GPIO 9 | 29 | |
19 | GPIO10 | 30 | |
20 | GPIO11 | 31 |
GPIO转接板
GPIO转接板通过彩虹排线可将树莓派的GPIO引脚转接到面包板上,方便试验,下图是一个相应的产品,可以看到每个引脚标都已标注好了名称,查上表就知道代码里该用哪个编号做参数了。
物理左排针脚说明
Pin | Raspberry Pi | Broadcom names |
---|---|---|
1 | 3.3V | 3.3V |
3 | SDA0 | I2C0 SDA |
5 | SCL0 | I2C0 SCL |
7 | GPIO 7 | GPIO 4 |
9 | DNC | DNC |
11 | GPIO 0 | GPIO 17 |
13 | GPIO 2 | GPIO 21 (rev2) / GPIO 27 (rev1) |
15 | GPIO 3 | GPIO 22 |
17 | DNC | DNC |
19 | SPI MOSI | SPI MOSI |
21 | SPI MOSO | SPI MOSO |
23 | SPI SCLK | SPI SCLK |
25 | DNC | DNC |
物理左排针脚说明
Pin | Raspberry Pi | Broadcom names |
---|---|---|
2 | 5V | 5V |
4 | DNC | DNC |
6 | GND | GND |
8 | TX | UART TxD |
10 | RX | UART RxD |
12 | GPIO 1 | GPIO 18 |
14 | DNC | DNC |
16 | GPIO 4 | GPIO 23 |
18 | GPIO 5 | GPIO 24 |
20 | DNC | DNC |
22 | GPIO 6 | GPIO 25 |
24 | SP10 CEO N | SP10 CEO N |
26 | SP10 CE1 N | SP10 CE1 N |
Notes:
- all the UART, SPI and I2C pins can be reconfigured as GPIO if needed.