Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

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

More than 1 year has passed since last update.

はじめに

以前、「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は以下になります。

image.png

配線

配線図

image.png

Tickercadを利用しているため、ラズパイがなく、Arduinoになっています。ごめんなさい。

3.3Vはラズパイの1PIN、GNDはラズパイの6PINと考えてください。

ポイントは以下になります。

  • 最初にブレッドボードの外側の+-にはとりあえず、電源(今回は3.3V、5Vの場合もあり)とGNDを接続する。他のパーツの電源とGNDに接続したい場合にはそこからオスオスジャンパーワイヤーで接続。
  • 配線図の赤丸の部分は順番に刺したり抜いたりして、いろいろな色を光らせてみる。
  • ここで光らない場合は、GPIOで光らせようとしてもきっとうまくいかないので、しっかりはっきり光るまで調整する。

※とはいいながら、面倒だったら3.3Vは直接j2に刺しても問題ありません。

Lチカ

ちゃんと光ることが確認できたら今度はGPIOを使ってプログラムで制御します。

配線

配線図

image.png

ここでも、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との接続は次回に続きます。

kei0425
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away