電子工作初心者がRaspberry PiのGPIOについて調べてみた
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について
こちらは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) # 物理番号指定の場合
こちらはGPIO番号。GPIO端子にのみ番号が振られ、電源やグランド、その他の端子は色づけのみで表現されています。他の人のブログを見ると、この番号を使って説明しているのが多い印象です。
こちらは物理番号。すべての端子に順序よく番号が振られているのでわかりやすいです。
GPIO端子の詳細については以下サイトに載っています。
Raspberry Pi GPIO Pinout
GPIOはどうやって使うの?
具体的がこちら。
Raspberry PiのGPIO端子(GPIO番号:18番)にLEDランプを挿し、LEDランプと抵抗をつなぎ、最後に抵抗をグランド(物理番号:25番)に挿しています。
先ほどの配線を回路図で表したものがこちら。よくみると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はとにかくすごいやつ!