ESP8266-Arduino编程实例-MPU6500加速计陀螺仪驱动

MPU6500加速计陀螺仪驱动

1、MPU6500介绍

MPU-6500 是一款 6 轴运动跟踪设备,将 3 轴陀螺仪、3 轴加速度计和数字运动处理器™ (DMP) 组合在一个 3x3x0.9 毫米的小型封装中。它还具有一个 4096 字节的 FIFO,可以降低串行总线接口上的流量,并通过允许系统处理器突发读取传感器数据然后进入低功耗模式来降低功耗。凭借其专用的 I2C 传感器总线,MPU-6500 直接接受来自外部 I2C 设备的输入。 MPU-6500 凭借其 6 轴集成、片上 DMP 和运行时校准固件,使制造商能够消除成本高昂且复杂的分立器件选择、鉴定和系统级集成,从而确保为消费者提供最佳运动性能。 MPU-6500 还设计用于在其辅助 I2C 端口上连接多个非惯性数字传感器,例如压力传感器。

在这里插入图片描述

MPU6500具有如下特性:

  • 工作电压:3-5v
  • 通讯协议:I2C/SPI
  • 陀螺仪范围:± 250 500 1000 2000°/s
  • 加速度范围:±2±4±8±16g

2、硬件准备

  • ESP8266 NodeMCU开发板一块
  • GY-21P传感器模块一个
  • 面板板一个
  • 杜邦线若干
  • 数据线一条

硬件接线如下:

在这里插入图片描述

3、软件准备

  • Arduino IDE或VSCode + PlatformIO

在前面的文章中,对如何搭建ESP8266开发环境做了详细的介绍,请参考:

ESP8266 NodeMCU的引脚介绍在前面的文章中做了详细的介绍,请参考:

4、代码实现

本次实例使用的驱动库如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
#include "FastIMU.h"
#include <Wire.h>

#define IMU\_ADDRESS 0x68 //Change to the address of the IMU
MPU6050 IMU; //Change to the name of any supported IMU!

// Currently supported IMUS: MPU9255 MPU9250 MPU6886 MPU6500 MPU6050 ICM20689 ICM20690 BMI055 BMX055 BMI160 LSM6DS3 LSM6DSL

calData calib = { 0 }; //Calibration data
AccelData accelData; //Sensor data
GyroData gyroData;
MagData magData;

void setup() {
Wire.begin();
Wire.setClock(100000); //400khz clock
Serial.begin(115200);
while (!Serial) {
;
}

int err = IMU.init(calib, IMU_ADDRESS);
if (err != 0) {
Serial.print("Error initializing IMU: ");
Serial.println(err);
while (true) {
;
}
}


//err = IMU.setGyroRange(500); //USE THESE TO SET THE RANGE, IF AN INVALID RANGE IS SET IT WILL RETURN -1
//err = IMU.setAccelRange(2); //THESE TWO SET THE GYRO RANGE TO ±500 DPS AND THE ACCELEROMETER RANGE TO ±2g

if (err != 0) {
Serial.print("Error Setting range: ");
Serial.println(err);
while (true) {
;
}
}
}

void loop() {
IMU.update();
IMU.getAccel(&accelData);
Serial.print(accelData.accelX);
Serial.print("\t");
Serial.print(accelData.accelY);
Serial.print("\t");
Serial.print(accelData.accelZ);
Serial.print("\t");
IMU.getGyro(&gyroData);
Serial.print(gyroData.gyroX);
Serial.print("\t");
Serial.print(gyroData.gyroY);
Serial.print("\t");
Serial.print(gyroData.gyroZ);
if (IMU.hasMagnetometer()) {
IMU.getMag(&magData);
Serial.print("\t");
Serial.print(magData.magX);
Serial.print("\t");
Serial.print(magData.magY);
Serial.print("\t");
Serial.print(magData.magZ);
}
if (IMU.hasTemperature()) {
Serial.print("\t");
Serial.println(IMU.getTemp());
}
delay(50);
}

文章来源: https://iotsmart.blog.csdn.net/article/details/126517482