Blog::Trapple

技術系のちょっとしたメモとか

Raspberry PiでLチカ(Python編)

LEDのオンオフをプログラムで制御してみます。
(こういうのを電子工作のHelloWorld的な言葉でLチカというらしい)
Pythonは書いたことがありませんが、参考情報が多く、GPIOのモジュールもあるので採用してみました。

import RPi.GPIO as GPIO
import time
import signal
import sys

channel = 4 #GPIOの4番を利用
GPIO.setmode(GPIO.BCM) # GPIOで指定するならBCM, ピン番号で指定するならBOARD
GPIO.setup(channel, GPIO.OUT)
is_running = True

def sigint_handler(signo, frame):
    is_running = False
    GPIO.output(channel, False)
    GPIO.cleanup()
    print "\nBye!!"
    sys.exit(0)

signal.signal(signal.SIGINT, sigint_handler)

while is_running == True:
    GPIO.output(channel, True)
    time.sleep(0.05)
    GPIO.output(channel, False)
    time.sleep(0.05)

github

lchika.pyという名前で保存しました。 rootで実行します。

sudo python sample.py


無事にLチカできました!

謎の警告

GPIO 2(3番PIN) or GPIO 3(5番PIN)を使うと以下の警告がでました。 そういえばオフ状態でもうっすらLEDがついてる気もします。

sample1.py:7: RuntimeWarning: A physical pull up resistor is fitted on this channel!
  GPIO.setup(channel, GPIO.OUT)

f:id:trapple:20151016002057j:plain:w200

Raspberry Pi 2付属のGPIOカードにもGPIO 2(I2C_SDA1)と書いてあるし、 どうやらこのピンは普通のGPIOではない特殊な力を持っているようです。

GPIO2/3はI2C通信というものをするのに使うらしいです。
I2C通信については近いうちにまた調べて見ようかと思います。

参考

RPi.GPIOの基本的な使い方
RPi.GPIO.setupメソッドについてもう少し
How do I capture SIGINT in Python?
[Raspberry Pi]I2Cを使う(設定編)