TOPに戻る

gpiozeroライブラリ入門④import RGBLED

 出力のLED、PWMLEDに続き、RGBLEDです。RGBのLEDが一つのパッケージに入っているデバイスです。それぞれの輝度が異なるけど、うまく制御すれば、きれいなフルカラーの表示が可能です。
 一つのデバイスに電流制限抵抗を3個追加しないといけないので、複数個同時に使うときには配線量が多くなります。

 数十以上利用する際は、NeoPixelなどのシリアルで接続しRGB値が制御できるLEDを検討するのがよいでしょう。

 ここでは、アマゾンで入手したデバイスを利用します。

  100個 5ミリメートル 4ピン RGB 共通 カソード 赤緑青 LED 電球 拡散光 レンズ

  • R:波長630~640nm、明るさ1000~1200mcd、順方向電圧1.8~2.0V
  • G:波長515~512nm、明るさ3000~5000mcd、順方向電圧3.2~3.4V
  • B:波長465~475nm、明るさ2000~3000mcd、順方向電圧3.2~3.4V

 使用環境
  • Raspberry Pi Raspberry Pi 4 Model B 2MB
  • OS Raspberry Pi OS(32ビット)5.4.72
  • Python3 3.7.3
  • gpiozeroライブラリ 1.5.1
  • エディタ Mu

RGBLEDクラス

クラスgpiozero.RGBLED(red, green, blue, *, active_high=True, initial_value=(0, 0, 0), pwm=True, pin_factory=None)

 フルカラーLEDコンポーネント(赤、緑、および青のLEDで構成)を動作させる。 共通カソード(最長の足)をGNDに接続する。 ほかのリード線(赤、緑、青のアノード)を任意のGPIOピンに接続する。 三つの電流制限抵抗(アノードごとに一つ)が必要。

パラメータ:

 red (int or str) – RGBLEDの赤コンポーネントを制御するGPIOピン。 有効なピン番号は、ピン番号を参照。 これがNoneの場合、GPIODeviceErrorが発生する。
 green (int or str) – RGBLEDの緑のコンポーネントを制御するGPIOピン。
 blue (int or str) – RGBLEDの青のコンポーネントを制御するGPIOピン。
 active_high (bool) – 一般的なカソードRGB LEDの場合はTrue(デフォルト)に設定する。 共通アノードRGBLEDを使用している場合は、これをFalseに設定する。
 initial_value (Color or tuple) – RGBLEDの初期色。 デフォルトは黒(0,0,0)。
 pwm (bool) – True(デフォルト)の場合、RGBLEDの各コンポーネントのPWMLEDインスタンスを作成する。 Falseの場合、通常のLEDインスタンスを作成する。これにより、スムーズな色のグラデーションが妨げられる。
 pin_factory (Factory or None) – APIの解説を読む。

blink(on_time=1, off_time=1, fade_in_time=0, fade_out_time=0, on_color=(1, 1, 1), off_color=(0, 0, 0), n=None, background=True)

 デバイスの電源を繰り返しON/OFFする。

パラメータ:

 on_time (float) –ONの秒数。デフォルトは1秒。
 off_time (float) –OFFの秒数。デフォルトは1秒。
 fade_in_time (float) –フェード・インに費やす秒数。デフォルトは0。クラスの構築時にpwmがFalseの場合は0でなければならない(そうでない場合はValueErrorが発生する)。
 fade_out_time (float) –フェード・アウトに費やす秒数。デフォルトは0。クラスの構築時にpwmがFalseの場合は0でなければならない
(そうでない場合はValueErrorが発生する)。
 on_color (Color or tuple) –LEDが「ON」のときに使用する色。デフォルトは白。
 off_color (Color or tuple)–LEDが「OFF」のときに使用する色。デフォルトは黒。
 n (intまたはNone) –点滅する回数。なし(デフォルト)は永遠を意味する。
 background (bool) – True(デフォルト)の場合、バックグラウンド・スレッドを開始して点滅を続け、すぐに戻る。 Falseの場合、点滅が終了したときにのみ戻る(警告:デフォルト値のnは、このメソッドが戻らない結果になる)。

off()

 LEDをOFFにする。これは、LEDの色を黒(0、0、0)に設定するのと同じ。

on()

 LEDをONにする。これは、LEDの色を白(1、1、1)に設定するのと同じ。

