Raspberry PiのGPIO制御入門――LED点灯・ボタン入力から学ぶ電圧管理の基礎

プログラミング・電子工作






Raspberry PiのGPIO制御入門――LED点灯・ボタン入力から学ぶ電圧管理の基礎。|YOFUKASI AI




Raspberry Pi / 電子工作

Raspberry PiのGPIO制御入門――LED点灯・ボタン入力から学ぶ電圧管理の基礎。

そのGPIO配線、5Vのまま繋いでいませんか。RPi.GPIOとgpiozeroの基本から、LED点灯・ボタン入力のコード、見落としやすい電圧の注意点までを解説します。

YOFUKASI AI編集部 | 更新日:2026年8月18日 | 読了目安:約13分

Chapter 01 — Introduction

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点灯・ボタン入力の書き方、そして見落とされがちな電圧・電流の注意点までを、初心者から中級者を対象に体系的に解説する。なお、素材画像の提供がなかったため、配線は図ではなく手順化されたテキストで示す。



Chapter 02 — Background

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のガベージコレクティングの影響でリアルタイム性が求められる用途には不向きだと説明されている

Chapter 03 — Mechanism

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には必ず直列抵抗を使うべきであることが説明されている



Chapter 04 — Comparison

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を学ぶ、という順序が取り組みやすい。

Chapter 05 — Practice

05実践:LED点灯とボタン入力を組み合わせる5ステップ

ここでは「ボタンを押している間だけLEDを点灯させる」という編集部想定シナリオを題材に、gpiozeroを使った配線からコード作成までの具体的な手順を示す。

  1. STEP1. LEDとボタンを配線する

    LEDは抵抗を挟んでGPIOピンに、ボタンは別のGPIOピンとGNDの間に接続する。

    配線手順(テキスト版)

    1. LEDのアノード(長い足)を、220Ω程度の抵抗を介してGPIO17に接続する
    2. LEDのカソード(短い足)を、GNDピンに接続する
    3. ボタンの片方をGPIO27に接続する
    4. ボタンのもう片方をGNDに接続する
    実例:LEDはGPIO17、ボタンはGPIO27の組み合わせで配線した。
  2. STEP2. gpiozeroからLEDとButtonをインポートする

    from gpiozero import LED, Buttonでクラスをインポートする。

    実例:from gpiozero import LED, Buttonを記述した。
  3. STEP3. LEDとButtonのオブジェクトを作成する

    使用するGPIO番号を指定して、それぞれのオブジェクトを作成する。ボタンはプルアップ設定にする。

    実例:led = LED(17)button = Button(27, pull_up=True)を記述した。
  4. STEP4. ボタンの状態を判定するループを書く

    button.is_pressedでボタンの状態を確認し、押されている間だけLEDを点灯させる。

    実例:while True: led.on() if button.is_pressed else led.off()という判定処理を実装した。
  5. STEP5. 実行して動作を確認する

    ターミナルからスクリプトを実行し、ボタンを押している間だけLEDが点灯するか確認する。

    実例:実行直後はLEDが常時点灯したままだったため確認したところ、プルアップの設定を書き忘れており、ボタンの状態が正しく読み取れていなかったことが原因だった(編集部想定シナリオ)。設定を追加すると正常に動作した。

gpiozeroの使用方法をさらに詳しく知りたい場合や、LED・ボタン以外のデバイスの扱い方については、各ライブラリの公式マニュアルも参照するとよい。

Chapter 06 — Pitfalls

06注意点・よくある誤解

!誤解1. Arduinoと同じ感覚で5V部品を繋いでも大丈夫だ

Raspberry PiのGPIOピンは3.3Vロジックで動作しており、Arduinoの5V系を前提とした部品や配線知識をそのまま持ち込むと、GPIOやRaspberry Pi本体を損傷させるおそれがある。5V系の部品を使う場合は、レベル変換回路や分圧抵抗で3.3Vに変換してから接続する必要がある。

!誤解2. LEDは抵抗なしでも短時間なら問題ない

GPIOピンに流せる電流には上限(1ピンあたり16mA程度、全体で50mA程度)があり、抵抗なしでLEDを直結すると、この上限を超えてLEDやGPIOピンを損傷させるおそれがある。短時間であっても抵抗を省略するのは避けるべきである。

!誤解3. どのRaspberry Piでも同じGPIOコードがそのまま動く

Raspberry Pi 5ではGPIO周りのハードウェア構成が変更されており、従来のRPi.GPIOライブラリはそのままでは互換性がないとされている。Raspberry Pi 5を使う場合は、lgpioや、内部でlgpioなどに対応したgpiozeroへの切り替えを検討する必要がある。



Chapter 07 — FAQ

07FAQ

Q.Raspberry PiのGPIOとは何ですか。
A.GPIO(General Purpose Input/Output)は、Raspberry Piの基板に並んだ汎用の入出力ピンです。LEDの点灯やスイッチの状態読み取りなど、外部の電子部品とやり取りするための接点として使います。すべてのRaspberry Piボードに40ピンのGPIOヘッダーが搭載されています。

Q.RPi.GPIOとgpiozeroはどう違いますか。
A.RPi.GPIOはGPIOピンを細かく直接制御できる昔からあるライブラリで、習得にやや手間がかかります。gpiozeroはRPi.GPIOなどを基にして作られた、より直感的で簡潔なAPIを提供するライブラリです。LEDクラスやButtonクラスのように、部品の種類に応じたクラスが用意されているため、初心者にも扱いやすいとされています。

Q.GPIOピンに5Vの部品を直接接続しても問題ありませんか。
A.問題があります。Raspberry PiのGPIOピンは3.3Vロジックで動作しており、5Vの信号を直接入力すると、GPIOやRaspberry Pi本体を損傷させるおそれがあります。5V系の部品を使う場合は、レベル変換回路や分圧抵抗を使って3.3Vに変換してから接続する必要があります。

Q.LEDをGPIOに接続する際、抵抗は必要ですか。
A.必要です。GPIOピンに流せる電流には上限があり、抵抗なしでLEDを直結すると、過大な電流が流れてLEDやGPIOピンを損傷させるおそれがあります。公式ドキュメントでも、LEDには電流を制限する抵抗を使うことが推奨されています。

Q.Raspberry Pi 5でRPi.GPIOライブラリは使えますか。
A.Raspberry Pi 5ではGPIOまわりのハードウェア構成が変更されており、従来のRPi.GPIOライブラリはそのままでは互換性がないとされています。Raspberry Pi 5でGPIOを扱う場合は、lgpioライブラリや、内部でlgpioなどに対応したgpiozeroを使うことが推奨されます。

Q.初めてGPIOを使うなら、RPi.GPIOとgpiozeroのどちらを学ぶべきですか。
A.初心者であれば、まずgpiozeroから始めて全体の動作イメージを掴み、より細かい制御が必要になった段階でRPi.GPIOを学ぶ順序が取り組みやすいと考えられます。将来的にRaspberry Pi 5以降のボードを使う可能性も考えると、lgpioベースのgpiozeroに慣れておく方が長期的には無難です(編集部見解)。

参考文献

関連記事(内部リンク)

該当なし(本記事はRaspberry Piがテーマであり、内部リンクプールはArduino関連記事のみで構成されているため、無理な挿入は行っていません。)


関連記事

特集記事

コメント

この記事へのコメントはありません。

TOP
CLOSE