このページの内容はRaspbian stretchで試した結果です。
この手のオモチャを手にいれたらLチカしてみるのが世の習いなんですが、ちょっと横着してテスタで済ませちゃいました。
ソフトは手っ取り早くシェルスクリプトでやってみました。コードはこんな感じです。
#!/bin/sh
GPIO=2
PAUSE=1
init()
{
echo $GPIO > /sys/class/gpio/export
echo out > /sys/class/gpio/gpio$GPIO/direction
}
cleanup()
{
echo $GPIO > /sys/class/gpio/unexport
exit 0
}
trap cleanup INT
init
while :; do
echo 1 > /sys/class/gpio/gpio$GPIO/value
sleep $PAUSE
echo 0 > /sys/class/gpio/gpio$GPIO/value
sleep $PAUSE
done
定常時の出力はHighなんですね。
Pythonでもやってみました。
#!/usr/bin/env python3
import RPi.GPIO
import signal
import sys
import time
LINE = 2
def init():
RPi.GPIO.setmode(RPi.GPIO.BCM)
RPi.GPIO.setup(LINE, RPi.GPIO.OUT)
def finish(sig, stack):
RPi.GPIO.cleanup()
sys.exit(0)
signal.signal(signal.SIGINT, finish)
init()
while True:
RPi.GPIO.output(LINE, RPi.GPIO.HIGH)
time.sleep(1)
RPi.GPIO.output(LINE, RPi.GPIO.LOW)
time.sleep(1)
WWWを検索すると、RPi.GPIOをapt-getでインストールする、と書いてあるページも見かけますが、ここで使っているRaspbian GNU/Linux 9.4 (stretch)では、apt-getしなくても最初から入っていました。
init()は最初try...exceptで書いてみたんですが、setup()に失敗しても例外は発生せず
./L-chika-2:12: RuntimeWarning: This channel is already in use, continuing anyway. Use GPIO.setwarnings(False) to disable warnings.
RPi.GPIO.setup(LINE, RPi.GPIO.IN)
という警告を出すだけで動作を続けてしまいました。
WWWを検索すると、RPi.GPIOのリファレンスを見つけられない、と書いていらっしゃる方もおられますが、pydoc RPi.GPIOで見ることができました。もうちょっと調べてみないと、まだ使い方の理解に至っていませんが、RPi.GPIO.PWMという子クラスがあるようなので、これを使えば「Lチカ」だけじゃなくって「Lぼやぁ〜」も作れそうですね。それから、出力じゃなくって入力の機能ですが、add_event_detect()、add_event_callback()、wait_for_edge()という関数群もあるので、信号線の立ち上がり、立ち下がりをトリガにcallback関数を起動することもできそうです。