ROS2进阶 -- 硬件篇第三章第二节 -- ESP32 DEVKIT_V1读取MPU6050姿态数据

第二节我们的任务是使用ESP32 DEVKIT_V1读取MPU6050姿态数据

参考资料:

零件说明:ROS2进阶 – 硬件篇第一章 – 使用ESP32,树莓派5,ROS2 从零组装一台差速控制的机器人
环境配置:ROS2进阶 – 硬件篇第二章 – 使用 ESP32 DEVKIT_V1 开发板基于 Arduino IDE 的环境搭建教程 windows / ubuntu 双系统安装
第五节:ESP32读取MPU6050姿态数据

1. 本节需要准备的东西

ESP32,MPU6050, Arduino IDE
在这里插入图片描述

本节所使用的代码为05-esp32_MPU6050_module

2. 电路图

先将esp32通过USB连接到电脑上,然后将MPU6050和ESP32按照下图连接
在这里插入图片描述

接线说明:
MPU6050 正极 +(红⾊) ESP32_Vin (3.3V)
MPU6050 负极 -(⿊⾊) ESP32_Gnd (0V)
数据引脚 SCL (绿⾊) ESP32_GPIO22 (Output)
数据引脚 SDA (⻩⾊) ESP32_GPIO21 (Input

实物连接如下:
在这里插入图片描述

3. 代码

mpu6050.h

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

Adafruit_MPU6050 mpu;

struct MPU6050_DATA
{
  // 摄氏度
  double Temperature = 0.0;

  // 沿三轴的线加速度 米每二次方秒 m/s^2
  double Roll = 0.0;
  double Pitch = 0.0;
  double Yaw = 0.0;

  // 沿三轴的线加速度 米每二次方秒 m/s^2
  double Acc_X = 0.0;
  double Acc_Y = 0.0;
  double Acc_Z = 0.0;

  // 三轴角速度 弧度每秒 rad/s
  double Angle_Velocity_R = 0.0;
  double Angle_Velocity_P = 0.0;
  double Angle_Velocity_Y = 0.0;

}mpu6050_data;

void Init_mpu6050()
{
  // Try to initialize!
  if (!mpu.begin()) {
    Serial.println("Failed to find MPU6050 chip");
    while (1) {
      delay(10);
    }
  }
  Serial.println("MPU6050 Found!");
  /***********************************************
    Available AccelerometerRange:
      MPU6050_RANGE_2_G
      MPU6050_RANGE_4_G
      MPU6050_RANGE_8_G
      MPU6050_RANGE_16_G
  
    API:
      getAccelerometerRange()
      setAccelerometerRange()
  ***********************************************/
  mpu.setAccelerometerRange(MPU6050_RANGE_8_G);

  /***********************************************
    Available GyroRange:
      MPU6050_RANGE_250_DEG
      MPU6050_RANGE_500_DEG
      MPU6050_RANGE_1000_DEG
      MPU6050_RANGE_2000_DEG
  
    API:
      getGyroRange()
      setGyroRange()
  ***********************************************/
  mpu.setGyroRange(MPU6050_RANGE_500_DEG);

  /***********************************************
    Available Bandwidth:
      MPU6050_BAND_5_HZ
      MPU6050_BAND_10_HZ
      MPU6050_BAND_21_HZ
      MPU6050_BAND_44_HZ
      MPU6050_BAND_94_HZ
      MPU6050_BAND_184_HZ
      MPU6050_BAND_260_HZ

    API:
      getFilterBandwidth()
      setFilterBandwidth()
  ***********************************************/
  mpu.setFilterBandwidth(MPU6050_BAND_21_HZ);
}


void ReadMPU6050()
{
  /* Get new sensor events with the readings */
  sensors_event_t a, g, temp;
  mpu.getEvent(&a, &g, &temp);

  mpu6050_data.Temperature = temp.temperature;
  
  mpu6050_data.Acc_X = a.acceleration.x;
  mpu6050_data.Acc_Y = a.acceleration.y;
  mpu6050_data.Acc_Z = a.acceleration.z;

  mpu6050_data.Angle_Velocity_R = g.gyro.x; 
  mpu6050_data.Angle_Velocity_P = g.gyro.y; 
  mpu6050_data.Angle_Velocity_Y = g.gyro.z; 
}

esp32_mpu6050_test.ino

可视化线加速度曲线和可视化角速度曲线序分别查看

#include "mpu6050.h"

void setup() {
  Serial.begin(115200);
  Init_mpu6050();
}

void loop() {

  ReadMPU6050();
  // 串口绘图仪 可视化线加速度曲线
  // Serial.print("Acc_x:");
  // Serial.print(mpu6050_data.Acc_X);
  // Serial.print(",");
  // Serial.print("Acc_Y:");
  // Serial.print(mpu6050_data.Acc_Y);
  // Serial.print(",");
  // Serial.print("Acc_Z:");
  // Serial.println(mpu6050_data.Acc_Z);

  // 串口绘图仪 可视化角速度曲线
  Serial.print("Angle_velocity_R:");
  Serial.println(mpu6050_data.Angle_Velocity_R);
  Serial.print(",");
  Serial.print("Angle_velocity_P:");
  Serial.print(mpu6050_data.Angle_Velocity_P);
  Serial.print(",");
  Serial.print("Angle_velocity_Y:");
  Serial.println(mpu6050_data.Angle_Velocity_Y);

  delay(50);

}

4. 运行代码

首先安装MPU6050的库
在这里插入图片描述
在这里插入图片描述

打开上面下载的代码
在这里插入图片描述
选择开发板和端口号
点击验证和上传按钮
代码中的这部分分别是线加速度和角速度,可以打开一个分别观察
在这里插入图片描述
在这里插入图片描述
点击右上角的串口监视器和串口绘图仪,移动MPU6050会出现变化
在这里插入图片描述

5. 视频调试过程如下

mpu6050

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值