Raspberry Piでボタン入力とLED制御を組み合わせたいけれど、
・ボタンの配線方法が分からない
・押したときにLEDを点灯させたい
・GPIOの設定方法が知りたい
と悩んでいませんか?
本記事では、GPIO17に接続したLEDと、
GPIO18に接続したボタンを使って、
ボタン操作でLEDを制御する方法を解説します。
今回やること
・GPIO17 → LED(出力)
・GPIO18 → ボタン(入力)
ボタンを押している間だけLEDが点灯する回路を作成します。
準備するもの
・Raspberry Pi 5
・ブレッドボード
・LED
・抵抗(200Ω)
・タクトスイッチ(ボタン)
・ジャンパーワイヤー
配線方法
以下のように接続します。
■ LED(GPIO17)
GPIO17 → 抵抗 → LED(+)
LED(−)→ GND
■ ボタン(GPIO18)
GPIO18 → ボタン → GND
GPIO17は物理ピン11、GPIO18は物理ピン12に対応しています。

Pythonコード
from gpiozero import LED, Button
from signal import pause
# GPIO17にLED
led = LED(17)
# GPIO18にボタン(プルアップ)
button = Button(18)
# ボタンが押されたらLED ON
button.when_pressed = led.on
# ボタンが離されたらLED OFF
button.when_released = led.off
pause()
nano button_led.py
コードを書いたら、
Ctrl + O → 保存
Ctrl + X → 終了


button = Button(18)で、
内部プルアップが効いている状態になります。
※gpiozeroでは内部プルアップ抵抗が有効になっているため、
ボタンが押されるとLOW、離すとHIGHになります。
動作確認
ターミナルで以下を実行します。
sudo python3 button_led.py
プログラムを実行すると、
・ボタンを押す → LED点灯
・ボタンを離す → LED消灯
となれば成功です。



なぜボタンでLEDが制御できるのか?
ボタンが押されるとGPIO18の状態が変化し、
プログラムがその変化を検知します。
gpiozeroでは以下のようにイベントとして扱われます。
・押された → when_pressed
・離された → when_released
これにより、ボタン操作に応じてLEDを制御できます。
よくある失敗
・GPIO番号の間違い(17と18の逆)
・GNDに接続していない
・LEDの向きが逆
・pause()を書いていないためすぐ終了する
応用
以下のような応用が可能です。
・ボタンを押したらトグル(ON/OFF切り替え)
・長押し検出
・複数ボタン制御
関連記事
まとめ
本記事では、ボタン入力でLEDを制御する方法を解説しました。
・GPIO17:LED(出力)
・GPIO18:ボタン(入力)
・gpiozeroで簡単に制御可能
入力と出力を組み合わせることで、
より実践的な回路が作れるようになります。
こちらの記事で使用しているRaspberry Pi 5 はこちら
▶ Amazonで詳細を見る
本記事では、こちらの電子工作キットを使用しています。
▶ OSOYOO(オソヨー) Raspberry Pi 用 学ぶ電子工作キット(Amazonへのリンク)
