ATOM Lite、Matrix、Echo I2C検証

概要

ATOMシリーズでのI2C利用を確認してみました。とくにEchoではピンでのI2Cができないと記述されていたので検証してみました。

結果

ちょっと前にブログで使ったI2C接続の画面があったので、接続してみました。ちょうどピンの配置的にそのままさせました!

EchoのGPIO25、21でもI2Cは使えますね。ただし販売ページには使えないと書いてあるので、使わないほうが無難だと思います。

スピーカーとかマイクが搭載されている別基板がEchoには内蔵されていて、そこに21と25も引き回されているんですよね。なので普通のGPIOよりノイズなどの影響を受けやすいのかもしれません。

接続方法(ピン側)

ATOMI2C
GNDGND
3V3 or 5VVCC
GPIO25SDA
GPIO21SCL

一例になります。一般的には3V3で接続するほうが正しいです。テストで使った画面は5Vでないと動かないものなので5Vを接続しています。

Echoの場合には動くかもしれませんが、非推奨です。Matrixの場合にはIMU(MPU6886)が0x68のアドレスですでに接続されているので注意してください。

#include <Wire.h>

void setup()
{
  Serial.begin(115200);
  Wire.begin(25, 21);
}

void loop()
{
  Serial.println("I2C Scan");
  for (int address = 1; address < 127; address++) {
    Wire.beginTransmission(address);
    int error = Wire.endTransmission();
    if (error == 0) {
      Serial.printf("%02X", address);
    } else {
      Serial.print(" .");
    }

    if (address % 16 == 0) {
      Serial.print("\n");
    }

    delay(10);
  }

  Serial.print("\n\n");
  delay(1000);
}

I2Cアドレスをスキャンするスケッチ例です。ピン側は2系統あるI2Cの1系統目のWireクラスを使ってアクセスするのがよいと思います。

接続方法(GROVE側)

ATOMI2C
GNDGND
5VVCC
GPIO26SDA
GPIO32SCL

GROVE側はVCCが5V固定なので注意しましょう。接続先によっては3.3Vでないといけない場合があります。

#include <Wire.h>

void setup()
{
  Serial.begin(115200);
  Wire1.begin(26, 32);
}

void loop()
{
  Serial.println("I2C Scan");
  for (int address = 1; address < 127; address++) {
    Wire1.beginTransmission(address);
    int error = Wire1.endTransmission();
    if (error == 0) {
      Serial.printf("%02X", address);
    } else {
      Serial.print(" .");
    }

    if (address % 16 == 0) {
      Serial.print("\n");
    }

    delay(10);
  }

  Serial.print("\n\n");
  delay(1000);
}

GROVE側でI2Cを使う場合には2系統目のWire1クラスを使うのがよいと思います。

複数使えるの?

2系統までであればWireとWire1で違うピンを割り当てれば同時に使えます。ATOM MatrixがすでにGPIO25、21をWireで使っているので、Wire1を他のピンに割り振ることになります。

2系統目のI2CはGrove側だけでなく、ピン側の22、19、23、33などにも割り振ることが可能です。

3系統以上は同時には利用できませんが、begin()関数で初期化からやり直せば他のピンに割り振ることが可能です。

まとめ

ATOM EchoでI2Cがなぜ非推奨なのかはわかりませんが、公式ではGROVE側を使ってくれと案内しています。

どこかで機種別のクイックリファレンスを1ページでまとめたいと思います。。。

コメント