How2RaspberryPi
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
*Raspberry Piのメモ [#zf75da2c]
**シェルからGPIOを使う [#sa3a7457]
***GPIOのピン [#l50b5b1a]
Rev.2.0のもの。リビジョンにより多少違うらしいので要確認。
この写真は海外ショップで販売されているピン表示ガイド板。
http://is.ocha.ac.jp/~siio/gyazo/20140125180158.png
http://is.ocha.ac.jp/~siio/gyazo/20140125175851.png
***GPIOの使用例(入力編) [#ued8e470]
GPIOの7とGNDは隣り合っているので、ここにスイッチを付けて...
(写真クリックでメーカーサイトへ)
[[http://is.ocha.ac.jp/~siio/gyazo/20140125172740.png:htt...
これを入力にしてプルアップにするにはシェルから次のように...
(ピンを設定したり読んだりするためにはほかにもいろいろな方...
echo 7 > /sys/class/gpio/export
echo "in" > /sys/class/gpio/gpio7/direction
echo "high" > /sys/class/gpio/gpio7/direction
Raspberry PiのGPIOはプルアップ、プルダウンを指定出来る。"...
設定で、プルアップ、プルダウンを指定すると、スイッチ接続...
今回も、スイッチをGNDに接続したので、常時はプルアップ(hig...
cat /sys/class/gpio/gpio7/value
をすると、ボタンを押さなければ1が、ボタンを押せば0が返っ...
echo 7 > /sys/class/gpio/unexport
exportメソッドでは、ピンを排他的に使用するらしい。
なので、exportしたままだと、次に別のプロセスからこれを利...
ということで利用終わったら上記のようにunexportするとよい...
このボタンを5秒間押し続けたらRasberry Piをシャットダウン...
#!/bin/sh
GPIO=7 #使用するGPIOポート
PUSHTIME=5 #押す秒数
#初期設定
echo "$GPIO" > /sys/class/gpio/export
echo "in" > /sys/class/gpio/gpio$GPIO/direction
echo "high" > /sys/class/gpio/gpio$GPIO/direction
#5秒間押されるまで待つ
cnt=0
while [ $cnt -lt $PUSHTIME ] ; do
data=`cat /sys/class/gpio/gpio$GPIO/value`
if [ "$data" -eq "0" ] ; then
cnt=`expr $cnt + 1`
else
cnt=0
fi
sleep 1
done
#このあとシャットダウンするから不要かもしれないけど一応...
echo "$GPIO" > /sys/class/gpio/unexport
#シャットダウンの実行
shutdown -hP now
***GPIOの使用例(出力編) [#m05aec0f]
一方、ピンを出力にするにはシェルから次のように打ち込む。
echo 7 > /sys/class/gpio/export
echo "out" > /sys/class/gpio/gpio7/direction
echo 7 > /sys/class/gpio/unexport
GPIOピンの先に抵抗とLEDを直列につなぎ、先をGNDに落とせば...
抵抗は330オームくらいか1kオームくらい。LEDによっては330オ...
echo 1 > /sys/class/gpio/gpio7/value
をするとLEDが点灯する。echo 0をすれば消灯する。
上記のシャットダウンボタンは、フィードバックがなくて動い...
そこで、こんな
[[http://is.ocha.ac.jp/~siio/gyazo/20140129185646.png:htt...
LED内蔵押しボタンスイッチ(写真クリックで秋月電子へ)を買っ...
これはスイッチとLEDのために4本の端子が付いている。
これをRaspberryのピンに刺すコネクタを作成する。
http://is.ocha.ac.jp/~siio/gyazo/20140201171247.png
これを、GPIO 7→スイッチ→GNDと、また、GPIO 8→抵抗→LED→GND...
以下のようなスクリプトを常駐させておけば、シャットダウン...
#!/bin/sh
BTN=7 #使用するGPIOポート
LED=8
PUSHTIME=5 #押す秒数
#初期設定
echo "$BTN" > /sys/class/gpio/export
echo "in" > /sys/class/gpio/gpio$BTN/direction
echo "high" > /sys/class/gpio/gpio$BTN/direction
echo "$LED" > /sys/class/gpio/export
echo "out" > /sys/class/gpio/gpio$LED/direction
#5秒間押されるまで待つ
cnt=0
while [ $cnt -lt $PUSHTIME ] ; do
data=`cat /sys/class/gpio/gpio$BTN/value`
if [ "$data" -eq "0" ] ; then
cnt=`expr $cnt + 1`
echo 1 > /sys/class/gpio/gpio$LED/value
sleep 0.5
echo 0 > /sys/class/gpio/gpio$LED/value
sleep 0.5
else
cnt=0
sleep 1
fi
done
#このあとシャットダウンするから不要かもしれないけど一応...
echo "$BTN" > /sys/class/gpio/unexport
echo "$LED" > /sys/class/gpio/unexport
#シャットダウンの実行
shutdown -hP now
** PythonからGPIOを使う [#Python]
上記の方法は、たぶん仮想ファイル経由でデバイスドライバに...
CやPythonなどのために、GPIOを呼ぶライブラリーも提供されて...
sudo apt-get install python-rpi.gpio
でインストールできる。
以下は、GPIO 8に抵抗とLEDを取り付け、これを点滅させる例。
最終的にGPIO.cleanupを呼びたいので、コントロールC押下あと...
#!/usr/bin/python
import RPi.GPIO as GPIO
import time
LED=8
GPIO.setmode(GPIO.BCM)
GPIO.setup(LED, GPIO.OUT)
print("Type control-c to stop.\n");
try:
while True:
GPIO.output(LED,1)
time.sleep(1)
GPIO.output(LED,0)
time.sleep(1)
except KeyboardInterrupt:
GPIO.cleanup()
実は、出力に設定したGPIOピンても、その値を読む事ができる...
while True:
GPIO.output(LED,(1-GPIO.input(LED)))
time.sleep(1)
と簡素化できる。( 1-1=0, 1-0=1を使って1,0を反転させる手法)
以下は、GPIO 7とGNDに取り付けた押しボタンスイッチの状態を...
GPIO.setupのpull_up_down引数でプルアップ/ダウンを指定出...
#!/usr/bin/python
import RPi.GPIO as GPIO
import time
Switch=7
GPIO.setmode(GPIO.BCM)
GPIO.setup(Switch, GPIO.IN, pull_up_down=GPIO.PUD_UP)
print("Type control-c to stop.\n");
try:
while True:
print(GPIO.input(Switch))
time.sleep(1)
except KeyboardInterrupt:
GPIO.cleanup()
***Callbackを使う [#hbadad92]
callback関数を設定しておく事で割り込み処理が可能である。
スイッチの状態などをポーリングして監視し続けなくても良い...
GPIO.FALLING, GPIO.RISING, GPIO.BOTHの指定で、1-->0, 0-->...
#!/usr/bin/python
import RPi.GPIO as GPIO
import time
Switch=7
def switch_callback(gpio_pin):
print(gpio_pin)
GPIO.setmode(GPIO.BCM)
GPIO.setup(Switch, GPIO.IN, pull_up_down=GPIO.PUD_UP)
GPIO.add_event_detect(Switch, GPIO.FALLING)
GPIO.add_event_callback(Switch, switch_callback)
print("Type control-c to stop.\n");
try:
while True:
time.sleep(1)
except KeyboardInterrupt:
GPIO.cleanup()
上で示した機械的なスイッチを取り付けただけだとチャッタリ...
このcallback関数では、イベントにより呼びだされた後、チャ...
def switch_callback(gpio_pin):
time.sleep(0.03)
if GPIO.input(gpio_pin) != 0:
return
print(gpio_pin)
終了行:
*Raspberry Piのメモ [#zf75da2c]
**シェルからGPIOを使う [#sa3a7457]
***GPIOのピン [#l50b5b1a]
Rev.2.0のもの。リビジョンにより多少違うらしいので要確認。
この写真は海外ショップで販売されているピン表示ガイド板。
http://is.ocha.ac.jp/~siio/gyazo/20140125180158.png
http://is.ocha.ac.jp/~siio/gyazo/20140125175851.png
***GPIOの使用例(入力編) [#ued8e470]
GPIOの7とGNDは隣り合っているので、ここにスイッチを付けて...
(写真クリックでメーカーサイトへ)
[[http://is.ocha.ac.jp/~siio/gyazo/20140125172740.png:htt...
これを入力にしてプルアップにするにはシェルから次のように...
(ピンを設定したり読んだりするためにはほかにもいろいろな方...
echo 7 > /sys/class/gpio/export
echo "in" > /sys/class/gpio/gpio7/direction
echo "high" > /sys/class/gpio/gpio7/direction
Raspberry PiのGPIOはプルアップ、プルダウンを指定出来る。"...
設定で、プルアップ、プルダウンを指定すると、スイッチ接続...
今回も、スイッチをGNDに接続したので、常時はプルアップ(hig...
cat /sys/class/gpio/gpio7/value
をすると、ボタンを押さなければ1が、ボタンを押せば0が返っ...
echo 7 > /sys/class/gpio/unexport
exportメソッドでは、ピンを排他的に使用するらしい。
なので、exportしたままだと、次に別のプロセスからこれを利...
ということで利用終わったら上記のようにunexportするとよい...
このボタンを5秒間押し続けたらRasberry Piをシャットダウン...
#!/bin/sh
GPIO=7 #使用するGPIOポート
PUSHTIME=5 #押す秒数
#初期設定
echo "$GPIO" > /sys/class/gpio/export
echo "in" > /sys/class/gpio/gpio$GPIO/direction
echo "high" > /sys/class/gpio/gpio$GPIO/direction
#5秒間押されるまで待つ
cnt=0
while [ $cnt -lt $PUSHTIME ] ; do
data=`cat /sys/class/gpio/gpio$GPIO/value`
if [ "$data" -eq "0" ] ; then
cnt=`expr $cnt + 1`
else
cnt=0
fi
sleep 1
done
#このあとシャットダウンするから不要かもしれないけど一応...
echo "$GPIO" > /sys/class/gpio/unexport
#シャットダウンの実行
shutdown -hP now
***GPIOの使用例(出力編) [#m05aec0f]
一方、ピンを出力にするにはシェルから次のように打ち込む。
echo 7 > /sys/class/gpio/export
echo "out" > /sys/class/gpio/gpio7/direction
echo 7 > /sys/class/gpio/unexport
GPIOピンの先に抵抗とLEDを直列につなぎ、先をGNDに落とせば...
抵抗は330オームくらいか1kオームくらい。LEDによっては330オ...
echo 1 > /sys/class/gpio/gpio7/value
をするとLEDが点灯する。echo 0をすれば消灯する。
上記のシャットダウンボタンは、フィードバックがなくて動い...
そこで、こんな
[[http://is.ocha.ac.jp/~siio/gyazo/20140129185646.png:htt...
LED内蔵押しボタンスイッチ(写真クリックで秋月電子へ)を買っ...
これはスイッチとLEDのために4本の端子が付いている。
これをRaspberryのピンに刺すコネクタを作成する。
http://is.ocha.ac.jp/~siio/gyazo/20140201171247.png
これを、GPIO 7→スイッチ→GNDと、また、GPIO 8→抵抗→LED→GND...
以下のようなスクリプトを常駐させておけば、シャットダウン...
#!/bin/sh
BTN=7 #使用するGPIOポート
LED=8
PUSHTIME=5 #押す秒数
#初期設定
echo "$BTN" > /sys/class/gpio/export
echo "in" > /sys/class/gpio/gpio$BTN/direction
echo "high" > /sys/class/gpio/gpio$BTN/direction
echo "$LED" > /sys/class/gpio/export
echo "out" > /sys/class/gpio/gpio$LED/direction
#5秒間押されるまで待つ
cnt=0
while [ $cnt -lt $PUSHTIME ] ; do
data=`cat /sys/class/gpio/gpio$BTN/value`
if [ "$data" -eq "0" ] ; then
cnt=`expr $cnt + 1`
echo 1 > /sys/class/gpio/gpio$LED/value
sleep 0.5
echo 0 > /sys/class/gpio/gpio$LED/value
sleep 0.5
else
cnt=0
sleep 1
fi
done
#このあとシャットダウンするから不要かもしれないけど一応...
echo "$BTN" > /sys/class/gpio/unexport
echo "$LED" > /sys/class/gpio/unexport
#シャットダウンの実行
shutdown -hP now
** PythonからGPIOを使う [#Python]
上記の方法は、たぶん仮想ファイル経由でデバイスドライバに...
CやPythonなどのために、GPIOを呼ぶライブラリーも提供されて...
sudo apt-get install python-rpi.gpio
でインストールできる。
以下は、GPIO 8に抵抗とLEDを取り付け、これを点滅させる例。
最終的にGPIO.cleanupを呼びたいので、コントロールC押下あと...
#!/usr/bin/python
import RPi.GPIO as GPIO
import time
LED=8
GPIO.setmode(GPIO.BCM)
GPIO.setup(LED, GPIO.OUT)
print("Type control-c to stop.\n");
try:
while True:
GPIO.output(LED,1)
time.sleep(1)
GPIO.output(LED,0)
time.sleep(1)
except KeyboardInterrupt:
GPIO.cleanup()
実は、出力に設定したGPIOピンても、その値を読む事ができる...
while True:
GPIO.output(LED,(1-GPIO.input(LED)))
time.sleep(1)
と簡素化できる。( 1-1=0, 1-0=1を使って1,0を反転させる手法)
以下は、GPIO 7とGNDに取り付けた押しボタンスイッチの状態を...
GPIO.setupのpull_up_down引数でプルアップ/ダウンを指定出...
#!/usr/bin/python
import RPi.GPIO as GPIO
import time
Switch=7
GPIO.setmode(GPIO.BCM)
GPIO.setup(Switch, GPIO.IN, pull_up_down=GPIO.PUD_UP)
print("Type control-c to stop.\n");
try:
while True:
print(GPIO.input(Switch))
time.sleep(1)
except KeyboardInterrupt:
GPIO.cleanup()
***Callbackを使う [#hbadad92]
callback関数を設定しておく事で割り込み処理が可能である。
スイッチの状態などをポーリングして監視し続けなくても良い...
GPIO.FALLING, GPIO.RISING, GPIO.BOTHの指定で、1-->0, 0-->...
#!/usr/bin/python
import RPi.GPIO as GPIO
import time
Switch=7
def switch_callback(gpio_pin):
print(gpio_pin)
GPIO.setmode(GPIO.BCM)
GPIO.setup(Switch, GPIO.IN, pull_up_down=GPIO.PUD_UP)
GPIO.add_event_detect(Switch, GPIO.FALLING)
GPIO.add_event_callback(Switch, switch_callback)
print("Type control-c to stop.\n");
try:
while True:
time.sleep(1)
except KeyboardInterrupt:
GPIO.cleanup()
上で示した機械的なスイッチを取り付けただけだとチャッタリ...
このcallback関数では、イベントにより呼びだされた後、チャ...
def switch_callback(gpio_pin):
time.sleep(0.03)
if GPIO.input(gpio_pin) != 0:
return
print(gpio_pin)
ページ名: