Home » Raspberry Pi GPIO Pins Explained Simply with Examples (Complete 2026 Guide)

Raspberry Pi GPIO Pins Explained Simply with Examples (Complete 2026 Guide)

by vhhwhre71
SBC Tutorials

The Raspberry Pi is not just a tiny computer. Its ability to connect to the real world through GPIO (General Purpose Input/Output) pins is one of its best features. You can use these pins to control hardware parts like LEDs, motors, and sensors, as well as read input from buttons and other devices.

At first, GPIO can be hard to understand for a lot of beginners. The rows of pins, the different ways of numbering them, and the electrical issues can all be too much to handle. But once you get the hang of the basics, GPIO is one of the most fun things about using a Raspberry Pi.

This guide makes it easy to understand GPIO pins and gives you clear, useful code examples so you can start working on real projects right away.

What Are GPIO Pins?

GPIO stands for General Purpose Input/Output. These are programmable pins that you can control with software.

Each GPIO pin can be set to one of two modes:

  • Input: Read signals from sensors or buttons
  • Output: Send signals to control devices like LEDs or buzzers

Unlike fixed-function pins, GPIO pins can be used for many different purposes depending on your code.

GPIO Pin Types

The Raspberry Pi 40-pin header includes several types of pins:

  • 3.3V Power Pins – supply low voltage power
  • 5V Power Pins – supply higher voltage power
  • Ground (GND) – completes the circuit
  • GPIO Pins – programmable pins for input/output
  • Special Pins – support I2C, SPI, UART communication

Understanding which pins are safe to use is essential before connecting any components.

GPIO Numbering Systems

There are two main numbering systems:

  • Physical (BOARD) – based on pin position
  • BCM (Broadcom) – based on internal chip numbering

Most modern projects use BCM numbering.

Example:

  • Physical pin 11 = GPIO17 (BCM)

You must stay consistent with the numbering system in your code.

Setting Up GPIO in Python

Python is the most popular language for GPIO programming.

First, install the GPIO library if needed:

sudo apt update
sudo apt install python3-rpi.gpio

Then import it in your script:

import RPi.GPIO as GPIO
import time

Set the numbering mode:

GPIO.setmode(GPIO.BCM)

Example 1: Blinking an LED

This is the classic beginner project.

Wiring Concept

  • GPIO17 → Resistor → LED → Ground

Code Example

import RPi.GPIO as GPIO
import time

LED_PIN = 17

GPIO.setmode(GPIO.BCM)
GPIO.setup(LED_PIN, GPIO.OUT)

try:
    while True:
        GPIO.output(LED_PIN, GPIO.HIGH)
        time.sleep(1)
        GPIO.output(LED_PIN, GPIO.LOW)
        time.sleep(1)
except KeyboardInterrupt:
    GPIO.cleanup()

Explanation

  • The pin is set as output
  • HIGH turns the LED on
  • LOW turns it off
  • The loop repeats every second

Example 2: Reading a Button Press

This demonstrates input functionality.

Wiring Concept

  • Button between GPIO18 and Ground
  • Use internal pull-up resistor

Code Example

import RPi.GPIO as GPIO
import time

BUTTON_PIN = 18

GPIO.setmode(GPIO.BCM)
GPIO.setup(BUTTON_PIN, GPIO.IN, pull_up_down=GPIO.PUD_UP)

try:
    while True:
        if GPIO.input(BUTTON_PIN) == GPIO.LOW:
            print("Button Pressed")
        time.sleep(0.2)
except KeyboardInterrupt:
    GPIO.cleanup()

Explanation

  • Pull-up resistor keeps pin HIGH by default
  • Pressing button connects to ground → LOW
  • Program detects the press

Example 3: Button Controlling an LED

Now combine input and output.

Code Example

import RPi.GPIO as GPIO
import time

LED = 17
BUTTON = 18

GPIO.setmode(GPIO.BCM)
GPIO.setup(LED, GPIO.OUT)
GPIO.setup(BUTTON, GPIO.IN, pull_up_down=GPIO.PUD_UP)

