Raspberry Piの汎用入出力コネクタ(GPIO)をPythonで操作するためのライブラリはいくつかあるんですが、わたしはRaspberry Piクックブックで紹介されていたRPi.GPIOを使っています。
勉強がてら、RPi.GPIOライブラリの使い方をカンタンにまとめておきます。
RPi.GPIOのインポート
import RPi.GPIO as GPIO
ここは当たり前なのでスルーでw
ナンバリング設定
RPi.GPIOではRaspberry PiのGPIOの各ピンを指定するための方法が2つ用意されています。
1つは
GPIO.setmode(GPIO.BOARD)
とする方法で、もう1つは
GPIO.setmode(GPIO.BCM)
とする方法です。
この違いを説明する前に、まずはコチラのページをご覧下さい。
このページにはRaspberry Pi各モデルのGPIOのピン番号と役割が書かれています。
私が使っているModel B+を例にすると
- 左下の1番ピンは3.3Vの電源
- 左上の2番ピンは5V電源
- 右下の39番ピンはGND
- 右上の40番ピンはGPIO21
となっています。
ナンバリング設定で
GPIO.setmode(GPIO.BOARD)
を選んだ場合、これ以降にGPIOピンを選択するにはピン番号(左下から右上までの連番)で指定することになります。
一方
GPIO.setmode(GPIO.BCM)
を選んだ場合は、ピン番号ではなく役割に記載されたGPIOの数字で指定することになります。
例えば、ピン番号3番のGPIO02を使用する場合
- GPIO.setmode(GPIO.BOARD)なら3
- GPIO.setmode(GPIO.BCM)なら2
と指定することになります。
GPIO.BOARDで指定した方がRaspberry Pi各モデル間のズレを吸収しやすいと思うんですが、実際ネットでコード見てるとGPIO.BCMで指定している方が多い気がします。
なぜなんでしょう…w
なお、これ以降のコードは
GPIO.setmode(GPIO.BCM)
で、GPIO04の7番ピンを使うという設定で進めます。
GPIOピンの設定
ナンバリング設定をしたら、使用するGPIOピンの設定をします。
出力として使う場合
GPIOを出力として使う場合は
channel = 4 GPIO.setup(channel, GPIO.OUT)
こんな感じ。ちなみに
channel2 = 5 channels = [channel, channel2] GPIO.setup(channels, GPIO.OUT)
みたいにGPIOピンのリストで設定することも可能です。
入力として使う場合
GPIOを入力として使う場合は
channel = 4 GPIO.setup(channel, GPIO.IN)
このように指定します。
setupメソッドは他にも設定できる項目があります。
GPIOピンの操作
出力として使用する場合
GPIOへ出力するにはoutputメソッドを使用します。
GPIO.output(channel, GPIO.HIGH) # True , 1 も同義 GPIO.output(channel, GPIO.LOW) # False, 0 も同義
Raspberry PiのGPIOはデジタル入出力のみ可能なので、0か1の2値で操作することになります。
入力として使用する場合
GPIOからの入力を読み取るにはinputメソッドを使用します。
input_val = GPIO.input(channel)
入力は読み取るだけなのでカンタンですね。
終了処理
GPIOの操作が終わったらcleanupメソッドで終了します。
GPIO.cleanup()
このようにcleanupメソッドに引数を指定しないと全てのGPIOピンを解放します。
もし特定のGPIOピンのみ解放する場合は
GPIO.cleanup(channel)
という感じで引数を指定すればOKです。
対話型シェルで弄ってる時はつい忘れてしまいます、コレw
これがRPi.GPIOでGPIOを利用する基本的な流れになります。
Raspberry Piを使って電子工作をしてみたいと思っているかたにはこの本がオススメです(初心者向け)。
Raspberry PiへOSをインストールするところから基本的な電子デバイスの操作、PCやスマホからの制御といった高度な内容まで広く網羅されています。
電子工作は中学校の授業以来でしたが、電流、電圧、オームの法則など基本的な予備知識についても解説されていて最初の一冊には良いかなと思います。
新書なのでコスパも良いですw
この本のレビューも書いていますので、気になる方はご覧ください。
コメント