by Shahbaz Ahmed
Controlling an External LED using a Raspberry Pi and GPIO pins
In this post we’ll explore Raspberry Pi GPIO pins by creating a “Hello World” GPIO program that results in a blinking red LED. We’ll be using the Python programming language. I am using a headless Raspberry Pi Zero WH (wireless with soldered headers) with Raspbian Stretch Lite (Raspberry Pi operating system with a minimal image based on Debian Stretch).
I will talk to my headless Pi using
ssh and transfer necessary files from my Mac to Pi using
scp commands. I am assuming you have your Raspberry Pi up and running with Raspbian OS installed. If not, then there are lot of articles on the Internet describing how to setup your Pi and install Raspbian, including the official Raspberry Pi documentation.
Things you’ll need:
- 1 x Raspberry Pi (I am using the Pi Zero WH model)
- 1 x bread board
- 1 x red LED light
- 1 x 330 ohm resistor
- 2 x female to male jumper cable
GPIO pins configuration
GPIO stands for General Purpose Input Output. With the help of GPIO pins, a Raspberry Pi can connect and interact with external electronic components. Recent Raspberry Pi models (Pi 3, Pi Zero, Pi W and Pi WH models, and so on) contain 40 GPIO pins. Each pin can turn on or off, or go
LOW in electronic terms. If the pin is
HIGH it outputs 3.3 volts, if the pin is
LOW it is off.
In our example, we’ll be using
pin 6 (ground) and
pin 25. To know more about the GPIO pins in Raspberry Pi, checkout pinout.xyz.
Setting up the circuit
You should turn the Pi off while building the circuit. We’ll create a circuit as depicted in the diagram below:
Note: The resistor in the image is of 220 Ohm, but I have used 330 Ohm in my circuit.
- Use a female to male jumper cable to connect
pin 6(Ground) (black cable in the image above) to the breadboard negative row.
- Use another female to male jumper to connect to connect GPIO
pin 25to point represented by row
12on the breadboard as shown above (blue cable in the image above).
- Connect one end of a 330 ohm resistor to the negative row (the row that is highlighted in green where the black cable above earlier connected) and connect the other end to the point represented by row
11on the breadboard as shown above.
- The shorter end of the LED is the negative end and the longer is the positive end. The longer end should always be connected to the point in the circuit with higher voltage (that is, higher potential). The shorter end of the LED is connected to a GPIO
pin 25(which can output 3.3V) via the blue cable and the longer end is connected to the ground
pin 6(which is 0V and acts like the negative terminal of the battery) via the black cable with a resistor in between them.
Keeping in mind that I had taken introductory classes on electrical and electronics engineering quite some time ago (4 to 5 years approx.), I had two questions that I needed answers for. Please bear with me for being naive in this context.
- Why do we need a resistor in our circuit?
- How do we determine how many Ohms (the measure of electrical resistance) the resistor should be?
A resistor is required to dissipate the extra electrical energy (voltage) from the Raspberry Pi. Raspberry Pi is rated to supply 50mA at 3.3V. Let’s say our red LED can have a forward voltage (forward voltage is the “negative voltage,” used by the LED when it’s on) of around 2V and consumes 4mA current. So the remaining 1.3V should be dissipated by the resistor.
Using Ohm’s law,
V = IR,
(3.3V - 2V) / (4/1000) which comes to around
325 ohms — so I recommend using a 330 ohm resistor.
I discovered this from a Raspberry Pi forum discussion.
Making the LED blink using Python
Now that we have a complete circuit, the next part is to program the GPIO ports to make the magic happen: to get the LED to blink. We will be using the output of GPIO
pin 25 to make the LED blink.
Start your Pi and connect to it using ssh. In the terminal, use the following command to install the Python library
gpiozero library makes working with GPIO pins and connected external components very simple.
To install the Python library, type
sudo apt-get install python3-gpiozero.
Now we will run some Python code. Save the code below onto your your Pi file system in a file named
blink1.py. The script basically turns on the LED connected to
pin 25, sleeps for 1 second, then turns off the LED, and again sleeps for 1 second. And this is done continuously in a loop until the program is terminated (pressing
Now from terminal, go the the directory where the script is saved and run it using the command:
You will see the red LED blinking like this:
We can build lots of fun stuff using
gpiozero using a similar setup. Check out the documentation for
gpiozero which demonstrates some interesting examples. Try building a traffic light system.
Originally published at shahbaz.co on April 7, 2018.