Freenove ESP32-S3-WROOM CAMボードに6軸加速度・ジャイロセンサー「MPU-6050」を接続し、6軸加速度・ジャイロセンサーの入力プログラムを作成しました。
ESP32-S3と6軸加速度・ジャイロセンサーの接続
6軸加速度・ジャイロセンサーの信号を次のようにESP32-S3に接続します。
| 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」を実行します。加速度センサーのシリアル出力を次に示します。
加速度センサーのプロッタ出力を次に示します。
ジャイロセンサーのシリアル出力を次に示します。
ジャイロセンサーのプロッタ出力を次に示します。




