GPIO

更新日: 2026.03.02

概要

Raspberry Piがただの小型PCでは無い大きな特徴の1つがこのGPIOです。 これにより、LEDを光らせたり、センサーから情報を読み取ったり、モーターを動かしたりと 自作機器の管理が簡単に可能になります。

基本構造

一列20個のピンが2列(合計40個)が基板上に配置されています。

Raspberry Pi GPIO Pinout Diagram

それらのピンの役割は大きく分けると、”電源”、”GND”、”GPIOピン”の3つ。

  • 電源ピン
    • 3.3Vや5Vの電圧を供給
    • 自作機器の電源に使用可。(消費電力に注意。大きな電力を必要とする機器は不可)
  • GNDピン グランド。
  • GPIOピン
    • GPIO0から27の28本。3.3Vロジック。
    • GPIO0、1はHAT(Hardware Attached on Top)用
    • GPIO2,3はプルアップ固定。その他のピンはソフトで設定可能。
    • PWM用ピン
      • Software PWM available on all pins
      • Hardware PWM available on GPIO12, GPIO13, GPIO18, GPIO19
    • SPI用ピン
      • SPI0: MOSI (GPIO10); MISO (GPIO9); SCLK (GPIO11); CE0 (GPIO8),CE1 (GPIO7)
      • SPI1: MOSI (GPIO20); MISO (GPIO19); SCLK (GPIO21); CE0 (GPIO18);CE1 (GPIO17); CE2 (GPIO16)
    • I2C用ピン
      • Data: (GPIO2); Clock (GPIO3)
      • EEPROM Data: (GPIO0); EEPROM Clock (GPIO1)
    • Serial用ピン:TX (GPIO14); RX (GPIO15)

GPIO0,1の使用を避けて自由に使えるのは26本。 デフォルトピン(I2C、SPI用)が有るがソフトで変更可能。

使い方

ピン番号の指定方法

  • GPIO.BCM(Broadcom SOC Channel
    • デフォルトの設定。
    • 機能に依存した呼び方。
  • GPIO.BOARD
    • 物理ピン番号。
    • コネクタ上に並ぶピンの物理的な番号を指定する方法。

使用前

Raspberry PiのOSは、「root(管理者)以外のユーザーはハードウェアに直接触れさせない」 というルールが有る為GPIOにアクセスする時に。

  • 管理者としてアクセスする。 sudo ....。
  • ユーザーをgpioグループに登録する: $ sudo usermod -a -G gpio $USER

使用後

GPIO.cleanup()を行う。(RPi.GPIOのみ)

  • GPIOピンを安全な『入力』状態(デフォルト)に戻す。
  • プログラムが占有していたリソースを解放するのが目的。
  • 行わないと「Channel already in use」警告が出る

ライブラリ

主なライブラリとして”RPi.GPIO”と、”gpiozero”が有ります。

 特徴 RPi.GPIOgpiozero
設計思想ピン番号をベースにした
低レイヤー操作
コンポーネント(LED、ボタン等)
をベースにした抽象化
学習難易度若干複雑(初期設定が多い)非常に簡単(初心者向け)
クリーンアップGPIO.cleanup() が必須自動で行われる
コードの短さ長くなりがち非常に短い

RPi.GPIO

ライブラリのインポート import RPi.GPIO as GPIO GPIOピンのピン番号を指定 GPIO.setmode(GPIO.BCM) 入出力設定 GPIO.setup(11, GPIO.OUT)  # GPIO11 -> OutPut GPIO.setup(12, GPIO.IN) # GPIO12 -> InPut プルダウン/アップを伴った入力設定 GPIO.setup(12, GPIO.IN, pull_up_down=GPIO.PUD_UP) GPIO.setup(12, GPIO.IN, pull_up_down=GPIO.PUD_DOWN) データの入力 GPIO.input(12) データの出力 GPIO.output(11, True) / GPIO.output(11, 1) <- 出力High GPIO.output(11, False) / GPIO.output(11, 0) <- 出力Low

gpiozero

RPi.GPIOと違い直接入出力を指定しない。コンポーネントで指定。

カテゴリクラス名主な用途・特徴
基本入力Button
InputDevice
スイッチ、ボタン。プルアップ/ダウン設定が可能。
汎用的な入力。
基本出力LED
PWMLED
DigitalOutputDevice
LEDの単純なON/OFF制御。
LEDの明るさ調整(0.0〜1.0)。
汎用的な出力。リレーや単純な信号送信に。
高度な表示RGBLED
Buzzer
LEDBarGraph
フルカラーLED。(R, G, B) で色を指定。
ブザー。beep() メソッドで断続音も可能。
複数のLEDを並べた音量メーターのような表示。
センサーMotionSensor
DistanceSensor
LightSensor
PIR人感センサー。動きを検知。
超音波距離センサー(HC-SR04など)。
フォトレジスタ(LDR)を使用した明るさ検知。
モーターMotor
Servo
Robot
DCモーターの回転方向と速度制御。
サーボモーターの角度制御(-1〜1)
2つのモーターを組み合わせた走行ロボットの制御。
ライブラリのインポート from gpiozero import Button, LED GPIOピンのピン番号を指定 GPIO.setmode(GPIO.BCM) 入力設定 button = Button(17, pull_up=True) # プルアップ (デフォルト)button = Button(17)と同じ button = Button(17, pull_up=None) # プルアップ無し (フロート) button = Button(17, pull_up=False) # プルダウン button.is_pressed #押されていれば True、離れていれば False を返します。 button.value # 押されていれば 1、離れていれば 0 を返します。 出力設定 led = LED(18) relay = DigitalOutputDevice(18) led.on() # 点灯 High relay.off() # 停止 Low led.toggle() # 状態を反転 # ボタンが押されたとき/離されたときの動作を登録 button = Button(17, pull_up=True) #ボタンが押されるとLow led = LED(18) button.when_pressed = led.on #ボタンが押されたら button.when_released = led.off #ボタンが離れたら プルダウン/アップを伴った入力設定 GPIO.setup(12, GPIO.IN, pull_up_down=GPIO.PUD_UP) GPIO.setup(12, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)

簡単なプログラム

9番ピン(GND)と 11番ピン(GPIO17)を使ってLEDを点滅させるプログラム。

LED connection circuit for Raspberry Pi GPIO
gpio.py python
import RPi.GPIO as GPIO import time GPIO.setmode(GPIO.BCM) # GPIO番号指定 GPIO.setup(17, GPIO.OUT) # LEDピンを出力に設定 GPIO.output(17,0) # LED消灯 for a in range(10): GPIO.output(17, 1) # LED点灯 time.sleep(1) # 1秒待機 GPIO.output(17, 0) # LED消灯 time.sleep(1) # 1秒待機 GPIO.cleanup() # GPIOを解放

最後に

GPIOはRaspberry PIの魅力です。

SINCE 2026