2020/10/11
ESPr-oneにMM8451を2個つないで測定できました。
(設定できるI2Cアドレスが2つなので2個です。)
I2Cアドレス設定
初期設定は0x1D、A端子をGND接続すると0x1Cになります。

センサはAdafruit MMA8451 Accelerometer Breakoutです。
3.3Vレギュレータ,レベル変換付き
(説明では「3Vまたは5Vの電源とロジックで使用しても
完全に安全です。」というようなことが書いてありました。
3.3Vは試していません。)
センサは電源&ロジック5Vで接続するのでレベル変換を
入れてます。(中央奥 AE-PCA9306 M-05452 ¥150
秋月電子)

プルアップ抵抗(1kΩ)有効(ジャンパーカット忘れ)
センサはLANケーブルで接続していますが、
直接つないでも良いです。

(2m程度の延長を想定してLANケーブル接続してます。)
スケッチ例MMA8451demoを改変して動作テストしてみた。

Adafruit_MMA8451 mma = Adafruit_MMA8451();を
修正して次の2行にする。
if (! mma.begin()) { を次のように修正追加して
I2Cアドレスを指定
mma.setRange(MMA8451_RANGE_2_G);を次のように修正追加して
次の行も修正しておかないとエラーになるので
修正前
修正後
void loop() { の中は
mmaはmma1もしくはmma2へ修正しないとエラーになります。
2個センサの加速度だけ表示するスケッチ抜粋

シリアルモニタの表示はこちら

ESPr-One(ESP-WROOM-02)での記事ですが、Arduinoでも
使えると思います。
興味がある方はお試し下さい。
無保証自己責任でよろしくお願いします。
0
(設定できるI2Cアドレスが2つなので2個です。)
I2Cアドレス設定
初期設定は0x1D、A端子をGND接続すると0x1Cになります。

センサはAdafruit MMA8451 Accelerometer Breakoutです。
3.3Vレギュレータ,レベル変換付き
(説明では「3Vまたは5Vの電源とロジックで使用しても
完全に安全です。」というようなことが書いてありました。
3.3Vは試していません。)
センサは電源&ロジック5Vで接続するのでレベル変換を
入れてます。(中央奥 AE-PCA9306 M-05452 ¥150
秋月電子)

プルアップ抵抗(1kΩ)有効(ジャンパーカット忘れ)
センサはLANケーブルで接続していますが、
直接つないでも良いです。

(2m程度の延長を想定してLANケーブル接続してます。)
スケッチ例MMA8451demoを改変して動作テストしてみた。

Adafruit_MMA8451 mma = Adafruit_MMA8451();を
修正して次の2行にする。
Adafruit_MMA8451 mma1 = Adafruit_MMA8451();
Adafruit_MMA8451 mma2 = Adafruit_MMA8451();
if (! mma.begin()) { を次のように修正追加して
I2Cアドレスを指定
if (! mma1.begin(0x1D)||! mma2.begin(0x1C)) {
mma.setRange(MMA8451_RANGE_2_G);を次のように修正追加して
mma1.setRange(MMA8451_RANGE_2_G);
mma2.setRange(MMA8451_RANGE_2_G);
次の行も修正しておかないとエラーになるので
修正前
Serial.print("Range = "); Serial.print(2 << mma.getRange()); Serial.println("G");
修正後
Serial.print("MMA1 Range = "); Serial.print(2 << mma1.getRange()); Serial.println("G");
Serial.print("MMA2 Range = "); Serial.print(2 << mma2.getRange()); Serial.println("G");
void loop() { の中は
mmaはmma1もしくはmma2へ修正しないとエラーになります。
2個センサの加速度だけ表示するスケッチ抜粋
// Get a new sensor event 新しいセンサーイベントを取得する
sensors_event_t event;
mma1.getEvent(&event);
/* Display the results (acceleration is measured in m/s^2)
結果を表示します(加速度はm/s^2で測定されます)*/
Serial.print("X1: \t"); Serial.print(event.acceleration.x); Serial.print("\t");
Serial.print("Y1: \t"); Serial.print(event.acceleration.y); Serial.print("\t");
Serial.print("Z1: \t"); Serial.print(event.acceleration.z); Serial.print("\t");
Serial.println("m/s^2 ");
mma2.getEvent(&event);
/* Display the results (acceleration is measured in m/s^2)
結果を表示します(加速度はm/s^2で測定されます)*/
Serial.print("X2: \t"); Serial.print(event.acceleration.x); Serial.print("\t");
Serial.print("Y2: \t"); Serial.print(event.acceleration.y); Serial.print("\t");
Serial.print("Z2: \t"); Serial.print(event.acceleration.z); Serial.print("\t");
Serial.println("m/s^2 ");
Serial.println();
delay(1000);

シリアルモニタの表示はこちら

ESPr-One(ESP-WROOM-02)での記事ですが、Arduinoでも
使えると思います。
興味がある方はお試し下さい。
無保証自己責任でよろしくお願いします。

投稿者:管理人