How to Make Blinking LEDs With the Raspberry Pi
The Raspberry Pi is more than inextricably a tiny computer system. It’s a formidable board that permits you tote out so numerous things with its GPIO pins. Here we depict you how to make blinking LEDs with the Raspberry Pi.
- What Renders the LEDs Blink?
- What You Necessitate
- How to Make Blinking LEDs
- How the Code Jobs
- Let’s Make Added LEDs Blink!
- Oftentimes Enquired Anxieties
Fourthly read: How to Govern your Raspberry Pi with Windows via SSH
What Renders the LEDs Blink?
When you sift at the apex sector of your Raspberry Pi, you’ll position around 40 steel pins jutting out of the circuit board. If you have a Raspberry Certainly zero, there is perhaps circular deviates for soldering header pins. In either husk, they are referred to as GPIO pins (Basic Purpose Input / Outcome).

Each GPIO pin is lugged out to have one of two placements at any lugged out time: a HIGH and a LOW. For the Raspberry Pi’s pinout parameters, a pin recharged at 3.3 V counts as a HIGH or a “easy to understand 1,” while anything under around 2.5-ish V counts as a LOW or “easy to understand 0.” A board that’s based on 3.3 V for high and low upshots is said to be on “3.3v logic.”
When you fasten an LED between a pin on HIGH and a GND pin, you’re basically making a detailed circuit. The LED must light upwards since of the perishable electricity.

In some casings your LEDs will pop in smoke when there’s also a integration current perishable with it. To withhold that from taking place, you can contain a resistor. It doesn’t woe whether it’s on the anode or cathode side – either side must convenience the current perishable with.
Fourthly read: How to Regimens an Arduino with a Raspberry Pi
GPIO and Different other Pins
Let’s be legible under, as not with one voice of those steel pins are contemplated GPIO. They are only GPIO if they can be programmed to have a high or low – for this justification the term “Input / Outcome.” For the Raspberry PI, there are equally pins lugged out for power (3.3v, 5v, and GND) and massaging with EEPROM (ID_SD and ID_SC).
This time, you won’t have to assume around with one voice those numerous other pins except GND and one GPIO pin.
Syllabus the GPIO Pins
How tote out you tell each GPIO Pin what to tote out? At the most simplified level, you’ll have to make commands in machine code. That’s noting be a minuscule piece also arduous for newbies.
Instead, for the Raspberry Pi, you can utilise Python or C++, which then avails compiled into machine code.
For this fussy project, we are making service of Python, as it’s simpler to utilise.
Fourthly read: How to Mount Windows 11 on a Raspberry Pi 4
What You Necessitate
- Any Raspberry Pi incarnation that’s not the Pico (preferably the Raspberry Pi 3 Version B+ like the one in this example, but anything works), installed with the Raspberry Pi OS.
- An HDMI display and wire
- Mouse and keyboard
- A handset battery charger (to power the Raspberry Pi)
- A tiny LED
- A 250Ω resistor (can be any advantage close to this)
- A solderless breadboard
- x2 male-to-lady jumper wires (or male-to-male if you have a header hat)
How to Make Blinking LEDs
Let’s snatch this one weigh at a time and make one LED blink on its own.
- Open your terminal and kind
sudo apt-get install python3-rpi.gpio
to arranged the RPi.GPIO part for Python 3.

- Open a text editor and kind this code:
import RPI.GPIO as GPIO from time import sleep GPIO.setwarnings(False) GPIO.setmode(GPIO.BOARD) GPIO.setup(7, GPIO.OUT, initial=GPIO.LOW) while True: GPIO.output(7, GPIO.HIGH) print("LED on") sleep(1) GPIO.output(7, GPIO.LOW) print("LED off") sleep(1)
- Conserve it in a folder somewhere. The extension moniker must be .py. ON my Raspberry Pi, I referred to as it “rpi-blink.py” to make it simpler to position.

