ESP32-S3 控制 MPU6050模块

ESP32-S3 MPU6050模块实验 —— XYZ运动检测

本实验通过 ESP32-S3 与 MPU6050模块 实现对加速度与陀螺仪数据的检测,并在串口监视器输出 XYZ 值。


一、实验名称

MPU6050模块实验


二、接线说明

MPU6050模块 ESP32-S3 引脚
VCC 3V3
GND GND
SCL 21
SDA 47

三、实验现象

  • 程序下载成功后,当 MPU6050 模块检测到运动时,串口监视器输出对应的加速度 (AccelX/Y/Z) 和角速度 (GyroX/Y/Z) 值。

四、注意事项

  • 需要导入以下库:

    • Adafruit_BusIO-1.14.5.zip
    • Adafruit_GFX_Library-1.11.9.zip
    • Adafruit_MPU6050-2.2.6.zip
  • 可参考压缩包解压后的 examples 使用方法。


五、完整代码示例

#include <Adafruit_MPU6050.h>
#include <Adafruit_Sensor.h>
#include <Wire.h>

Adafruit_MPU6050 mpu;

#define SCL 21
#define SDA 47

void setup() {
  Serial.begin(115200);
  while (!Serial)
    delay(10); // 等待串口打开

  Serial.println("Adafruit MPU6050 test!");

  Wire.begin(SDA, SCL);  

  // 初始化 MPU6050
  if (!mpu.begin()) {
    Serial.println("Failed to find MPU6050 chip");
    while (1) delay(10);
  }
  Serial.println("MPU6050 Found!");

  // 设置运动检测参数
  mpu.setHighPassFilter(MPU6050_HIGHPASS_0_63_HZ);
  mpu.setMotionDetectionThreshold(1);
  mpu.setMotionDetectionDuration(20);
  mpu.setInterruptPinLatch(true);  
  mpu.setInterruptPinPolarity(true);
  mpu.setMotionInterrupt(true);

  Serial.println("");
  delay(100);
}

void loop() {
  // 检测到运动中断
  if (mpu.getMotionInterruptStatus()) {
    sensors_event_t a, g, temp;
    mpu.getEvent(&a, &g, &temp);

    // 输出加速度和角速度数据
    Serial.print("AccelX:");
    Serial.print(a.acceleration.x);
    Serial.print(",");
    Serial.print("AccelY:");
    Serial.print(a.acceleration.y);
    Serial.print(",");
    Serial.print("AccelZ:");
    Serial.print(a.acceleration.z);
    Serial.print(", GyroX:");
    Serial.print(g.gyro.x);
    Serial.print(",");
    Serial.print("GyroY:");
    Serial.print(g.gyro.y);
    Serial.print(",");
    Serial.print("GyroZ:");
    Serial.print(g.gyro.z);
    Serial.println("");
  }

  delay(10);
}
posted @ 2025-08-16 16:09  jeikerxiao  阅读(166)  评论(0)    收藏  举报