Skip to content

サンプル – NeoPixel 編

Takeo Takahashi edited this page Feb 17, 2022 · 3 revisions

image

  • NeoPixel Ring - 12連フルカラーシリアルLEDを赤、緑、青、白色に点灯します。
from ws2812 import WS2812

chain = WS2812(spi_bus=1, led_count=12)
data = [
    (255, 0, 0),  # red
    (0, 255, 0),  # green
    (0, 0, 255),  # blue
    (85, 85, 85),  # white
    (255, 0, 0),  # red
    (0, 255, 0),  # green
    (0, 0, 255),  # blue
    (85, 85, 85),  # white
    (255, 0, 0),  # red
    (0, 255, 0),  # green
    (0, 0, 255),  # blue
    (85, 85, 85),  # white
]
chain.show(data)

image

  • 予め、ampy などでws2812.pyをボードにUploadしておくか、 ws2812.pyの内容をコピー&ペーストなどで実行してください。オリジナルファイルは、https://github.com/JanBednarik/micropython-ws2812 にあります。

  • EK-RA6M2の場合、以下のように接続します。

    NeoPixel-PIN EK-RA6M2-PIN
    DataIn P101
    GND GND
    VCC 5V
  • RA4M1 Clickerの場合、以下のように接続します。

    NeoPixel-PIN RA4M1 Clicker-PIN
    DataIn P101
    GND GND
    VCC 5V

NeoPixelドライバの補足

  • オリジナルは、https://github.com/JanBednarik/micropython-ws2812
    SPIの1クロックをNeoPixelのLowパルス、2クロックをHighパルスに割り当て、4クロックで1ビットを表現し、ソフト処理、割り込みで波形が乱れないようにDMAで送信しています。
  • 本実装では、DMAは使用せず、エンコード方法を踏襲し、4クロックで1ビットを表現し、SPIの32ビット転送で1バイトデータを転送しています。

image

  • 01010101の1バイトデータを送信する際の波形

Home

ホーム

Clone this wiki locally