Raspberry PiのGPIO制御入門――LED点灯・ボタン入力から学ぶ電圧管理の基礎。
そのGPIO配線、5Vのまま繋いでいませんか。RPi.GPIOとgpiozeroの基本から、LED点灯・ボタン入力のコード、見落としやすい電圧の注意点までを解説します。
目次
01GPIO制御はArduinoの感覚のままでは危険なことがある
結論から言えば、Raspberry PiのGPIO(General Purpose Input/Output)を使ったLED点灯やボタン入力のコード自体は、Arduinoの経験があればすぐに理解できる。しかし、電気的な特性には重要な違いがある。Raspberry PiのGPIOピンは3.3Vロジックで動作しており、5V前提のArduino向け部品や配線知識をそのまま持ち込むと、ボード自体を損傷させるおそれがある。
実例として、Raspberry Piの公式ドキュメントでは、GPIOを扱う際の基本的な安全上の注意が明記されている。GPIO on Raspberry Pi(Raspberry Pi公式ドキュメント)では、簡単な部品をGPIOピンに接続すること自体は安全だが配線には注意が必要であり、LEDには電流を制限する抵抗を使うこと、3.3V部品に5Vを使わないこと、モーターをGPIOピンに直接接続せずHブリッジ回路やモータードライバボードを使うことが明記されている。
編集部見解:GPIO制御のコード自体は数行で書けてしまうため、電圧や電流といった電気的な前提を後回しにしがちである。特にArduino(5V系)からRaspberry Pi(3.3V系)に移ってきた人ほど、この電圧差を意識的に確認しておく価値が大きいと考えられる。
― YOFUKASI AI編集部
本記事では、Raspberry PiのGPIOの基礎知識から、LED点灯・ボタン入力の書き方、そして見落とされがちな電圧・電流の注意点までを、初心者から中級者を対象に体系的に解説する。なお、素材画像の提供がなかったため、配線は図ではなく手順化されたテキストで示す。
02Raspberry PiにおけるGPIOの基礎知識
GPIO(General Purpose Input/Output)とは、Raspberry Piの基板に並んだ汎用の入出力ピンのことである。すべてのRaspberry Piボードに40ピンのGPIOヘッダーが搭載されており、LEDの点灯やスイッチの状態読み取りなど、外部の電子部品とのやり取りに使われる。
用語の整理
- BCM番号:Broadcom社のSoC(システムオンチップ)のピン割り当てに基づく番号。多くのPythonライブラリで使われる。
- BOARD番号:基板上の物理的な位置に基づくピン番号。ボードの世代が変わっても同じ位置関係を保つ。
- プルアップ/プルダウン抵抗:入力ピンの電位を安定させるための抵抗。ボタン入力で「押されていない状態」を明確にするために使う。
GPIOをPythonから制御する方法には複数の選択肢がある。GPIO Zero で 直感的にデバイスを制御する(Zenn)では、Raspberry PiのGPIO制御ライブラリとしてRPi.GPIOがよく使われるが、GPIO Zero(gpiozero)を使うとLEDクラスのようなクラスを使うことで、GPIOを意識させることなく直感的にデバイスを扱えると説明されている。gpiozeroはRaspberry Pi OSに標準でインストールされているため、追加のインストール作業なしで使い始められる。
また、GPIOを制御するPythonライブラリの選択肢を整理した記事もある。Pythonライブラリ(GPIO操作):RPi.GPIO(KIYO)では、RPi.GPIOはGPIOピン操作で昔から人気が高く細かい部分まで制御が可能だが習得が難しいとされ、公式によればPythonのガベージコレクティングの影響でリアルタイム性が求められる用途には不向きだと説明されている。
03LED点灯・ボタン入力の仕組みと技術的背景
LEDを点滅させる最小構成のコードは、RPi.GPIOとgpiozeroで次のように書き方が異なる。
# RPi.GPIOの場合
import RPi.GPIO as GPIO
import time
PIN = 17
GPIO.setmode(GPIO.BCM)
GPIO.setup(PIN, GPIO.OUT)
while True:
GPIO.output(PIN, GPIO.HIGH) # 点灯
time.sleep(1)
GPIO.output(PIN, GPIO.LOW) # 消灯
time.sleep(1)
# gpiozeroの場合
from gpiozero import LED
led = LED(17)
led.blink(on_time=1, off_time=1) # 1秒間隔で点滅
ボタン入力とLED点灯を組み合わせた実例もある。PythonでRaspberry PiのGPIO、LED、スイッチ制御(Indoor Corgi)では、gpiozeroのLEDクラスとButtonクラスを組み合わせ、スイッチが押されているかどうかを判定してLEDの点灯時間を切り替えるコード例が紹介されている。プルアップ設定を使うことで、スイッチが押されていない状態を安定して判定できる。
Arduinoでボタン回路を組んだ経験がある場合、GPIO.setup()やButton()の書き方自体には迷わないことが多い。ただし、Arduinoで使っていた5V系の既製モジュール(一部のセンサーやリレーモジュールなど)をそのままRaspberry PiのGPIOに繋いでしまい、電圧が合わずに正しく動作しない、というつまずきは起こりやすい。
GPIOの電圧・電流仕様についても確認しておく必要がある。Raspberry Pi GPIO Pinout(raspberry.tips)では、GPIOピンの出力は最大3.3Vであり5Vの部品を直接接続してはならないこと、1ピンあたりの電流上限は16mA・全体で50mAであること、LEDには必ず直列抵抗を使うべきであることが説明されている。
04GPIO制御ライブラリの比較と選択肢
GPIOを制御するPythonライブラリには、主に3つの選択肢がある。
| 項目 | A. RPi.GPIO | B. gpiozero | C. lgpio |
|---|---|---|---|
| 書き方の簡潔さ | やや冗長 | 簡潔・直感的 | やや低レベル |
| 細かい制御 | 可能 | ライブラリの範囲内 | 可能 |
| Raspberry Pi 5対応 | 非対応(公式に非互換) | 対応(内部でlgpio等を利用) | 対応 |
| 向いている人 | 細部まで制御したい中級者 | 初心者・素早くプロトタイピングしたい人 | 低レベルAPIが必要な開発者 |
※Raspberry Pi 5でのRPi.GPIO非互換に関する情報はraspberry.tipsを参照。各ライブラリの向き不向きの目安は編集部見解を含む。
これから学び始めるなら、まずgpiozeroでLED点灯・ボタン入力の全体像を掴み、より低レベルな制御が必要になった段階でRPi.GPIOやlgpioを学ぶ、という順序が取り組みやすい。
05実践:LED点灯とボタン入力を組み合わせる5ステップ
ここでは「ボタンを押している間だけLEDを点灯させる」という編集部想定シナリオを題材に、gpiozeroを使った配線からコード作成までの具体的な手順を示す。
-
STEP1. LEDとボタンを配線する
LEDは抵抗を挟んでGPIOピンに、ボタンは別のGPIOピンとGNDの間に接続する。
配線手順(テキスト版)- LEDのアノード(長い足)を、220Ω程度の抵抗を介してGPIO17に接続する
- LEDのカソード(短い足)を、GNDピンに接続する
- ボタンの片方をGPIO27に接続する
- ボタンのもう片方をGNDに接続する
実例:LEDはGPIO17、ボタンはGPIO27の組み合わせで配線した。 -
STEP2. gpiozeroからLEDとButtonをインポートする
from gpiozero import LED, Buttonでクラスをインポートする。実例:from gpiozero import LED, Buttonを記述した。 -
STEP3. LEDとButtonのオブジェクトを作成する
使用するGPIO番号を指定して、それぞれのオブジェクトを作成する。ボタンはプルアップ設定にする。
実例:led = LED(17)とbutton = Button(27, pull_up=True)を記述した。 -
STEP4. ボタンの状態を判定するループを書く
button.is_pressedでボタンの状態を確認し、押されている間だけLEDを点灯させる。実例:while True: led.on() if button.is_pressed else led.off()という判定処理を実装した。 -
STEP5. 実行して動作を確認する
ターミナルからスクリプトを実行し、ボタンを押している間だけLEDが点灯するか確認する。
実例:実行直後はLEDが常時点灯したままだったため確認したところ、プルアップの設定を書き忘れており、ボタンの状態が正しく読み取れていなかったことが原因だった(編集部想定シナリオ)。設定を追加すると正常に動作した。
gpiozeroの使用方法をさらに詳しく知りたい場合や、LED・ボタン以外のデバイスの扱い方については、各ライブラリの公式マニュアルも参照するとよい。
06注意点・よくある誤解
Raspberry PiのGPIOピンは3.3Vロジックで動作しており、Arduinoの5V系を前提とした部品や配線知識をそのまま持ち込むと、GPIOやRaspberry Pi本体を損傷させるおそれがある。5V系の部品を使う場合は、レベル変換回路や分圧抵抗で3.3Vに変換してから接続する必要がある。
GPIOピンに流せる電流には上限(1ピンあたり16mA程度、全体で50mA程度)があり、抵抗なしでLEDを直結すると、この上限を超えてLEDやGPIOピンを損傷させるおそれがある。短時間であっても抵抗を省略するのは避けるべきである。
Raspberry Pi 5ではGPIO周りのハードウェア構成が変更されており、従来のRPi.GPIOライブラリはそのままでは互換性がないとされている。Raspberry Pi 5を使う場合は、lgpioや、内部でlgpioなどに対応したgpiozeroへの切り替えを検討する必要がある。
07FAQ
参考文献
- Raspberry Pi Ltd「GPIO on Raspberry Pi」Raspberry Pi Documentation, GitHub. https://github.com/raspberrypi/documentation/blob/master/documentation/asciidoc/computers/raspberry-pi/gpio-on-raspberry-pi.adoc
- ryo_kawamata「[電子工作] GPIO Zero で 直感的にデバイスを制御する」Zenn, 2023年頃. https://zenn.dev/ryo_kawamata/articles/introduce-gpiozero
- KIYO「Pythonライブラリ(GPIO操作):RPi.GPIO」note, 2025年. https://note.com/kiyo_ai_note/n/nff0480763650
- Indoor Corgi「PythonでRaspberry PiのGPIO、LED、スイッチ制御」Indoor Corgi. https://www.indoorcorgielec.com/resources/raspberry-pi/python-gpio/
- raspberry.tips「Raspberry Pi GPIO Pinout 2026」raspberry.tips, 2026年. https://raspberry.tips/en/raspberry-pi-gpio-pinout
- 本文中の具体的な原因特定エピソードは、断りのない限り編集部想定シナリオに基づく想定であり、実測データではありません。
関連記事(内部リンク)
該当なし(本記事はRaspberry Piがテーマであり、内部リンクプールはArduino関連記事のみで構成されているため、無理な挿入は行っていません。)
コメント