第二节我们的任务是使用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