Blinking an LED is one of the easiest and most rewarding projects for beginners using Raspberry Pi. It helps you understand how to control GPIO pins and build a foundation for more complex hardware projects.
What Is Blinking an LED?
Blinking an LED involves turning it on and off repeatedly using the Raspberry Pi’s GPIO pins. This project demonstrates:
- Output Control: Sending signals from the Raspberry Pi to external hardware.
- GPIO Programming: Configuring pins as output to control devices.
Prerequisites
Before starting, ensure you have the following:
- Raspberry Pi: Any model (e.g., Raspberry Pi 4, Zero).
- MicroSD Card: With Raspberry Pi OS installed.
- LED: A standard 5mm LED.
- Resistor: A 220-ohm resistor to protect the LED.
- Breadboard and Jumper Wires: For assembling the circuit.
- Python Installed: Pre-installed on most Raspberry Pi OS versions.
Step 1: Assemble the Circuit
Components:
- LED: Longer leg (anode) is positive, shorter leg (cathode) is negative.
- Resistor: Limits the current to prevent damage to the LED.
Circuit Connections:
- Insert the LED into the breadboard.
- Connect the longer leg (anode) of the LED to GPIO17 (Pin 11).
- Connect the shorter leg (cathode) to one end of the resistor.
- Connect the other end of the resistor to a GND pin (e.g., Pin 6).
Circuit Diagram:
Raspberry Pi Pin | Component Connection |
---|---|
GPIO17 (Pin 11) | Anode of LED |
GND (Pin 6) | Resistor to Cathode |
Step 2: Install Necessary Libraries
The RPi.GPIO library is pre-installed on most Raspberry Pi OS versions. To confirm or install:
pip install RPi.GPIO
Step 3: Write the Python Code
Use the Python code below to blink the LED.
import RPi.GPIO as GPIO # Import the GPIO library
import time # Import the time library
# GPIO setup
GPIO.setmode(GPIO.BCM) # Use Broadcom (BCM) numbering
GPIO.setup(17, GPIO.OUT) # Set GPIO17 as an output pin
# Blink the LED
try:
while True:
GPIO.output(17, GPIO.HIGH) # Turn on LED
print("LED is ON")
time.sleep(1) # Wait for 1 second
GPIO.output(17, GPIO.LOW) # Turn off LED
print("LED is OFF")
time.sleep(1) # Wait for 1 second
except KeyboardInterrupt:
print("Exiting program...")
GPIO.cleanup() # Reset GPIO pins to their default state
Step 4: Run the Python Script
Save the script as blink_led.py.
Run the script using the terminal:
sudo python3 blink_led.py
Observe the LED blinking on and off every second.
Explanation of the Code
- Import Libraries:
- RPi.GPIO controls the GPIO pins.
- time adds delays for blinking.
- GPIO Setup:
- GPIO.setmode(GPIO.BCM): Sets the pin numbering system.
- GPIO.setup(17, GPIO.OUT): Configures GPIO17 as an output pin.
- Blink Loop:
- GPIO.output(17, GPIO.HIGH): Turns the LED on.
- time.sleep(1): Waits for 1 second.
- GPIO.output(17, GPIO.LOW): Turns the LED off.
- Cleanup:
- GPIO.cleanup(): Resets GPIO pins when the script is interrupted or stopped.
Common Issues and Solutions
LED Not Blinking:
- Check the wiring and ensure all connections are secure.
- Verify the GPIO pin number matches the code.
Permission Denied Error:
- Run the script with
sudo
:
sudo python3 blink_led.py
LED Stays Off:
- Ensure the resistor value is appropriate (220-ohm recommended).
- Test the LED and resistor with a multimeter.
Keyboard Interrupt Not Working:
- Press CTRL + C to exit the script and reset GPIO pins.
Advanced Enhancements
1. Change the Blink Speed
Modify the delay time to adjust the blinking speed:
time.sleep(0.5) # Faster blinking
2. Use Multiple LEDs
Control multiple LEDs using different GPIO pins:
GPIO.setup(18, GPIO.OUT) # Set GPIO18 as output
GPIO.output(18, GPIO.HIGH) # Turn on LED connected to GPIO18
3. Add a Button
Use a button to control the LED:
GPIO.setup(18, GPIO.IN, pull_up_down=GPIO.PUD_UP) # Button as input
if GPIO.input(18) == GPIO.LOW: # Button pressed
GPIO.output(17, GPIO.HIGH) # Turn on LED