技術を磨くだいぱんまん

散歩とインターネットが大好きなシステムエンジニア。暮らし、おでかけ、テクノロジーについて書いています。

電子工作初心者がRaspberry PiのGPIOについて調べてみた

f:id:donchan922:20170607075052j:plain

2017/7/9更新
Raspberry PiのGPIOについて追記しました。


こんにちは、だいぱんまん(@donchan922)です。

Raspberry Piで電子工作をはじめるときによく聞く単語があります。それがGPIO。Raspberry Piと外の世界をつなぐ物理的なインタフェースです。と言われても、

よくわからん。

という人が多いんじゃないでしょうか。僕もその一人です。なんせRaspberry Piを買ったばかりで電子工作もしたことがないので…

ただ電子工作をするにあたりGPIOは避けては通れないものなので、電子工作初心者なりに公式サイトを見ながらRaspberry PiのGPIOについて調べてみました。

GPIOとは

GPIOはGeneral Purpose Input/Output(汎用入出力)の略語である。
入力として動作した場合は電気回路のほかの部分からのデジタル信号を読み取り、出力として動作した場合は他デバイスの制御や信号の通知を行う。

GPIO - Wikipedia

簡単にいうと、Raspberry Piと外部の機器をつないでいろいろできちゃう端子です。言葉で説明するより、例を挙げたほうがイメージしやすいかと思います。GPIOを使うと、以下のようなことができます。

  • 定期的にLEDをピカピカ光らせる
  • スイッチを押すとラズパイが起動する
  • 人が通るとカメラのシャッターを切る

なんか面白そうじゃないですか?GPIOを使って上記のような仕組みを実現させることがいわゆる電子工作というものです。なので、電子工作をはじめるにあたりGPIOは避けて通れないものなのです。

Raspberry PiのGPIOについて

f:id:donchan922:20150221170541j:plain
こちらはRaspberry PiのGPIO端子の配置図です。上部に全部で40本の端子があり、その内26本がGPIO端子で、あとは電源、グランド、その他の端子です。図はRASPBERRY PI 2 Bのものですが、以下モデルも同じ配置です。互換性があっていいですね。

  • RASPBERRY PI MODELS A+
  • RASPBERRY PI MODELS B+
  • RASPBERRY PI 3 B

ちなみに現在販売終了(2017年6月時点)している以下モデルは、上記モデルとGPIO端子の配置が違います。これ以降は上記モデルのGPIO仕様について書いていきます。

  • RASPBERRY PI MODELS A
  • RASPBERRY PI MODELS B

GPIO番号と物理番号

Raspberry PiのGPIO端子にはそれぞれ番号が振られています。その番号の振り方にはGPIO番号と物理番号の2種類があります。

  • GPIO番号:GPIO端子にのみ番号を振ったもの
  • 物理番号:すべての端子に番号を振ったもの

例えばプログラミング言語のPythonでGPIOを制御するとき、上記番号のどちらを使うかによって、以下のとおり設定方法が異なります。

# GPIO番号指定モードの設定
GPIO.setmode(GPIO.BCM)   # GPIO番号指定の場合
GPIO.setmode(GPIO.BOARD)   # 物理番号指定の場合


f:id:donchan922:20170605205744p:plain
こちらはGPIO番号。GPIO端子にのみ番号が振られ、電源やグランド、その他の端子は色づけのみで表現されています。他の人のブログを見ると、この番号を使って説明しているのが多い印象です。


f:id:donchan922:20170605211657p:plain
こちらは物理番号。すべての端子に順序よく番号が振られているのでわかりやすいです。


GPIO端子の詳細については以下サイトに載っています。
Raspberry Pi GPIO Pinout

GPIOはどうやって使うの?

f:id:donchan922:20170605232207p:plain
具体的がこちら。

Raspberry PiのGPIO端子(GPIO番号:18番)にLEDランプを挿し、LEDランプと抵抗をつなぎ、最後に抵抗をグランド(物理番号:25番)に挿しています。

f:id:donchan922:20170605232211p:plain
先ほどの配線を回路図で表したものがこちら。よくみるとGPIO端子の部分がスイッチになっていますね。GPIOはプログラムで入出力を制御できるので、LEDランプを1秒ごとに点けたり消したりすることができるんです。まさにスイッチの役割を果たしているんですね。

実際にプログラム(シェルスクリプトの場合)で書くと以下のようになります。実際に実行してみてLEDランプをチカチカさせると面白いですよ。

#!/bin/bash

# GPIO18を使用する
echo 18 > /sys/class/gpio/export
# GPIO18で出力を行う
echo out > /sys/class/gpio/gpio18/direction

# LEDランプのON/OFFを10回繰り返す
for i in `seq 1 10`
do
  # LEDランプをONにする
  echo 1 > /sys/class/gpio/gpio18/value
  sleep 1
  # LEDランプをOFFにする
  echo 0 > /sys/class/gpio/gpio18/value
  sleep 1
done

# GPIO18の使用を終了する
echo 18 > /sys/class/gpio/unexport

まとめ

  • GPIOはRaspberry Piと外の世界をつなぐ物理的なインタフェース
  • GPIOはプログラムで入出力を制御できる
  • GPIOはとにかくすごいやつ!