Raspberry Pi GPIO - nomrand/__basics GitHub Wiki

Layout

for real view, use command bellow. (if gpio installed)

gpio readall
PIN No. PIN No.
3.3V 1 (*1) 2 5V
GPIO 2 (*2) 3 4 5V
GPIO 3 (*2) 5 6 GND
GPIO 4 7 8 GPIO 14
GND 9 10 GPIO 15
GPIO 17 11 12 GPIO 18
GPIO 27 13 14 GND
GPIO 22 15 16 GPIO 23
3.3V 17 18 GPIO 24
GPIO 10 19 20 GND
GPIO 9 21 22 GPIO 25
GPIO 11 23 24 GPIO 8
GND 25 26 GPIO 7
ID_SD(*3) 27 28 ID_SC
GPIO 5 29 30 GND
GPIO 6 31 32 GPIO 12
GPIO 13 33 34 GND
GPIO 19 35 36 GPIO 16
GPIO 26 37 38 GPIO 20
GND 39 40 GPIO 21
  • *1 Solder (reverse side) is square
  • *2 GPIO with Resist
  • *3 I2C EEPROM

Output Limit

  • Max 16mA per GPIO 1pin
  • Amount 50mA on All out GPIO pins

Input Limit

  • range 0V - 3.3V
    • 0V - 0.8V -> read 0V
    • 0.8V - 1.3V -> unknown
    • 1.3V - 3.3V -> read 3.3V

Controll by Shell

/sys/class/gpio (ex. for GPIO 21)

  1. write GPIO No. to use (Not pinNo)
echo 21 > /sys/class/gpio/export

will create "/sys/class/gpio/gpio21" directory

  1. write in/out to gpio direction file (ex. for output pin)
echo out > /sys/class/gpio/gpio21/direction
  1. read/write to in/out
# for In pin (read)
cat /sys/class/gpio/gpio21/value

# for Out pin (write)
## ON 3.3V
echo 1 > /sys/class/gpio/gpio21/value
## OFF
echo 0 > /sys/class/gpio/gpio21/value
  1. use finished
echo 21 > /sys/class/gpio/unexport

will delete "/sys/class/gpio/gpio21" directory

Controll by Python

Example

import RPi.GPIO as GPIO
import time

## GPIO No. mode
GPIO.setmode(GPIO.BCM)
# or
## PIN No. mode
# GPIO.setmode(GPIO.BOARD)

## IN/OUT setting
# PinNo = 20
# GPIO.setup(PinNo, GPIO.OUT)
# GPIO.setup(PinNo, GPIO.IN)

## OUT
# GPIO.output(PinNo, 1)
# GPIO.output(PinNo, 0)
## IN
# GPIO.input(PinNo)


# Example
PinNo = 20
GPIO.setup(PinNo, GPIO.OUT)
try:
    for i in range(30):
        GPIO.output(PinNo, 1)
        time.sleep(1)
        GPIO.output(PinNo, 0)
        time.sleep(1)
        
finally:
    ## GPIO use Finished
    GPIO.cleanup()