パワーLEDのスイッチング回路ができたので、今回は実際にPythonを使ってLEDの点灯をコントロールしてみます。
そのそもラズベリーパイのパイはパイソン(Python)からきているので、たぶんPythonを率先して使うのが正解だと思うんです。ちなみに私はPython使ったことないので、やりながら勉強しようと思います。
Raspberry Piから
sudo python Python 2.7.3 (default, Mar 18 2014, 05:13:23) [GCC 4.6.3] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> import RPi.GPIO as GPIO >>> GPIO.VERSION '0.5.6' >>> exit()
RPi.GPIOライブラリーのバージョンは0.5.6
ねんのため、アップデートしておきます。
sudo apt-get update sudo apt-get upgrade
うげ、wolfram-engine(233MB)が入っててアップグレードに時間がすごいかかる・・。
7% [27 wolfram-engine 14.9 MB/233 MB 6%] 38.9 kB/s 2h 12min 29s
Contorl Cで止めちゃったけど大丈夫かな?
とりあえず
sudo apt-get remove wolfram-engine
でwolfram-engineを消してしまいます。
sudo apt-get upgrade
なんか転送スピードが遅いね。。50kB/sくらいしかでない。
他の雑用でもやってよー。
さて、アップデート完了したので再開。
ちなみにPythonもRPi.GPIOもバージョンアップしてなかったです。
Raspberry PiとパワーLEDのスイッチング回路を組み合わせます。
スイッチング回路はLED点灯コントロール、Part1 パワーLEDとMOS FETに記載されています。
今回はそのスイッチング回路のSWの部分をワイヤジャンパで引っ張ってきてRaspberry Piの16ピン(GPIO23)につなげます。一応Gndを共通させておきます。
今テストで使っているのはModel B+なので500mA程度ならRaspberry Piの5V電源から取ってくればいいのですが、本番ではModel Bを使用する予定なので、スイッチング回路は別途電源をUSBからとってきています。
あと、GPIOの出力は3.3VなのでFETのゲートにかける電圧を2Vちょっとにするために、抵抗は1kオームと1kオームではなく、3kオームと10kオームくらいにしておくのがいいと思います。
それでは適当な場所にmyOutput.pyのファイルを作ります。
sudo vim myOutput.py import RPi.GPIO as GPIO GPIO.setmode(GPIO.BCM) GPIO.setup(23, GPIO.OUT) GPIO.output(23,GPIO.HIGH)
保存(:w)して終了(:q)
GPIO23をオンにするプログラムです。
GPIO.setmode(GPIO.BOARD)というのがありますが、
無難にBCMを使いましょう。
上記のプログラムを実行します。
sudo python myOutput.py
GPIO23(16ピン)を出力にして、HIGH(オン、3.3V)になります。GPIO23は抵抗で分圧されてFETのゲートに2.2V程度かかります。するとFETがオンになって、パワーLEDが点灯します。
もう一度実行して見ます。
sudo vim myOutput.py RuntimeWarning: This channel is already in use, continuing anyway. Use GPIO.setwarnings(False) to disable warnings. GPIO.setup(23, GPIO.OUT)
プログラムの一番最後にGPIO.cleanup()を入れておかないと文句言われるみたいです。
で、一度この警告メッセージが出た後、
どうやってクリーンアップすればいいのだろう?
ためしにimportのあとにGPIO.cleanup()を呼んでクリーンアップさせようとしたところ、
RuntimeWarning: No channels have been set up yet - nothing to clean up! Try cleaning up at the end of your program instead!
警告ができてきて、この警告を消すにはGPIO.setwarnings(False)を入れろと書いてあるけど・・・。微妙なのでRaspberry piを再起動させました。
プログラムの最後の行にGPIO.cleanup()を入れて実行すると、cleanupが終わるとGPIOのアウトプットもオフになってしまいました。オンの時間が短すぎるのでLEDがまったく光らずに終わってしまいます。10秒ほど光らせたいのでtimeを使います。
修正プログラム
sudo vim myOutput.py import RPi.GPIO as GPIO import time GPIO.setmode(GPIO.BCM) GPIO.setup(23, GPIO.OUT) GPIO.output(23,GPIO.HIGH) time.sleep(10) GPIO.cleanup()
実行します。
sudo python myOutput.py
無事パワーLEDが10秒だけ点灯して消えました。Pythonでプログラムを動かすのは初めてだったのですが、とても簡単にできました。
[…] Raspberry PIでLED点灯コントロール、Part2 Pythonでコントロールする [Raspberry Pi]GPIOでLEDの点滅(Python) […]