try:
    while True:
        if GPIO.input(BUTTON) == GPIO.LOW:
            GPIO.output(LED, GPIO.HIGH)
        else:
            GPIO.output(LED, GPIO.LOW)
        time.sleep(0.1)
except KeyboardInterrupt:
    GPIO.cleanup()

Explanation

  • Press button → LED turns on
  • Release button → LED turns off

Example 4: Using PWM (Dimming an LED)

PWM allows gradual brightness control.

Code Example

import RPi.GPIO as GPIO
import time

LED = 17

GPIO.setmode(GPIO.BCM)
GPIO.setup(LED, GPIO.OUT)

pwm = GPIO.PWM(LED, 1000)
pwm.start(0)

try:
    for duty in range(0, 101, 5):
        pwm.ChangeDutyCycle(duty)
        time.sleep(0.1)
    for duty in range(100, -1, -5):
        pwm.ChangeDutyCycle(duty)
        time.sleep(0.1)
except KeyboardInterrupt:
    pass

pwm.stop()
GPIO.cleanup()

Explanation

  • Duty cycle controls brightness
  • 0 = off, 100 = full brightness

Example 5: Buzzer Alert System

Code Example

import RPi.GPIO as GPIO
import time

BUZZER = 23

GPIO.setmode(GPIO.BCM)
GPIO.setup(BUZZER, GPIO.OUT)

try:
    while True:
        GPIO.output(BUZZER, GPIO.HIGH)
        time.sleep(0.5)
        GPIO.output(BUZZER, GPIO.LOW)
        time.sleep(0.5)
except KeyboardInterrupt:
    GPIO.cleanup()

Example 6: Temperature Sensor (Basic Concept)

Using a digital sensor like DHT11.

Code Example

import Adafruit_DHT

sensor = Adafruit_DHT.DHT11
pin = 4

humidity, temperature = Adafruit_DHT.read_retry(sensor, pin)

if humidity is not None and temperature is not None:
    print(f"Temp: {temperature}C  Humidity: {humidity}%")
else:
    print("Sensor failure")

Example 7: Motion Detection System

Code Example

import RPi.GPIO as GPIO
import time

PIR = 24

GPIO.setmode(GPIO.BCM)
GPIO.setup(PIR, GPIO.IN)

try:
    while True:
        if GPIO.input(PIR):
            print("Motion Detected")
        time.sleep(1)
except KeyboardInterrupt:
    GPIO.cleanup()

Using Communication Protocols

I2C Example (Concept)

Enable I2C:

sudo raspi-config

Basic Python scan:

import smbus

bus = smbus.SMBus(1)
devices = bus.scan()
print(devices)

Safety Rules

  • Never exceed 3.3V on GPIO pins
  • Always use resistors with LEDs
  • Do not draw too much current
  • Double-check wiring before powering on

Common Mistakes

  • Mixing up BCM and BOARD numbering
  • Forgetting GPIO.cleanup()
  • Incorrect wiring
  • Missing resistors

Advanced Techniques

Interrupts (Event Detection)

def button_callback(channel):
    print("Button pressed!")

GPIO.setup(18, GPIO.IN, pull_up_down=GPIO.PUD_UP)
GPIO.add_event_detect(18, GPIO.FALLING, callback=button_callback, bouncetime=300)

Multiple GPIO Control

pins = [17, 18, 27]

for pin in pins:
    GPIO.setup(pin, GPIO.OUT)

Real-World Applications

GPIO enables:

  • Home automation systems
  • Smart security devices
  • Robotics control
  • Environmental monitoring
  • Industrial automation

Conclusion

GPIO pins are what transform the Raspberry Pi from a simple computer into a powerful hardware interface. By understanding how to use input and output modes, wiring components safely, and writing simple Python scripts, you can build a wide range of projects.

Starting with simple examples like blinking an LED and progressing to sensors and automation systems allows you to gradually build confidence and skill.

Mastering GPIO is one of the most valuable steps in becoming proficient with the Raspberry Pi and opens the door to endless creative possibilities.