More than 1 year has passed since last update.

以前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を配線します。

raspi-led.png

サンプルプログラム

~/python_apps/led-blink.py
# -*- 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