- Closed down your Raspberry Pi and acquire rid of it from with one voice power resources.
- To takeoff constructing the circuit, wire your LED so that there’s a resistor on either the cathode or anode, then determinant the cathode side to pin 7 and the anode side to pin 9 (GND).

Pointer: to diagnose the pin number, hold your Raspberry Pi in a means that the GPIO pins rest to the apt. The apex-disowned pin is pin 1, apex-apt is pin 2. The one under pin 1 is pin 3, then to the apt of it is pin 4, and so on.
- Power it upwards once more so that we can run the Python script. Open your Terminal and utilise
cd
to move to the Python record’s folder. Kind:
python3 rpi-blink.py
to make the LED blink.

All with one voice-natural: if you have Thonny Python IDE, then click on the “Run current script” button to make it run apt from the IDE.

- To make it stop, press Ctrl + C within the terminal. Yet if you’re making service of Thonny Python IDE, then inextricably close the editor.

Fourthly read: 10 Handy Python One-Liners You Should Realize
How the Code Jobs
There are two things that make it job: the code and the circuit. We are founding with the code and mowing it into 3 segments:
- Import commands
- Arrangement commands
- Knotted commands
In practice, it’s nice to envision code as tiny guises organized with each other to make bigger guises.
Import Commands
Python traditionally doesn’t make it this simplified to power GPIO pins. There’s a integration of things going on behind the scenes. The nice explanation is that you can import the code that appearances after with one voice these pesky things.
Thieve a sift at spiels 1 and 2:
import RPI.GPIO as GPIO from time import sleep
These are a pair of spiels that import code from something referred to as a “Python part.”
import RPI.GPIO as GPIO
permits you import the fabrics of the RPI.GPIO part and permits you utilise the GPIO
keywords to telephone call a unbiased apprehensive RPI.GPIO
.
Meanwhile, from time import sleep
permits you import the sleep()
unbiased from Python’s constructed-in time part. This permits you postpone the next queue of code for a lugged out number of secs.
Arrangement Commands
Some code has to be “arranged” or recognized in such a means since it’s lugged out by numerous other code to tote out clarified logic. We’ll telephone call these arrangement commands.
Unalike import commands, arrangement commands tote out not “import” code from exterior parts. They import them from the parts you’ve currently imported.
As an example, GPIO.setwarnings(False)
imports the .setwarnings()
unbiased from the RPI.GPIO
part, which was formerly recognized as GPIO
. This unbiased avoids a activate ultimatum when you run the code. It’s scheme to True
by default.
To discuss the numerous other two, we are lingering with GPIO.setmode(GPIO.BOARD)
. That signals RPI.GPIO
what sort of pinout you’re noting utilise. There are two species: BOARD and BCM. The BOARD pinout permits you pick pins based on their digits. At the exceptionally same time, the BCM pinout substructures it on their Broadcomm SOC Network designation. To withhold things fast, BOARD is simpler to utilise since it’s habitually the exceptionally same zero woe which Raspberry Pi incarnation you utilise. BCM, meanwhile, has a tendency to be numerous from incarnation to incarnation.
Last but not least, we have GPIO.setup(7, GPIO.OUT, initial=GPIO.LOW)
that earns service of the .setup()
unbiased, which asks you 3 things: the pin number, its designation, and its initial advantage. The pin number we’re making service of under is pin number 7. We’re visualized to scheme it into an output pin and ensure that it overtures out as LOW
. Without this, the Raspberry Pi will never construe what to tote out with pin 7.
Knotted Commands
This one’s the funky sector. Knotted commands let you tell the Raspberry Pi to tote out things. We launched this loophole with while True:
, which loopholes the next spiels of code around forever.
There were 3 guises in the loophole: GPIO.output()
, print()
, and sleep()
.
GPIO.output()
confiscates an output pin and packages it to eitherHIGH
orLOW
. If you reckoned around adjusting which pin to utilise on your Raspberry Pi, then you must have switched over7
with a pin number of your remedy.print()
lugs out it print something out on the console. It confiscates in a string, number, or variable that contains the previous two.sleep()
pauses the totality power for a particular number of secs. Utilise a number smaller sized than 1 to make it pause for less than a second.
The Circuit
Now that you construe how the code works, let’s snatch a sift at the circuit. The code lugs out a circuit by attaching pin 7 to GND. When pin 7 is on HIGH
, it discharges 3.3V that enacts with the resistor and LED, then enters GND. This comes to be a detailed circuit and is why the LED lights upwards.

