このドキュメンテーションは、MicroPython の最新開発ブランチのためのものです。 リリースバージョンでは利用できない機能に言及することがあります。

特定のリリースのドキュメントをお探しの場合は、左側のドロップダウンメニューを使って、 望みのバージョンを選択します。

12. APA102 LED の制御

APA102 LED は DotStar LED とも呼ばれ、個別にアドレス指定できるフルカラーの RGB LED で、一般にはストリップ状につながっています。NeoPixel との違いは、制御にクロックとデータの2本のピンが必要な点です。NeoPixel よりもはるかに高いデータ周波数と PWM 周波数で動作でき、残像効果 (persistence of vision) を使った表現に向いています。

APA102 オブジェクトを作成するには、次のようにします:

>>> import machine, apa102
>>> strip = apa102.APA102(machine.Pin(5), machine.Pin(4), 60)

これは、GPIO5 をクロック、GPIO4 をデータとする 60 ピクセルの APA102 ストリップを設定します。ピン番号とピクセル数は、必要に応じて調整できます。

RGB の色データと輝度は、決まった順序で APA102 に送られます。通常これは (Red, Green, Blue, Brightness) です。新しい APA102C LED を使っている場合は緑と青が入れ替わるので、順序は (Red, Blue, Green, Brightness) になります。APA102 のレンズは四角に近く、APA102C は丸みを帯びています。APA102C のストリップを使っていて、RBG ではなく RGB の順で色を指定したい場合は、次のようにタプルの色順をカスタマイズできます:

>>> strip.ORDER = (0, 2, 1, 3)

ピクセルの色を設定するには次のようにします:

>>> strip[0] = (255, 255, 255, 31) # 白、最大輝度に設定
>>> strip[1] = (255, 0, 0, 31) # 赤、最大輝度に設定
>>> strip[2] = (0, 255, 0, 15) # 緑、半分の輝度に設定
>>> strip[3] = (0, 0, 255, 7)  # 青、1/4 の輝度に設定

write() メソッドを使って色を LED に出力します:

>>> strip.write()

デモ:

import time
import machine, apa102

# 60 個の LED を備えた 1m のストリップ
strip = apa102.APA102(machine.Pin(5), machine.Pin(4), 60)

brightness = 1  # 0 は消灯、1 は暗め、31 が最大

# 0〜255 のオフセットを色のタプルに変換するヘルパー
def wheel(offset, brightness):
    # 色は r - g - b - r へと遷移します
    offset = 255 - offset
    if offset < 85:
        return (255 - offset * 3, 0, offset * 3, brightness)
    if offset < 170:
        offset -= 85
        return (0, offset * 3, 255 - offset * 3, brightness)
    offset -= 170
    return (offset * 3, 255 - offset * 3, 0, brightness)

# デモ1: RGB RGB RGB
red = 0xff0000
green = red >> 8
blue = red >> 16
for i in range(strip.n):
    colour = red >> (i % 3) * 8
    strip[i] = ((colour & red) >> 16, (colour & green) >> 8, (colour & blue), brightness)
strip.write()

# デモ2: 虹のすべての色を表示
for i in range(strip.n):
    strip[i] = wheel((i * 256 // strip.n) % 255, brightness)
strip.write()

# デモ3: 全ピクセルを虹色でフェードさせ、ピクセルごとにずらす
for r in range(5):
    for n in range(256):
        for i in range(strip.n):
            strip[i] = wheel(((i * 256 // strip.n) + n) & 255, brightness)
        strip.write()
    time.sleep_ms(25)

# デモ4: 同じ色で輝度を変える
for b in range(31,-1,-1):
    strip[0] = (255, 153, 0, b)
    strip.write()
    time.sleep_ms(250)

# 終了: すべての LED を消灯
strip.fill((0, 0, 0, 0))
strip.write()