obnizのフォーラムは新しいシステムに移行しております。
新しいフォーラムはこちらになりますM5Stack×obnizOSでNeoPixとIMUの同時使用でエラー
-
M5StackのGrove端子にNeoPixを接続してIMUと同時利用しようとすると下記エラーが出ます。それぞれ単独では正常に動作しています。
<html> <head> <meta name="viewport" content="width=device-width, initial-scale=1"> <script src="https://obniz.io/js/jquery-3.2.1.min.js"></script> <script src="https://unpkg.com/obniz@2.2.0/obniz.js"></script> <script src="https://unpkg.com/m5stackjs/m5stack.js"></script> </head> <body> <script> var obniz = new M5Stack("XXXX-XXXX"); obniz.onconnect = async function () { await obniz.m5display.onWait(); var leds = obniz.wired("WS2812B", {din:21}); obniz.setupIMU(); leds.rgbs([[0,255,0]]); while(1) { let data = await obniz.accelerationWait(); obniz.m5display.clear(); obniz.m5display.print(data.y); } } </script> </body> </html>
-
-
obnizにおいて、WS2812BはSPIを使って実装していますが、
IMUはI2Cを使って実装しています1つのピンでI2CとSPIの併用ができないため、両方を同時に使おうとするとエラーになってしまいます。
M5Stack Grayの仕様を見ると、M5Stack GrayのGrove端子はI2Cのみで、SPIの対応はしていないようでした。
https://docs.m5stack.com/#/en/core/grayESPの機能としてはSPIが使えるため、WS2812Bを動かすことはできますが、M5Stack Grayとしてはサポートしていないようなので、同時に動かすことはできないのではないかと思います。
-
なるほど、そうなんですね。M5StickCではIMUとNeopix同時に動いていたのでStackでも動くのかなと思っていました。
-
回避方法みつかり、IMUとNeoPix同時利用できました。IMU I2CのPin21とNeoPix SPIのPin21の競合が原因との事でしたので、NeoPix SPIの方をPin21→Pin26に変更しました。Pin21以外でSPI使えるPinについてはM5Stackの中の人に教えてもらいました。その他も自力で試してみたら、NeoPix Pinとして26以外に23/19/18/2/5/17もIMUと同時利用できました。これで出来た事、理屈的に合っているでしょうか?
-
はい、Grove端子を使うのではなく、別の端子から動かす分には競合しないので、
そのやり方で動くのは理屈にあっています。なお、GPIO23,19,18はSDカードとかぶっているようですので、SDカードと同時に使う場合はお気をつけください。