HIGH
. Proper: schematic circuit when pin 7 is on LOW
.Yet what happens when pin 7 is on low? The 3.3V goes down to around 0V. This means, zero electricity enacts with the LED, so it doesn’t light upwards. You can envision pin 7 as a filter of a button, as it rotates the circuit either on or off.
Let’s Make Added LEDs Blink!
Now that you construe what lugs out things job, let’s fluctuation our code a minuscule to make it run two LEDs.
For this, you’ll inextricably have to contain two more LEDs of any color and two more 250Ω resistors.
- Open your code editor once more and paste this code:
import RPI.GPIO as GPIO from time import sleep GPIO.setwarnings(False) GPIO.setmode(GPIO.BOARD) GPIO.setup(7, GPIO.OUT, initial=GPIO.LOW) GPIO.setup(12, GPIO.OUT, initial=GPIO.HIGH) GPIO.setup(37, GPIO.OUT, initial=GPIO.LOW) while True: GPIO.output(7, GPIO.HIGH) GPIO.output(12, GPIO.LOW) print("LED on @ pin 7") print("LED off @ pin 12") sleep(1) GPIO.output(7, GPIO.LOW) GPIO.output(12, GPIO.HIGH) print("LED off @ pin 7") print("LED on @ pin 12") sleep(1) if x == 1: GPIO.output(37, GPIO.HIGH) print("LED on @ pin 37") x = 0 elif x == 0: GPIO.output(37, GPIO.LOW) print("LED off @ pin 37") x = 1 else: print("Logic Error") sleep(1)
- Conserve then closed down your Raspberry Pi.
- To wire upwards the circuit, for every LED you have, fasten it to a resistor in integration, then wire upwards the cathode side to the Raspberry Pi. There must be one for pin 7, an additional for pin 12, and the last one for pin 37. The anode side must be hooked to GND. Each of these pins has a GND pin close to them. Those must be pins 9, 20, and 39.

Pointer: if you run out of male-to-lady jumper wire, you can stick a male-to-male to a lady-to-lady jumper wire to kind a longer male-to-lady jumper wire.

- As shortly as you’re shouldered out, mix upwards the Raspberry Pi and state weigh 6 to takeoff the Python script.

Fourthly read: How to Thieve advantage of Python for Rudimentary Linux Product Management and Networking Openings
Oftentimes Enquired Anxieties
Why does my LED remain amenable when I stop the script?
When the Raspberry Pi reads the Python script, it reads the queue before carrying out the command. You perhaps quelled it apt after it read the queue GPIO.output(7, GPIO.HIGH)
, so it wasn’t able to lug the pin to LOW initially. You can vacate it as is, as it will antiphon to LOW the next time you reboot. Fourthly, make an additional Python script that rotates the pin to LOW as shortly as it runs.
I lugged out my LED on the apt pin, but it doesn’t light upwards at with one voice. Why?
There are two you can probably imagine parts: either your LED is violated or you put the cathode on the different side. Try swiveling the LED’s pins around initially.
Is it safeguard to void the LED the different means?
Yes. You can void it different, and the current will inextricably not enact with. It’s a meaningful clarity among diodes – also light sending out diodes – they enable electricity to enact with on one side and not the numerous other.
Is it safeguard to rearrange the LED while the Raspberry Pi is powered?
If it’s inextricably swiveling the LED the different means, then it’s okay, and there’s zero injury there. Yet if you are noting void the LED everywhere, there’s a opportunity that you can fast the 5v pin to a GPIO pin. That’s noting respite your board.