Lチカもどき

このページの内容は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関数を起動することもできそうです。


[Raspberry Piはじめましたへ|Raspberry Piへ]
Copyright(c) 2018 Koh-ichi Ito, All rights reserved
Last update: $Date:: 2020-10-15 16:40:28 +0900#$