今回からボタンとLEDだけの簡単なユーザーインターフェースを作りこんでいく。
シリアルLEDの制御の試みと断念
シリアルLED WS2812B を使って、現在の状態表示を行いたい。
データシートを読むと1us以下のタイミングでシリアルデータ波形を生成しないといけない模様。
adafruitがpython用のモジュールを提供しているので活用できないか試してみる。
adafruit-circuitpython-neopixelライブラリ(Adafruit NeoPixel Überguide Python & CircuitPython)導入
$ sudo pip3 install adafruit-circuitpython-neopixel
試しのphythonコード記述
$ vi serialled_pa0.py
import time
import board
import neopixel
pixel_pin = board.D18
num_pixels = 64 # 64のLEDを制御
ORDER = neopixel.GRB
pixels = neopixel.NeoPixel(pixel_pin, num_pixels, brightness=0.010, auto_write=False, pixel_order=ORDER)
# 0番目をRED指定
pixels[0] = (255, 0, 0)
pixels.show()
try:
while True:
time.sleep(1)
except KeyboardInterrupt:
pass
記述したpythonコードの実行
$ sudo python3 serialled_pa0.py
File “serialled_pa0.py”, line 3, in
import neopixel
File “/usr/local/lib/python3.5/dist-packages/neopixel.py”, line 16, in
import board
File “/usr/local/lib/python3.5/dist-packages/board.py”, line 357
“””
^
SyntaxError: invalid syntax
上記のようなエラーが出て実行できない。
エラーが出ているモジュールをたどっていくと、どうもNanoPiNEOのボード認識ができていない模様。
NanoPiNEOのboardIDは用意されているみたいだが、ボード判定のためにOS情報やCPU情報を抜き出す部分で、NanoPiNEOへ行きつくための条件分岐が用意されていないように思われる。
ドキュメントにもラズパイ対応の記述はあるが、NanoPiNEOについては記述がないので、対応していないのかもしれない。
これを動かすことは今回の目的の本筋ではないため、WS2812Bの制御についてはここまでで断念することとする。