pulse(fade_in_time = 1,fade_out_time = 1,on_color =(1,1,1),off_color =(0,0,0),n = None,background = True)

 デバイスを繰り返しフェード・インおよびフェード・アウトさせる。

パラメータ:

 fade_in_time (float) – フェード・インに費やす秒数。デフォルトは1。
 fade_out_time (float) – フェード・アウトに費やす秒数。デフォルトは1。
 on_color (色またはタプル) – LEDが「ON」のときに使用する色。デフォルトは白。
 off_color (色またはタプル) – LEDが「OFF」のときに使用する色。デフォルトは黒。
 n (intまたはNone) – パルスする回数。なし(デフォルト)は永遠を意味する。
 background (bool) – True(デフォルト)の場合、バックグラウンド・スレッドを開始してパルスを継続し、すぐに戻る。 Falseの場合、パルスが終了したときにのみ戻る(警告:デフォルト値のnは、このメソッドが戻らない結果になる)。

token()

 デバイスの状態を切り替える。デバイスが現在OFFになっている場合(値は(0,0,0))、これによりデバイスは「完全に」ONに変更される(値は(1,1,1))。デバイスに特定の色がある場合、このメソッドは色を反転する。

blue

 LEDの青い要素をBlueオブジェクトとして表す。

color

 LEDの色をColorオブジェクトとして表す。

green

 LEDの緑の要素を緑のオブジェクトとして表す。

is_lit

 LEDが現在アクティブ(黒ではない)の場合はTrueを返し、それ以外の場合はFalseを返す。

red

 LEDの赤の要素を赤のオブジェクトとして表す。

value

 LEDの色をRGB3タプル(赤、緑、青)として表す。クラスが構築されたときにpwmがTrueの場合、各値は0〜1(そうでない場合は0または1のみ)。たとえば、赤は(1,0,0)、黄色は(1,1,0)、オレンジは(1,0.5,0)になる。

接続

 電流制限抵抗、ここでは300Ωを直列にはんだ付けしました。抵抗値は数百Ωが目安です。1本だけ、リード線が少し長いです。これが共通カソードです。

 さいしょに、次のように接続しました。

  • 赤のアノード - GPIO2
  • 緑のアノード - GPIO3
  • 青のアノード - GPIO4
  • 共通カソード - GND

 プログラムです。

  薄い水色です。

from gpiozero import RGBLED

led = RGBLED(2, 3, 4)
led.color = (0.11, 0.2, 0.5)

 明るくなったり暗くなったりします。

from gpiozero import RGBLED

led = RGBLED(2, 3, 4)

led.pulse()

 薄青色からピンク色に変化します。

from gpiozero import RGBLED
from time import sleep


led = RGBLED(2, 3, 4)

for i in range(100):
    led.color=(i/100, 0.2, 0.5)
    sleep(0.1)

 表示する色を文字で指定できるようにしました。

from gpiozero import RGBLED

led = RGBLED(2, 3, 4)

def getColor(iro):
    color = \
    ['red', (1,0,0)], \
    ['green', (0,1,0)], \
    ['blue', (0,0,1)], \
    ['orange', (1,0.5,0)], \
    ['yellow', (1,1,0)]
    k =[s for s in color if iro in s]
    print(k[0][1])
    return k[0][1]

led.color=(getColor('orange'))

GPIOポートの初期状態

 ラズパイの電源が入ってから、GPIOポートには電圧がLowでないものがあります。たとえば、GPIO2/3はI2Cバス1で、1.8kΩの抵抗でプルアップされているので、初期値はHighです。単位はVです。

GPIO2 3.29   -
GPIO3 3.29   -
GPIO4 3.29 不定 GPIO14
-   3.27 GPIO15
GPIO17 0 0.01 GPIO18
GPIO27 0.02   -
GPIO22 0.02 3.27 GPIO23
-   0.01 GPIO24
GPIO10 3.29   -
GPIO9 0.02 0.02 GPIO25
GPIO11 0.01 3.29 GPIO8
-   3.29 GPIO7
GPIO5 3.27   -
GPIO6 3.27 3.27 GPIO12
GPIO13 3.27   -
GPIO19 0.02 0.01 GPIO16
GPIO26 0.01 0.01 GPIO20
-   0.02 GPIO21

gpiozero Copyright 2015-2020 Ben Nuttall 

連載 gpiozeroライブラリ入門

(1) LED その1 (2) LED その2 (3) PWMLED (4) RGBLED

(5) Buzzer (6) TonalBuzzer

(7) Motor その1 BD65496