Raspberry Pi 3 Model B+でLED点灯を行ってみる。
題名通りです。ラズパイ使って基本であるLED点灯を行ってみたいと思います。
はじめに
ラズパイ買って初心者はLEDを点灯させるのが王道みたいなので挑戦してみます。いわゆるプログラミングにおける「Hello World」みたいな位置づけらしい。
ちなみに私はこういう電子工作類に関するスキルはほぼゼロです。
学部の必修の授業でちょっとやったくらい。
でも今は何も覚えてないっていう感じです。
買ったもの
本当に電子工作についてはなにもわかりません。
なのでミーハーなりにこんなものを買ってみました。
色々とはいっているセットです。
中身は多すぎて列挙しきれないですが、これだけはいって1600円とはかなりお得な気がします。
今回、LED点灯で使うのは「プレッドボード」、「330Ωの抵抗」「LED1個」、「ジャンパーワイヤ」です。
このセットに色々とついてるけど、果たしてすべて使い切ることはあるのだろうか。っていう量の抵抗だったりジャンパーワイヤが入っています。
ラズパイの環境構築
物理的な物は準備はしたので、ラズパイのソフト側の準備を行います。
ただ、ここで行うのは下準備みたいなものです。
実際の制御部分のプログラムは別です。
で、何をやるかって言うとpythonの仮想環境を作るvirtualenvを導入します。
もともとラズパイには今現在デフォルトでpython2系(2.7.13)とpython3系(3.5.3)が入っています。
別にこのままでも使えなくは無いし、何が困るかって言うとあまり何も困らない気もするのですが、将来的にデフォルトの部分がごっちゃごちゃになってたらなんとなく嫌なので、1つ1つのプロジェクトに対して仮想環境を作成してそこでプログラムを動作させます。
そうすると、最悪仮想環境が汚れたとこでデフォルトなところには影響ないので何かと安心な気がします。
とりあえずインストールします。
sudo pip3 install virtualenv
で適当なフォルダを作ってそこに入ります。
sudo mkdir envled cd envled
その後、仮想環境を作るコマンドを叩きます。
sudoが必要かどうかちょっと曖昧。
sudo virtualenv .
そうするとディレクトリ内に4つくらいファイルやらフォルダが作成されます。
仮想環境に入りたいときは、
source ./bin/activate
とすると仮想環境に入れます。
自分はこの仮想環境下で様々なプログラムを動かしいます。
配線する
ラズパイ側の下ごしらえは済んだので、物理側の配線を行っていきます。
といってもブレッドボードに配置していくだけです。
すでに点灯しちゃってますがこんな感じです。
ブレッドボードの特性が調べれば簡単に回路を組めます。
はんだ付けしなくていいって便利です。
自分は+の電源は
ここのGPIO2と書かれた場所から取ってきました。
ただ単に3.3Vやら5Vの所につなぐのではなく、GPIOと書かれた所につなぐと制御ができるみたいです。(制御というか極端な話電圧のONOFF)
ラズパイから制御する
実際にこのLEDの点灯を制御するプログラムを書いていきます。
そもそもGPIOにつなぐとデフォルトがONなので点灯します。
それを点けたり切ったりしてみましょう。
まずは仮想環境に入ります。
で仮想環境はまっさらな状態なのでライブラリをインストールします。
sudo pip install rpi.gpio
こいつはGPIOのピンを制御するライブラリです。
デフォルトのラズパイ側のPythonにはインストールされていますが、仮想環境下には無いのでインストール必須です。
ではファイルを作ります。
sudo vim led.py
import RPi.GPIO as GPIO import time PIN = 2 GPIO.setmode(GPIO.BCM) GPIO.setup(pin, GPIO.OUT) for _ in range(3): GPIO.output(PIN,GPIO.HIGH) time.sleep(2) GPIO.output(PIN, GPIO.LOW) time.sleep(2) GPIO.cleanup()
大雑把ですがこんな感じです。
GPIO.setmodeは引数で「GPIO.BCM」か「GPIO.BOARD」を取ります。
これは制御するピンの番号の違いです。
BCMだとGPIO番号(ピン番号のイラスト参照)、BOARDだと物理的な番号になります。
その後、上のプログラムの場合はGPIO番号が2番のところを制御下に置きます。
あとはその2番に対してHIGHorLOWで制御を行います。
HIGHとLOWを交互に繰り返すと点滅します。
ただし、一定時間のスリープをいれないと点滅早すぎてわからないと思います。
まとめ
こんな簡単に制御ができるとは、って感じです。ライブラリ様様でした。
ただ、複雑な制御となるとこれらの組み合わせって考えると面倒くさそう・・・?
次回ぐらいはPWM制御の勉強を行っていきたいと思います。