その6.フルカラーLEDを制御する

前置き

前回はファン制御ができましたので、今度はLEDを制御していきます。巷ではLチカとか言うそうです。ハイカラですね。 

配線とソースコード準備

以下のサイトさんを参考に配線とフルカラーLED制御を行います。
pigpioでNeopixelを使う | BotaLab
今回SPIを使う必要がある為、利用するピンは全く同じです。  f:id:nekhbet:20200206013032j:plain
上記サイトさんで紹介されているのはWS2812Bというマイコンが入ったタイプですが、今回私が用意したものはWS2811が入ったタイプですので、そのままでは正常に動作しません。なので内容を以下のように調整します。

  • SPI周波数 1wordの転送時間が倍の2500nsですので、半分の3200000に設定
  • ビット判別 仕様を元に1=0xF8(11111000)、0=0x80(10000000)とします
  • RGB→BRG変換処理 WS2811ではRGBの順序で受け取るので不要
  • その他 stop関数をデストラクタに変更。今回操作するLEDは一個のみなので処理を最適化・簡素化

これらの変更を行ったソースが以下になります。

動作確認

ちゃんとうっすら青く光りました。
f:id:nekhbet:20200206013101j:plain

これで無事に動作…と言いたいですが、実は問題が少し発生しています。というのも、稀にLEDが想定しない色を出力するのです。原因は不明…
WS281x系は時間による判別に依存する部分が大きいらしく、おそらく周波数値の調整やマイコンの状態を監視する何かが必要なのかもしれませんね…
この問題は他の事を進めつつ調べて、後日調整を施してみようと思います。

さて、明日はいよいよカメラ制御に取り掛かっていきます。多分一番の山場ですね。どうなるやら…