Raspberry Pi GPIO Runs at 3.3V: What That Means Before You Wire Anything
Raspberry Pi GPIO pins use 3.3V logic and can be destroyed by 5V signals. Learn what that means, wire a safe first LED circuit, and handle 5V peripherals correctly.
01 Sept 2026, 18:44 UTC

The fastest way to kill a Raspberry Pi is also the most common beginner mistake: connecting a 5V sensor output straight to a GPIO pin. The Pi's header looks like it should play nicely with the 5V Arduino ecosystem sitting next to it on your bench, but the Broadcom SoC at the heart of every Pi — from the original Pi 1 through the Pi 5 — speaks 3.3V logic and nothing higher. Understanding that one fact, and designing around it, is the difference between a reliable project and a dead board.
What 3.3V logic actually means at the pin
Logic levels define the voltage thresholds a chip uses to interpret a signal as "high" or "low." On the Pi, a pin driven high outputs about 3.3V, and an input expects a high to be comfortably above roughly 2V and a low below roughly 0.8V. Feed an input 5V and you exceed the absolute maximum rating of the SoC's input circuitry. There's no graceful degradation here — the damage is instant and permanent, and it often takes out more than the one pin.
This matters because a huge amount of hobbyist hardware — older sensors, relay modules, serial adapters, Arduino shields — defaults to 5V signaling. The Pi's 5V pins on the header are power-only; they offer no protection and no tolerance on the data pins.
A safe first circuit: LED on GPIO 17
The classic LED blink is still the right way to validate your setup, because it exercises the output side only and can't hurt the pin if wired sensibly. You need an LED, a 220Ω resistor (to limit current to a safe level for both the LED and the pin), a breadboard, and two jumper wires.
Wire GPIO 17 (physical pin 11) through the resistor to the LED's anode (long leg), and the LED's cathode to any ground pin. Then, on the Pi OS desktop or over SSH, run this Python script with the preinstalled GPIO Zero library:
from gpiozero import LED
from time import sleep
led = LED(17) # BCM numbering, not physical pin number
while True:
led.on()
sleep(1)
led.off()
sleep(1)No special permissions are needed beyond being in the gpio group, which the default Pi OS user already is. If the LED blinks, your toolchain, pin numbering, and wiring are all confirmed in one shot. If it doesn't, check the LED orientation first — that's the most common failure, not the code.
When you must cross the 3.3V/5V boundary
Outputs from the Pi to a 5V device are sometimes fine — many 5V inputs register anything above ~2.5V as high, so a 3.3V signal works. The dangerous direction is the reverse: a 5V device driving a Pi input. You have three practical options:
- Voltage divider: two resistors (e.g., 10kΩ and 20kΩ) scale 5V down to ~3.3V. Cheap and fine for slow signals like sensor status lines.
- Logic level shifter: a bidirectional MOSFET-based module. The right choice for bidirectional buses like I2C, where a divider won't work.
- Choose 3.3V-native parts: most modern sensors (BME280, MPU-6050, etc.) are 3.3V-native and often the simplest fix is part selection, not conversion.
One more trap: floating inputs. An unconnected input pin picks up electrical noise and reads randomly. Always enable the internal pull-up or pull-down resistor in software (Button(27, pull_up=True) in GPIO Zero) or add an external resistor, so the pin has a defined idle state.
Trade-offs and how to verify before trusting it
Voltage dividers are simple but load the signal source and are too slow for high-speed lines; level shifters cost a little more and add a component but handle bidirectional and faster signals. Also note that older boards (Pi 1 and 2) have less robust ESD protection than the Pi 4 and 5, so keep voltage margins tighter and avoid hot-plugging jumpers on those models.
Before connecting any new peripheral, verify with a multimeter: probe the signal line while the external device drives it high. If it reads above 3.3V, do not connect it. After wiring, confirm the OS sees what you expect — with gpio read 27 (from the wiringPi-style tools, if installed) or a quick GPIO Zero read — before building logic on top of it. And always cross-check pin numbers against the official pinout for your specific Pi model, since BCM and physical numbering differ and mix-ups are a classic source of "dead pin" confusion.
The takeaway: treat 3.3V as a hard ceiling, give every input a defined state, and measure before you connect. That discipline costs minutes and saves boards.
0 replies
A thoughtful contribution can make all the difference. Be the first to share one.