All recent Raspberry Pis (including Zero models) have a 40 pin header for connecting external components. Using 2.54mm jumper wires (aka dupont wires) many project can be implemented without soldering.
The table below describes the functions of the 40 pins for model 3B+. Hold the Pi so that the pins are on the right side and pointing toward you. Older models may differ in minor ways - see end of this page.
Description | BCM | Pin | Pin | BCM | Description |
---|---|---|---|---|---|
3.3VCC | 01 | 02 | 5VCC | ||
I2C1 SDA | 02 | 03 | 04 | 5VCC | |
I2C1 SCL | 03 | 05 | 06 | GND | |
GPCLK0 | 04 | 07 | 08 | 14 | UART TX |
GND | 09 | 10 | 15 | UART RX | |
SPI1 CS1 | 17 | 11 | 12 | 18 | SPI1 CS0 / PWM / I2S BCLK |
27 | 13 | 14 | GND | ||
22 | 15 | 16 | 23 | ||
3.3VCC | 17 | 18 | 24 | ||
SPI0 MOSI | 10 | 19 | 20 | GND | |
SPI0 MISO | 09 | 21 | 22 | 25 | |
SPI0 CLK | 11 | 23 | 24 | 08 | SPI0 CS0 |
GND | 25 | 26 | 07 | SPI0 CS1 | |
I2C0 SDA | 00 | 27 | 28 | 01 | I2C0 SCL |
GPCLK1 | 05 | 29 | 30 | GND | |
GPCLK2 | 06 | 31 | 32 | 12 | PWM |
PWM | 13 | 33 | 34 | GND | |
SPI1 MISO / PWM/ I2S LRCLK | 19 | 35 | 36 | 16 | SPI1 CS2 |
26 | 37 | 38 | 20 | SPI1 MOSI / I2S DIN | |
GND | 39 | 40 | 21 | SPI1 CLK / I2S DOUT |
A lot of confusion is caused by having two numbering schemes for the pins:
We recommend using the BOARD scheme exclusively as it is more systematic and makes it easy to locate the desired pins by counting.
All pins except for VCC and GND can be used for general purpose input/output (GPIO) but some pins have additional capabilities as shown in the table. Among those the higher level interfaces SPI, I2C and I2S are the most useful and are described in more details in their own section, including information about how to activate the interfaces - just follow the links.
All pins are digital. The Pi does not have built-in analog-to-digital converters (ADCs) or digital-to-analog converters (DACs).
Access to the GPIO pins is usually only permitted for root
(aka superuser). However, access can be granted to other users via Linux groups. Run the groups
command to determine which groups the current user belongs to. If the output is similar to the example below and shows gpio
, i2c
and spi
membership you are all set.
4 groups
pi adm dialout cdrom sudo audio video plugdev games users input netdev gpio i2c spi
Otherwise use the addgroup
command to add group membership one at a time.
$ sudo addgroup pi i2c
A handy command line tool for exploring the gpio pins is gpio1.
The following command show the current configuration of the various pins:
$ gpio readall
Other useful commands are:
# configure pin 20 (BCM numbering) for output
$ gpio -g mode 20 out
# set pin 20 (BCM numbering) to 1 (high)
$ gpio -g write 20 1
In Python you get access to the pins using the GPIO library2
import RPi.GPIO as GPIO
To select between BOARD or BCM numbering use either
GPIO.setmode(GPIO.BOARD)
or
GPIO.setmode(GPIO.BCM)
Note: You should call setmode
only once in the entire program which can be an issue if you program is spread over multiple files.
GPIO.setup(20, GPIO.OUT) # configure pin 20 as output
GPIO.output(20, GPIO.HIGH) # set pin 20 to high
Model | Difference |
---|---|
TODO | TODO |