制御には既存のライブラリを使用していますが、制御プロトコルの調査は一応していました。非常に単純なプロトコルで、GRB各8bitの値を、以下のようにエンコードして信号線1本で送信します。L:0.25usとなります。HとLの持続時間は、それぞれ±0.15usが許容されます。1:11.5となりますので、1:3~1:11までと結構許容範囲は広いです。L:0.6usとなっているようです。許容誤差は±0.15usで変わりありません。HHHLというようにエンコードしてやれば良さそうです。すると、シリアライザ4ビットでNeoPixelの1ビット分の情報を送ることができます。32bitなら8bit分の情報になりますので、3つでNeoPixel一つ分のGRB信号を送れます。HまたはLを1つ出力する時間は0.29us~0.38usとすれば規格の範囲に収まります。これをシリアライザのクロック周波数に換算すると、2.7MHz~3.4MHzになります。クロックマネージャで19.2MHzを6分周すれば上記を満たす3.2MHzになります。MicroPythonの実行速度では、このスピードでデータを連続して送り出すのは無理ですが、ハードウェアPWMにはFIFOバッファが16個(×32bit)ありますので、用意したデータを16個連続して出力することは可能です。これを使用すれば3つでNeoPixel一個分として、5連のNeoPixelまでFIFOで出力できそうです。Cのプログラムを書かなくてもMicroPythonだけでNeoPixelの制御を実現できる(5個までなら)ことになります。いうわけで書いてみたのが以下のコードです。このコードで、若干トリッキーなのがuint32()という関数です。32bit整数に変換して送る必要があります。0xffffffffを渡したければ-1を渡すということです。uint32はこのための変換を行っています。ちなみに、NeoPixelの制御信号を作り出すには、他にSPIを使う方法とI2Sを使う方法があります。用いられているRaspbian用のNeoPixelドライバは、この3つ全てをサポートしています。PiMicroPythonboochow楽しくやろう。コメントをキャンセルメールアドレスが公開されることはありません。*サイト次回のコメントで使用するためブラウザーに自分の名前、メールアドレス、サイトを保存する。上に表示された文字を入力してください。Pi元マイコン少年が、調べたことや作ったものを気まぐれに紹介するブログです。(9)メタ情報ログイン投稿フィードコメントフィードWordPress.org楽しくやろう。元マイコン少年が、調べたことや作ったものを気まぐれに紹介するブログです。(9)メタ情報ログイン投稿フィードコメントフィードWordPress.org。