プログラミングによるLED制御
Raspberry Piとブレッドボードの配線ができたら、Raspberry Piの電源を入れます。ここでは、GPIOに接続されたLEDを、Pythonのプログラムから制御します。
プログラムの作成
TeraTermを起動し、ネットワーク上のRaspberry Piにアクセスします。ホスト名は、セットアップの際に指定した任意の名前に.localを付加したものにします。筆者の場合は、ホスト名を「asapi」にしたので、次のようにアクセスします。
- ホスト名:asapi.local
- サービス:ssh(22番ポート)
ユーザ名とパスフレーズを聞かれるダイアログが表示されるので、以下の認証情報を入力します。
- ユーザ名:pi
- パスフレーズ:<セットアップで設定したパスワード>
認証に成功すると、次のようにRasbianのメッセージが表示されます。
ホームディレクトリで次のコマンド実行し、「led」という名前のディレクトリを作成します。
$ pwd /home/pi $ mkdir led $ cd led
作成したディレクトリで、次のプログラム「led.py」を作成します。
# coding: utf-8
# 1.ライブラリのインポート
import RPi.GPIO as GPIO
import time
# 2.ピン番号の割り当て設定
GPIO.setmode(GPIO.BOARD)
# 3.ピン番号を変数LEDにセット
LED = 40
# 4.出力設定
GPIO.setup(LED, GPIO.OUT)
# 5.点滅/点灯を3回繰り返す
for i in range(3):
print 'Count=' + str(i)
# ハイレベルを出力し、5秒待機
GPIO.output(LED, GPIO.HIGH )
print 'LED High'
time.sleep(5)
# ローレベルを出力し、5秒待機
GPIO.output(LED, GPIO.LOW)
print 'LED Low'
time.sleep(5)
# 6.GPIOの解放
GPIO.cleanup()
プログラムの説明をします。
1. ライブラリのインポート
RPi.GPIO は、Raspberry PiのGPIOをPythonで操作するためのライブラリです。このライブラリを使うため、インポートします。また、LED点灯/消灯の待機時間を指定するためtimeライブラリもインポートします。
2. ピン番号の割り当て設定
プログラムで制御したいGPIOのピンを指定する方法を選択します。ピンの指定はGPIO.setmodeメソッドで行います。引数にGPIO.BOARDを指定したときはピン番号での指定となります。また、引数にGPIO.BCMを指定したときは、ピン名のGPIOの番号で指定します。
3. ピン番号を変数LEDにセット
今回は、ピン番号40(GPIO21)に配線し、ピン割り当てをGPIO.BOARDにしましたので、変数LEDに40をセットします。
なお、GPIO.setmode(GPIO.BCM)でピン割り当てを指定した場合、21となります。
4. 出力設定
GPIOの出力をセットします。GPIO.setupメソッドの引数に、ピン番号と出力を表すGPIO.OUTを指定します。
5. 消灯/点灯を3回繰り返す
for文を使って処理を3回繰り返す制御構文を記述します。4で設定したGPIOの出力に対して、次の制御命令を記述します。Raspberry PiのGPIOはデジタル信号のみの制御になりますので、0または1のいずれかの命令になります。
| メソッド | LEDの状態 | 説明 |
|---|---|---|
| GPIO.output(LED, GPIO.HIGH ) | 消灯 | ハイレベル(True/1) |
| GPIO.output(LED, GPIO.LOW) | 点灯 | ローレベル(Fase/0) |
消灯および点灯後5秒間待機するためtime.sleep()メソッドを実行します。引数には、待機する時間を秒で指定します。
6. GPIOを解放
使用したGPIOを開放するため、GPIO.cleanup()メソッドを実行します。プログラムの終了時は必ず実行するようにしてください。
Pythonは、インデントでブロック構造を表現します。また#以降はコメント行になります。RPi.GPIOライブラリの詳細については、以下の公式サイトを参照して下さい。
LEDの点滅点灯の確認
作成したプログラム、および電子回路の配線に誤りがないかを確認したら、次のコマンドを実行してLEDが5秒ごとに点灯するかを確認してください。Lowの状態のときに、LEDが点灯すれば問題なく動作しています。
$ sudo python codezine.py Count=0 LED High LED Low Count=1 LED High LED Low Count=2 LED High LED Low
おわりに
今回の記事では、Raspberry PiのGPIOとブレッドボードで作成した電子回路を使って、LEDを制御するためのプログラミングを行いました。GPIOのしくみやブレッドボードの使い方、GPIOを制御するためのPythonライブラリをご紹介しました。
次回は、温度センサー(DS18B20)をつかって室温を測定するための電子回路の作成とプログラミングを紹介したいと思います。
