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ライブラリ入門

- OutputDevice -

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

(5) Buzzer (6) TonalBuzzer

(7) Motor その1 BD65496 (8) その2 TB67H420FTG (9) その3 TB6612 (10) その4 MC33926 (11) PhaseEnableMotor DRV8835

(12) Servo (13) AngularServo

- SPI Device -

(14) 10ビットA-DコンバータMCP3001/MCP3002/MCP3004/MCP3008

(15) 12ビットA-DコンバータMCP3201/MCP3202/MCP3204/MCP3208

(16) 13ビットA-DコンバータMCP3301/MCP3302/MCP3304