以前Raspberry PiでNode.jsのJohnny-Fiveを使ったLチカのサンプルを書きました。今回はPythonのRPi.GPIOパッケージをインストールしてLチカしてみます。
RPi.GPIO
RPi.GPIOパッケージはRaspberry PiのGPIOを操作するときに使います。pipやapt-getからインストールできます。
pipの場合
$ sudo pip install rpi.gpio
apt-getの場合
$ sudo apt-get install python-rpi.gpio
GPIO.BOARDとGPIO.BCM
RPi.GPIOのサンプルを見ているとGPIOのピン番号を指定する方法が2種類あります。何が違うのか調べているとWhat is the difference between BOARD and BCM for GPIO pin numbering?に説明がありました。
- GPIO.BOARD: PIN番号
- GPIO.BCM: GPIO番号
今回LEDのアノードを配線するPIN 11
は、Raspberry Pi Model Bの場合GPIO 17
になります。GPIO番号はモデルごと違う場合があるので、PIN番号で指定するGPIO.BOARDを使った方がよいみたいです。
This channel is already in use
RPi.GPIOのプログラムを実行するとThis channel is already in use
の警告がでる場合があります。これは以前GPIO.setup()
を実行してポートのセットアップをした後、クリアしていないときに発生します。
$ sudo python led-blink.py
led-blink.py:8: RuntimeWarning: This channel is already in use, continuing anyway. Use GPIO.setwarnings(False) to disable warnings.
GPIO.setup(PIN,GPIO.OUT)
プログラムの最後にポートのクリアを行います。
GPIO.cleanup()
ブレッドボード配線
抵抗器は1K(茶黒赤金)を用意しました。LEDを配線します。
サンプルプログラム
# -*- coding: utf-8 -*-
import RPi.GPIO as GPIO
import time
COUNT = 3
PIN = 11
GPIO.setmode(GPIO.BOARD)
GPIO.setup(PIN,GPIO.OUT)
for _ in xrange(COUNT):
GPIO.output(PIN,True)
time.sleep(1.0)
GPIO.output(PIN,False)
time.sleep(1.0)
GPIO.cleanup()
GPIOを操作する場合はroot権限が必要になります。プログラムを実行すると3回、1秒間隔でLチカします。
$ sudo python led-blink.py