Freenove ESP32-S3-WROOM CAMボードに6軸加速度・ジャイロセンサー「MPU-6050」を接続し、6軸加速度・ジャイロセンサーの入力プログラムを作成しました。

ESP32-S3と6軸加速度・ジャイロセンサーの接続

6軸加速度・ジャイロセンサーの信号を次のようにESP32-S3に接続します。

ESP32-S3と6軸加速度・ジャイロセンサーの接続の接続
6軸加速度・ジャイロセンサー ESP32-S3
GND GND
VCC 3.3
SCL 2
SDA 1

ESP32-S3に接続されている6軸加速度・ジャイロセンサーのI2 Cアドレスをスキャンするプログラム「esp32s3_i2c_scanner.ino」を実行すると、次にように、6軸加速度・ジャイロセンサー「MPU-6050」のI2Cアドレス「0x68」が表示されます。

15:55:27.186 -> I2C Scanner
15:55:27.186 ->      0  1  2  3  4  5  6  7  8  9  A  B  C  D  E  F
15:55:27.186 -> 00: xx xx xx xx xx xx xx xx -- -- -- -- -- -- -- --
15:55:27.186 -> 10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
15:55:27.186 -> 20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
15:55:27.186 -> 30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
15:55:27.186 -> 40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
15:55:27.188 -> 50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
15:55:27.188 -> 60: -- -- -- -- -- -- -- -- 68 -- -- -- -- -- -- --
15:55:27.188 -> 70: -- -- -- -- -- -- -- -- xx xx xx xx xx xx xx xx
15:55:27.188 -> 

ESP32-S3と6軸加速度・ジャイロセンサーの接続画像を次に示します。

6軸加速度・ジャイロセンサースケッチの作成

6軸加速度・ジャイロセンサーのスケッチ「esp32s3_MPU-6050.ino」を次に示します。Arduino公式のソースコード「MPU-6050 Accelerometer + Gyro」を参照し、シリアルプロッタに出力できるように変更しました。

esp32s3_MPU-6050.ino

// MPU-6050 Short Example Sketch
// By Arduino User JohnChi
// August 17, 2014
// Public Domain
#include <Wire.h>
const int MPU_addr = 0x68;  // I2C address of the MPU-6050
#define PIN_SDA 1
#define PIN_SCL 2

int16_t AcX, AcY, AcZ, Tmp, GyX, GyY, GyZ;
void setup() {
  //Wire.begin();
  Wire.begin(PIN_SDA, PIN_SCL);
  Wire.beginTransmission(MPU_addr);
  Wire.write(0x6B);  // PWR_MGMT_1 register
  Wire.write(0);     // set to zero (wakes up the MPU-6050)
  Wire.endTransmission(true);
  Serial.begin(115200);
}
void loop() {
  Wire.beginTransmission(MPU_addr);
  Wire.write(0x3B);  // starting with register 0x3B (ACCEL_XOUT_H)
  Wire.endTransmission(false);
  Wire.requestFrom(MPU_addr, 14, true);  // request a total of 14 registers
  AcX = Wire.read() << 8 | Wire.read();  // 0x3B (ACCEL_XOUT_H) & 0x3C (ACCEL_XOUT_L)
  AcY = Wire.read() << 8 | Wire.read();  // 0x3D (ACCEL_YOUT_H) & 0x3E (ACCEL_YOUT_L)
  AcZ = Wire.read() << 8 | Wire.read();  // 0x3F (ACCEL_ZOUT_H) & 0x40 (ACCEL_ZOUT_L)
  Tmp = Wire.read() << 8 | Wire.read();  // 0x41 (TEMP_OUT_H) & 0x42 (TEMP_OUT_L)
  GyX = Wire.read() << 8 | Wire.read();  // 0x43 (GYRO_XOUT_H) & 0x44 (GYRO_XOUT_L)
  GyY = Wire.read() << 8 | Wire.read();  // 0x45 (GYRO_YOUT_H) & 0x46 (GYRO_YOUT_L)
  GyZ = Wire.read() << 8 | Wire.read();  // 0x47 (GYRO_ZOUT_H) & 0x48 (GYRO_ZOUT_L)

/*  Serial.print("AcX = ");
  Serial.print(AcX);
  Serial.print(" | AcY = ");
  Serial.print(AcY);
  Serial.print(" | AcZ = ");
  Serial.print(AcZ);
  Serial.print(" | Tmp = ");
  Serial.print(Tmp / 340.00 + 36.53);  //equation for temperature in degrees C from datasheet
  Serial.print(" | GyX = ");
  Serial.print(GyX);
  Serial.print(" | GyY = ");
  Serial.print(GyY);
  Serial.print(" | GyZ = ");
  Serial.println(GyZ);
*/

  //Serial.printf("AcX:%d, AcY:%d, AcZ:%d\n",  // 加速度
  //              AcX, AcY, AcZ);

  Serial.printf("GyX:%d, GyY:%d, GyZ:%d\n",  // ジャイロ
                GyX, GyY, GyZ);

  delay(333);
}

次のエラーが発生しました。このエラーの原因は、I2 CのSDA/SCLのGPIO番号が違っているために発生しました。13行目のWire.beginメソッドのパラメータで、GPIO番号を指定しました。

E (56) i2c.master: s_i2c_synchronous_transaction(945): I2C transaction failed
E (63) i2c.master: i2c_master_transmit_receive(1248): I2C transaction failed
E (70) i2c.master: I2C transaction unexpected nack detected
E (75) i2c.master: s_i2c_synchronous_transaction(945): I2C transaction failed
E (82) i2c.master: i2c_master_transmit_receive(1248): I2C transaction failed
E (89) i2c.master: I2C transaction unexpected nack detected
E (94) i2c.master: s_i2c_synchronous_transaction(945): I2C transaction failed
E (101) i2c.master: i2c_master_transmit_receive(1248): I2C transaction failed
E (108) i2c.master: I2C transaction unexpected nack detected
E (113) i2c.master: s_i2c_synchronous_transaction(945): I2C transaction failed
E (120) i2c.master: i2c_master_multi_buffer_transmit(1214): I2C transaction failed
Testing MPU6050 connection…

6軸加速度・ジャイロセンサースケッチの実行

作成した6軸加速度・ジャイロセンサーのスケッチ「esp32s3_MPU-6050.ino」を実行します。加速度センサーのシリアル出力を次に示します。

加速度センサーのプロッタ出力を次に示します。

ジャイロセンサーのシリアル出力を次に示します。

ジャイロセンサーのプロッタ出力を次に示します。