今回は8個のLEDを使って、順番に点灯・消灯を行い、流れるように点灯させるプログラムを実行します。
今回もLEDのアノード(+)側には3.3Vの電圧をかけてある状態で、カソード(-)側をコントロールします。Lesson1での考え方と同様で、多くの書籍はアノード側の電圧を3.3V(HIGH)にするか、0V(LOW)にするかを考えますが、今回はその逆だという事をお忘れなく。
使用する部品
- Raspberry Pi 3 Model B × 1
- 電源アダプター5V 2.5A × 1
- ブレットボード × 1
- LED × 8
- 抵抗 220Ω × 8
- ジャンプワイヤー(オス/オス) × 9
※これらの部品はFabshopがふるさと納税で提供している「ふるさと納税Raspberry Piスターターキット」もしくは当サイトで購入可能な「Raspberry Pi スターターキット」の電子工作キットに同梱されています。
実体配線図
プログラムのコピーと保存
ラズベリーパイメニューから「プログラミング」-「Geany」を選んでクリックします。
メニューバーから「ファイル」→「新規」をクリックします。
【Lesson1】のときと同じように、この下にある「LED Flowing Lightsのプログラム」の枠右上に並んだアイコンの内、右から2番目のアイコンをクリックします。(マウスをアイコンに近づけると”Copy”の表示が現れます)
すると、プログラムの文字列が全て選択されるので、「Ctrl」と「C」キーを同時に押してコピーします。
import RPi.GPIO as GPIO import time pins = [11, 12, 13, 15, 16, 18, 22, 7] def setup(): GPIO.setmode(GPIO.BOARD) for pin in pins: GPIO.setup(pin, GPIO.OUT) GPIO.output(pin, GPIO.HIGH) def loop(): while True: for pin in pins: GPIO.output(pin, GPIO.LOW) time.sleep(0.5) GPIO.output(pin, GPIO.HIGH) def destroy(): for pin in pins: GPIO.output(pin, GPIO.HIGH) GPIO.cleanup() if __name__ == '__main__': setup() try: loop() except KeyboardInterrupt: destroy()
今回のプログラムのポイントは、8つのLEDポートがあって、どれも同じような動作をする場合に、GPIOポートのピン番号を1つ1つ変数に入れて管理するのではなく、リストとして一括でデータの管理をします。LEDにつなぐポート番号は
pins =[ 11, 12, 13, 15, 16, 18, 22, 7]
のようにpins というリストとして扱います。def setup() の部分で、
for pin in pins : とありますが、リストに入っているポート番号ごとに:(セミコロン)以下を繰り返しセットアップしています。リストの最後まで繰り返し設定します。LEDのポートは出力ポートになるので、すべてのポートをGPIO.OUTにして、初期値はGPIO.HIGHにしておくことで、カソード側が3.3Vになって、電位差が生まれずにLEDが光らない状態になるという事です。
loop関数内では、やはりfor文を使ってHIGHだったカソード側をLOW(0V)に変えていきます。0.5秒たったらポートをHIGHに戻すことでLEDが消え、forループの最初に移動して次のpin番号を光らせて、また0.5秒後に消すという作業を繰り返していく事で、横に流れていきます。
あとは、今までと殆ど同じです。
新たに開いたタブ「untitled×」の1行目にマウスカーソルを置いて右クリックして出てくるメニューから「貼り付け」を選択します。
Geanyのメニューバーから「ファイル」→「別名で保存」をクリックします。
新たに「ファイルを保存」画面が現れるので、左ペインの「デスクトップ」をクリックします。
「ファイルを保存」画面の1番上の項目「名前:」の入力欄に拡張子”.py”でプログラム名を入力し、「保存」ボタンをクリックします。
プログラムの実行
Geanyの画面に戻って、ツールバーの紙飛行機のようなアイコンをクリックします。
新たに「ターミナル」画面が開き、LEDの点灯が左右に流れるように移動しながら繰り返します。「Ctrl」と「C」キーを同時に押すとプログラムが停止します。