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」を実行します。加速度センサーのシリアル出力を次に示します。
加速度センサーのプロッタ出力を次に示します。
ジャイロセンサーのシリアル出力を次に示します。
ジャイロセンサーのプロッタ出力を次に示します。