raspberry piでフルカラーLEDを扱う IoT編(その1 pigpio)


はじめに

以前、「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との接続は次回に続きます。