はじめに
以前、「raspberry piでフルカラーLEDを扱う」という記事を書きました。
https://qiita.com/kei0425/items/7033cd716f3b818252b4
しかし、インターネットにつながっていなかったため、ちゃんとIoTにしたいと思います。
前提条件
ラズパイ
- raspberry pi 3
- Raspbianインストール済み
- jupyter notebook インストール済み(ポートは8888以外に変更)
- pigpioインストール済み(Raspbianならインストールされているはずです。)
パーツ類
- フルカラーLED
- ブレッドボード
- 抵抗3つ
- オスメスジャンパーワイヤー5本
- オスオスジャンパーワイヤー4本
おさらい Lピカ
まずは、LEDを光らせます。
ラズベリーパイのGPIOは以下になります。
配線
配線図
Tickercadを利用しているため、ラズパイがなく、Arduinoになっています。ごめんなさい。
3.3Vはラズパイの1PIN、GNDはラズパイの6PINと考えてください。
ポイントは以下になります。
- 最初にブレッドボードの外側の+-にはとりあえず、電源(今回は3.3V、5Vの場合もあり)とGNDを接続する。他のパーツの電源とGNDに接続したい場合にはそこからオスオスジャンパーワイヤーで接続。
- 配線図の赤丸の部分は順番に刺したり抜いたりして、いろいろな色を光らせてみる。
- ここで光らない場合は、GPIOで光らせようとしてもきっとうまくいかないので、しっかりはっきり光るまで調整する。
※とはいいながら、面倒だったら3.3Vは直接j2に刺しても問題ありません。
Lチカ
ちゃんと光ることが確認できたら今度はGPIOを使ってプログラムで制御します。
配線
配線図
ここでも、Arduinoですみません。
A2,A3,A4はそれぞれ、GPIO2(3PIN),GPIO3(5PIN),GPIO4(7PIN)と読み替えてください。
ラズベリーパイのGPIOはピンなので、オスメスジャンパーワイヤーに差し換えてください。
プログラム
まずは、今回はpigpioを利用しているので、デーモンを起動します。
jupyter上では、!でシェルコマンドを実行できるので以下のようにします。
!sudo pigpiod
その後、初期設定を行います。
import pigpio
赤PIN = 2
青PIN = 3
緑PIN = 4
pi = pigpio.pi()
pi.set_mode(赤PIN , pigpio.OUTPUT)
pi.set_mode(青PIN , pigpio.OUTPUT)
pi.set_mode(緑PIN , pigpio.OUTPUT)
その後1セルに以下を1つづつ入力して実行してみてください。
pi.write(赤PIN, 0)
pi.write(赤PIN, 1)
pi.write(青PIN, 0)
pi.write(青PIN, 1)
pi.write(緑PIN, 0)
pi.write(緑PIN, 1)
セルの実行毎にLEDの色がついたり消えたりそのままだったりしたと思います。
最後まで実行すると、LEDが消えているはずです。
0を指定すると点灯し、1を指定すると消灯します。
好きなセル実行して、いろいろ試してみましょう。
PWMで中間色
次はPWMを利用して中間色を出してみます。
from time import sleep
FREQ = 50 #
RANGE = 100
p = [赤PIN, 青PIN, 緑PIN]
for i in range(3):
pi.set_PWM_frequency(p[i], FREQ)
pi.set_PWM_range(p[i], RANGE)
FREQは周波数、RANGEはPWMの範囲を表します。
その後、以下を実行すると、赤が薄暗くつきます。
pi.set_PWM_dutycycle(赤PIN, 90)
数値をいろいろ変更して実行してみてください。(同じセルで直接修正すると楽です。)
グラデーション
最後にこちらを実行してください。
d = [0, 0, 0]
r = [3,5,7]
while True:
sleep(0.1)
for i in range(3):
pi.set_PWM_dutycycle(p[i], d[i])
d[i] += r[i]
if d[i] >= RANGE or d[i] <= 0:
r[i] *= -1
d[i] += r[i]
LEDがさまざまな色に変化するのが分かると思います。
firebaseとの接続は次回に続きます。