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>
    

    0_1567906096545_6042affa-1e6b-44a3-af87-df6ba03da29a-image.png




  • administrators

    @Google-Homer さん

    obnizにおいて、WS2812BはSPIを使って実装していますが、
    IMUはI2Cを使って実装しています

    1つのピンでI2CとSPIの併用ができないため、両方を同時に使おうとするとエラーになってしまいます。

    M5Stack Grayの仕様を見ると、M5Stack GrayのGrove端子はI2Cのみで、SPIの対応はしていないようでした。
    https://docs.m5stack.com/#/en/core/gray

    ESPの機能としては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と同時利用できました。これで出来た事、理屈的に合っているでしょうか?


  • administrators

    @Google-Homer さん

    はい、Grove端子を使うのではなく、別の端子から動かす分には競合しないので、
    そのやり方で動くのは理屈にあっています。

    なお、GPIO23,19,18はSDカードとかぶっているようですので、SDカードと同時に使う場合はお気をつけください。