ESP-12E 读取并解析 MPU6050(二)

本文介绍了如何使用NodeMcu V3 (ESP-12E)通过Arduino IDE读取和解析MPU6050的数据。首先,详细讲述了连接开发板、安装驱动和选择正确端口的步骤。接着,下载MPU6050库并进行烧录。在烧录后,利用串口监控器观察数据,并根据实际需求调整参数。目前应用了pitch和roll来处理场景,也可以进一步扩展利用cross值实现更多功能。
部署运行你感兴趣的模型镜像

NodeMcu V3 (ESP-12E)读取解析MPU6050

使用Arduino IDE 工具

1、使用数据线连接NodeMcu开发板

2、电脑安装驱动(如:CH340G / CP210x 根据所买开发板要求匹配,具体可问商家适应驱动),驱动安装成功后,在IDE中可选择端口 COM3 / COM5 ...... ,并且可以通过IDE获取开发板信息。其他因素:必须使用数据线,而非充电线!

3、开发板连接成功后,下载MPU6050库,如果有提示,则安装MPU6050所有库即可!

4、程序如下

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

const uint8_t scl = D6;
const uint8_t sda = D7;

Adafruit_MPU6050 mpu;

float i;//计算偏移量时的循环次数
float ax_offset = 0, ay_offset = 0; //x,y轴的加速度偏移量
float gx_offset = 0, gy_offset = 0; //x,y轴的角速度偏移量
float rad2deg = 57.29578;
float roll, pitch; //储存角度
float count =0;//计数

void setup(void) {
  Serial.begin(115200);
  Wire.begin(sda, scl);
  while (!Serial)
    delay(10);

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

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

  mpu.setAccelerometerRange(MPU6050_RANGE_8_G);
  Serial.print("Accelerometer range set to: ");
  switch (mpu.getAccelerometerRange()) {
  case MPU6050_RANGE_2_G:
    Serial.println("+-2G");
    break;
  case MPU6050_RANGE_4_G:
    Serial.println("+-4G");
    break;
  case MPU6050_RANGE_8_G:
    Serial.println("+-8G");
    break;
  case MPU6050_RANGE_16_G:
    Serial.println("+-16G");
    break;
  }
  mpu.setGyroRange(MPU6050_RANGE_500_DEG);
  Serial.print("Gyro range set to: ");
  switch (mpu.getGyroRange()) {
  case MPU6050_RANGE_250_DEG:
    Serial.println("+- 250 deg/s");
    break;
  case MPU6050_RANGE_500_DEG:
    Serial.println("+- 500 deg/s");
    break;
  case MPU6050_RANGE_1000_DEG:
    Serial.println("+- 1000 deg/s");
    break;
  case MPU6050_RANGE_2000_DEG:
    Serial.println("+- 2000 deg/s");
    break;
  }

  mpu.setFilterBandwidth(MPU6050_BAND_21_HZ);
  Serial.print("Filter bandwidth set to: ");
  switch (mpu.getFilterBandwidth()) {
  case MPU6050_BAND_260_HZ:
    Serial.println("260 Hz");
    break;
  case MPU6050_BAND_184_HZ:
    Serial.println("184 Hz");
    break;
  case MPU6050_BAND_94_HZ:
    Serial.println("94 Hz");
    break;
  case MPU6050_BAND_44_HZ:
    Serial.println("44 Hz");
    break;
  case MPU6050_BAND_21_HZ:
    Serial.println("21 Hz");
    break;
  case MPU6050_BAND_10_HZ:
    Serial.println("10 Hz");
    break;
  case MPU6050_BAND_5_HZ:
    Serial.println("5 Hz");
    break;
  }

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

void loop() {
  count++;
  sensors_event_t a, g, temp;
  mpu.getEvent(&a, &g, &temp);

  int pitch = (atan2(a.acceleration.x, sqrt(a.acceleration.y*a.acceleration.y + a.acceleration.z*a.acceleration.z))*180.0)/M_PI;
  int roll = (atan2(a.acceleration.y, a.acceleration.z)*180.0)/M_PI;
  int cross = (atan2(a.acceleration.z, a.acceleration.y)*180.0)/M_PI;
  Serial.print("俯仰x轴变 pitch: ");
  Serial.print(pitch);
  Serial.print(",横滚y轴变 roll: ");
  Serial.print(roll);
  Serial.print(",斜滚xy交叉轴变 cross: ");
  Serial.print(cross);
  Serial.print("  ");
  if(pitch<-5&&roll<2){
      Serial.println("前进");
  }else if( pitch>5&&roll>0){
      Serial.println("后退"); 
  }else if(pitch<5&&roll<-5){
      Serial.println("向左"); 
  }else if(pitch>-5&&roll>5){
      Serial.println("向右"); 
  }else{
      Serial.println("停止"); 
  }

  /* Print out the values */
  Serial.print("加速度 X: ");
  Serial.print(a.acceleration.x);
  Serial.print(", Y: ");
  Serial.print(a.acceleration.y);
  Serial.print(", Z: ");
  Serial.print(a.acceleration.z);
  Serial.println(" m/s^2");

  Serial.print("角速度 X: ");
  Serial.print(g.gyro.x);
  Serial.print(", Y: ");
  Serial.print(g.gyro.y);
  Serial.print(", Z: ");
  Serial.print(g.gyro.z);
  Serial.println(" rad/s");

  /*Serial.print("Temperature: ");
  Serial.print(temp.temperature);
  Serial.println(" degC");*/
  Serial.print("》》》》》第");
  Serial.print(count);
  Serial.println("次 结束《《《《《");
  delay(500);
}

5、烧录(也可以先验证)

 6、烧录后,可通过串口监控器查看

 7、可根据实测需求调整参数范围

if(pitch<-5&&roll<2){
      Serial.println("前进");
  }else if( pitch>5&&roll>0){
      Serial.println("后退"); 
  }else if(pitch<5&&roll<-5){
      Serial.println("向左"); 
  }else if(pitch>-5&&roll>5){
      Serial.println("向右"); 
  }else{
      Serial.println("停止"); 
  }

8、目前使用pitch 和 roll处理4个场景,也可以把 cross 值作为条件,延伸更多场景

 int pitch = (atan2(a.acceleration.x, sqrt(a.acceleration.y*a.acceleration.y + a.acceleration.z*a.acceleration.z))*180.0)/M_PI;
  int roll = (atan2(a.acceleration.y, a.acceleration.z)*180.0)/M_PI;
  int cross = (atan2(a.acceleration.z, a.acceleration.y)*180.0)/M_PI;

9、MPU6050原始数据 加速度、角速度、温度:

Serial.print("加速度 X: ");
  Serial.print(a.acceleration.x);
  Serial.print(", Y: ");
  Serial.print(a.acceleration.y);
  Serial.print(", Z: ");
  Serial.print(a.acceleration.z);
  Serial.println(" m/s^2");

  Serial.print("角速度 X: ");
  Serial.print(g.gyro.x);
  Serial.print(", Y: ");
  Serial.print(g.gyro.y);
  Serial.print(", Z: ");
  Serial.print(g.gyro.z);
  Serial.println(" rad/s");

  Serial.print("Temperature: ");
  Serial.print(temp.temperature);
  Serial.println(" degC");

您可能感兴趣的与本文相关的镜像

GPT-oss:20b

GPT-oss:20b

图文对话
Gpt-oss

GPT OSS 是OpenAI 推出的重量级开放模型,面向强推理、智能体任务以及多样化开发场景

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我也不清楚

有钱的捧个钱场,(~ ̄▽ ̄)~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值