In this guide you’ll learn how to use the MPU-6050 accelerometer and gyroscope module with the ESP32. The MPU-6050 IMU (Inertial Measurement Unit) is a 3-axis accelerometer and 3-axis gyroscope sensor. The accelerometer measures the gravitational acceleration and the gyroscope measures the rotational velocity. Additionally, this module also measures temperature. This sensor is ideal to determine the orientation of a moving object.
We have a similar guide for the ESP8266: ESP8266 NodeMCU with MPU-6050 Accelerometer, Gyroscope and Temperature Sensor (Arduino)
In this guide we’ll cover two examples:
- Get gyroscope, acceleration and temperature readings (Serial Monitor)
- Display gyroscope and acceleration readings on OLED display
Introducing the MPU-6050 Gyroscope Accelerometer Sensor
The MPU-6050 is a module with a 3-axis accelerometer and a 3-axis gyroscope.
The gyroscope measures rotational velocity (rad/s), this is the change of the angular position over time along the X, Y and Z axis (roll, pitch and yaw). This allows us to determine the orientation of an object.
The accelerometer measures acceleration (rate of change of the object’s velocity). It senses static forces like gravity (9.8m/s2) or dynamic forces like vibrations or movement. The MPU-6050 measures acceleration over the X, Y an Z axis. Ideally, in a static object the acceleration over the Z axis is equal to the gravitational force, and it should be zero on the X and Y axis.
Using the values from the accelerometer, it is possible to calculate the roll and pitch angles using trigonometry. However, it is not possible to calculate the yaw.
We can combine the information from both sensors to get more accurate information about the sensor orientation.
MPU-6050 Pinout
Here’s the pinout for the MPU-6050 sensor module.
VCC | Power the sensor (3.3V or 5V) |
GND | Common GND |
SCL | SCL pin for I2C communication (GPIO 22) |
SDA | SDA pin for I2C communication (GPIO 21) |
XDA | Used to interface other I2C sensors with the MPU-6050 |
XCL | Used to interface other I2C sensors with the MPU-6050 |
AD0 | Use this pin to change the I2C address |
INT | Interrupt pin – can be used to indicate that new measurement data is available |
Preparing Arduino IDE
We’ll program the ESP32 board using Arduino IDE. So, make sure you have the ESP32 add-on installed. Follow the next tutorial:
If you prefer using VS Code + PlatformIO IDE, follow the next guide:
Installing Libraries
There are different ways to get readings from the sensor. In this tutorial, we’ll use the Adafruit MPU6050 library. To use this library you also need to install the Adafruit Unified Sensor library and the Adafruit Bus IO Library.
Open your Arduino IDE and go to Sketch > Include Library > Manage Libraries. The Library Manager should open.
Type “adafruit mpu6050” on the search box and install the library.
Then, search for “Adafruit Unified Sensor”. Scroll all the way down to find the library and install it.
Finally, search for “Adafruit Bus IO” and install it.
After installing the libraries, restart your Arduino IDE.
If you’re using VS Code with PaltformIO, copy the following lines to the platformio.ini file.
lib_deps = adafruit/Adafruit MPU6050 @ ^2.0.3
adafruit/Adafruit Unified Sensor @ ^1.1.4
Getting MPU-6050 Sensor Readings: Accelerometer, Gyroscope and Temperature
In this section you’ll learn how to get sensor readings from the MPU-6050 sensor: acceleration (x, y, z), angular velocity (x, y, z) and temperature.
Parts Required
For this example you need the following parts:
You can use the preceding links or go directly to MakerAdvisor.com/tools to find all the parts for your projects at the best price!
Schematic Diagram – ESP32 with MPU-6050
Wire the ESP32 to the MPU-6050 sensor as shown in the following schematic diagram: connect the SCL pin to GPIO 22 and the SDA pin to GPIO 21.
Code – Getting MPU-6050 Sensor Readings: Accelerometer, Gyroscope and Temperature
The Adafruit library provides several examples for this sensor. In this section, we’ll take a look at the basic example that prints the sensor readings in the Serial Monitor.
Go to File > Examples > Adafruit MPU6050 > basic_readings. The following code should load.
It gets the angular velocity (gyroscope) on the x, y and z axis, the acceleration on the x, y and z axis and the temperature.
// Basic demo for accelerometer readings from Adafruit MPU6050
// ESP32 Guide: https://RandomNerdTutorials.com/esp32-mpu-6050-accelerometer-gyroscope-arduino/
// ESP8266 Guide: https://RandomNerdTutorials.com/esp8266-nodemcu-mpu-6050-accelerometer-gyroscope-arduino/
// Arduino Guide: https://RandomNerdTutorials.com/arduino-mpu-6050-accelerometer-gyroscope/
#include <Adafruit_MPU6050.h>
#include <Adafruit_Sensor.h>
#include <Wire.h>
Adafruit_MPU6050 mpu;
void setup(void) {
Serial.begin(115200);
while (!Serial)
delay(10); // will pause Zero, Leonardo, etc until serial console opens
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_5_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() {
/* Get new sensor events with the readings */
sensors_event_t a, g, temp;
mpu.getEvent(&a, &g, &temp);
/* Print out the values */
Serial.print("Acceleration 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("Rotation 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.println("");
delay(500);
}
How the Code Works
Start by including the required libraries for the MPU-6050 sensor: Adafruit_MPU6050 and Adafruit_Sensor.
#include <Adafruit_MPU6050.h>
#include <Adafruit_Sensor.h>
Create an Adafruit_MPU6050 object called mpu to handle the sensor.
Adafruit_MPU6050 mpu;
setup()
In the setup(), initialize the serial monitor at a baud rate of 115200.
Serial.begin(115200);
Initialize the MPU-6050 sensor.
if (!mpu.begin()) {
Serial.println("Sensor init failed");
while (1)
yield();
}
Set the accelerometer measurement range:
mpu.setAccelerometerRange(MPU6050_RANGE_8_G);
Set the gyroscope measurement range:
mpu.setGyroRange(MPU6050_RANGE_500_DEG);
Set the filter bandwidth:
mpu.setFilterBandwidth(MPU6050_BAND_5_HZ);
loop()
In the loop() we’ll get sensor readings and display them in the Serial Monitor.
First, you need to get new sensor events with the current readings.
sensors_event_t a, g, temp;
mpu.getEvent(&a, &g, &temp);
Finally, print the readings. For the acceleration:
- a.acceleration.x: gets acceleration on the x axis;
- a.acceleration.y: gets acceleration on the y axis;
- a.acceleration.z: gets acceleration on the z axis.
The acceleration is measured in meters per second square (m/s2)
Serial.print("Acceleration 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");
To get gyroscope readings:
- g.gyro.x: gets angular velocity on the x axis;
- g.gyro.y: gets angular velocity on the y axis;
- g.gyro.z: gets angular velocity on the z axis.
The angular velocity is measured in radians per seconds (rad/s).
Serial.print("Rotation 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");
Finally, print the temperature – it is measured in Celsius degrees. To access the temperature reading use temp.temperature.
Serial.print("Temperature: ");
Serial.print(temp.temperature);
Serial.println(" degC");
New sensor readings are displayed every 500 milliseconds.
delay(500);
Demonstration
Upload the code to your ESP32 board. Go to Tools > Board and select the ESP32 board you’re using. Go to Tools > Port and select the port your board is connected to. Then, click the Upload button.
Open the Serial Monitor at a baud rate of 115200, press the on-board RST button. The sensor measurements will be displayed.
Move the sensor orientation and see the values changing accordingly.
Sensor Calibration
Ideally, when the sensor is static, the gyroscope values should be zero on all axis, which doesn’t happen in our case. When the sensor is static, these are the gyroscope values we get:
- x: 0.06 rad/s
- y: -0.02 rad/s
- z: 0.00 rad/s
On practical applications, you need to take the error into account and correct the values in the code to get more accurate readings.
The same happens for the acceleration values. The acceleration on the z axis should be closer to the gravitational force (9,8 m/s2) and it should be closer to zero on the x and y axis. In our case, these are the approximate values we get when the sensor is static:
- x: 0.71 m/s2
- y: 0.28 m/s2
- z: 9.43 m/s2
Display MPU-6050 Readings on OLED Display
The Adafruit MPU6050 library provides an example that dipslays the MPU-6050 gyroscope and accelerometer readings on an OLED display.
Parts Required
Here’s a list with the parts required to complete this example:
- MPU-6050 Accelerometer Gyroscope
- ESP32 (read Best ESP32 development boards)
- 0.96 inch I2C OLED Display SSD1306
- Breadboard
- Jumper wires
You can use the preceding links or go directly to MakerAdvisor.com/tools to find all the parts for your projects at the best price!
Schematic Diagram – ESP32 with MPU-6050 and OLED Display
Wire all the parts as shown in the following schematic diagram. Because the OLED display and the MPU-6050 sensors use different I2C addresses, we can connect them to the same I2C bus (same pins on the ESP32).
Learn more about using the OLED display with the ESP32: ESP32 OLED Display with Arduino IDE
Code – Display MPU-6050 Sensor Readings on OLED Display
To use this example, make sure you have the Adafruit SSD1306 library installed. This library can be installed through the Arduino Library Manager.
Go to Sketch > Library > Manage Libraries and search for “SSD1306” and install the SSD1306 library from Adafruit.
For this example, copy the following code or go to File > Examples > Adafruit MPU6050 > MPU6050_oled.
// Basic OLED demo for accelerometer readings from Adafruit MPU6050
// ESP32 Guide: https://RandomNerdTutorials.com/esp32-mpu-6050-accelerometer-gyroscope-arduino/
// ESP8266 Guide: https://RandomNerdTutorials.com/esp8266-nodemcu-mpu-6050-accelerometer-gyroscope-arduino/
// Arduino Guide: https://RandomNerdTutorials.com/arduino-mpu-6050-accelerometer-gyroscope/
#include <Adafruit_MPU6050.h>
#include <Adafruit_SSD1306.h>
#include <Adafruit_Sensor.h>
Adafruit_MPU6050 mpu;
Adafruit_SSD1306 display = Adafruit_SSD1306(128, 64, &Wire);
void setup() {
Serial.begin(115200);
// while (!Serial);
Serial.println("MPU6050 OLED demo");
if (!mpu.begin()) {
Serial.println("Sensor init failed");
while (1)
yield();
}
Serial.println("Found a MPU-6050 sensor");
// SSD1306_SWITCHCAPVCC = generate display voltage from 3.3V internally
if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { // Address 0x3C for 128x64
Serial.println(F("SSD1306 allocation failed"));
for (;;)
; // Don't proceed, loop forever
}
display.display();
delay(500); // Pause for 2 seconds
display.setTextSize(1);
display.setTextColor(WHITE);
display.setRotation(0);
}
void loop() {
sensors_event_t a, g, temp;
mpu.getEvent(&a, &g, &temp);
display.clearDisplay();
display.setCursor(0, 0);
Serial.print("Accelerometer ");
Serial.print("X: ");
Serial.print(a.acceleration.x, 1);
Serial.print(" m/s^2, ");
Serial.print("Y: ");
Serial.print(a.acceleration.y, 1);
Serial.print(" m/s^2, ");
Serial.print("Z: ");
Serial.print(a.acceleration.z, 1);
Serial.println(" m/s^2");
display.println("Accelerometer - m/s^2");
display.print(a.acceleration.x, 1);
display.print(", ");
display.print(a.acceleration.y, 1);
display.print(", ");
display.print(a.acceleration.z, 1);
display.println("");
Serial.print("Gyroscope ");
Serial.print("X: ");
Serial.print(g.gyro.x, 1);
Serial.print(" rps, ");
Serial.print("Y: ");
Serial.print(g.gyro.y, 1);
Serial.print(" rps, ");
Serial.print("Z: ");
Serial.print(g.gyro.z, 1);
Serial.println(" rps");
display.println("Gyroscope - rps");
display.print(g.gyro.x, 1);
display.print(", ");
display.print(g.gyro.y, 1);
display.print(", ");
display.print(g.gyro.z, 1);
display.println("");
display.display();
delay(100);
}
How the Code Works
Start by including the required libraries for the MPU-6050 sensor and for the OLED display.
#include <Adafruit_MPU6050.h>
#include <Adafruit_SSD1306.h>
#include <Adafruit_Sensor.h>
Create an Adafruit_MPU6050 object called mpu to handle the sensor.
Adafruit_MPU6050 mpu;
Create an Adafruit_SSD1306 object called display to handle the OLED display. This is for a display with 128×64 pixels.
Adafruit_SSD1306 display = Adafruit_SSD1306(128, 64, &Wire);
setup()
In the setup(), initialize the serial monitor at a baud rate of 115200.
Serial.begin(115200);
Initialize the MPU-6050 sensor.
if (!mpu.begin()) {
Serial.println("Sensor init failed");
while (1)
yield();
}
Initialize the OLED display.
// SSD1306_SWITCHCAPVCC = generate display voltage from 3.3V internally
if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { // Address 0x3C for 128x64
Serial.println(F("SSD1306 allocation failed"));
for (;;)
; // Don't proceed, loop forever
}
display.display();
Set the font size and color for the display.
display.setTextSize(1);
display.setTextColor(WHITE);
display.setRotation(0);
loop()
In the loop() is where we’ll get the sensor readings and display them on the OLED.
Start by creating events for each measurement, accelerometer, gyroscope and temperature.
sensors_event_t a, g, temp;
Get new sensor readings.
mpu.getEvent(&a, &g, &temp);
Clear the display in each loop() to write new readings.
display.clearDisplay();
Set the display cursor to (0,0) – the upper left corner. It will start writing text from that location.
display.setCursor(0, 0);
The following lines print the accelerometer readings in the Serial Monitor.
Serial.print("Accelerometer ");
Serial.print("X: ");
Serial.print(a.acceleration.x, 1);
Serial.print(" m/s^2, ");
Serial.print("Y: ");
Serial.print(a.acceleration.y, 1);
Serial.print(" m/s^2, ");
Serial.print("Z: ");
Serial.print(a.acceleration.z, 1);
Serial.println(" m/s^2");
The following lines display the acceleration x, y an z values on the OLED display.
display.println("Accelerometer - m/s^2");
display.print(a.acceleration.x, 1);
display.print(", ");
display.print(a.acceleration.y, 1);
display.print(", ");
display.print(a.acceleration.z, 1);
display.println("");
Display the gyroscope readings on the Serial Monitor.
Serial.print("Gyroscope ");
Serial.print("X: ");
Serial.print(g.gyro.x, 1);
Serial.print(" rps, ");
Serial.print("Y: ");
Serial.print(g.gyro.y, 1);
Serial.print(" rps, ");
Serial.print("Z: ");
Serial.print(g.gyro.z, 1);
Serial.println(" rps");
Finally, print the gyroscope readings on the display.
display.println("Gyroscope - rps");
display.print(g.gyro.x, 1);
display.print(", ");
display.print(g.gyro.y, 1);
display.print(", ");
display.print(g.gyro.z, 1);
display.println("");
Lastly, call display.display() to actually show the readings on the OLED.
display.display();
New readings are displayed every 100 milliseconds.
delay(100);
Demonstration
Upload the code to your ESP32 board. Go to Tools > Board and select the ESP32 board you’re using. Go to Tools > Port and select the port your board is connected to. Then, click the upload button.
Open the Serial Monitor at a baud rate of 115200, press the on-board RST button. The sensor measurements will be displayed both on the Serial Monitor and on the OLED display.
Move the sensor and see the values changing.
You can watch the video demonstration:
Wrapping Up
The MPU-6050 is an accelerometer and gyroscope. It measures acceleration on the x, y and z axis as well as angular velocity. This module also measures temperature.
This sensor modules communicates via I2C communication protocol. So, the wiring is very simple. Just connect the sensor to the ESP32 default I2C pins.
In this tutorial you’ve learned how to wire the sensor and get sensor readings. We hope you’ve found this getting started guide useful. We have guides for other popular sensors:
- ESP32 with DHT11/DHT22 Temperature and Humidity Sensor using Arduino IDE
- ESP32 with BME280 using Arduino IDE (Pressure, Temperature, Humidity)
- ESP32 DS18B20 Temperature Sensor with Arduino IDE (Single, Multiple, Web Server)
- ESP32 with BMP180 Barometric Sensor (Temperature and Pressure)
- ESP32 with BME680 Environmental Sensor (Gas, Pressure, Humidity, Temperature)
Learn more about the ESP32 with our resources:
Thanks for reading.
Great!!
Hello,
great project again. But I got one little thing about the I2C connections. There should be two 4,7 k resistors between plus and the SDA and SCL wires to have a
trouble-free system.
I like your projects very much because there are all trouble free and working.
Greeting and stay well
Kurt
Hi, I was going to say the same thing about the resistances 🙂
the I2C resistances are included on the sensor breakout, check the wiring diagrams of the MPU-6050 board, they are already there
Come sempre un ottimo e interessante progetto
hello guys, just to answer a previous request and to open for a brilliant Y2021, this is an opportunity to make this project using a 1.8″ TFT ST7735 Driver too or something like this. In case you need some assistance, I am of course available.
Thanks for the suggestion.
We definitely need to cerate some projects using the 1.8TFT display.
Regards,
Sara
If you want some support, pls don’t hesitate to ask. I have everything already available.
Thanks 😀
Thank you for all this super tutorials! I love them!
Fantastic project, as usual. Thanks.
Just a thought – I find it hard to read the OLED screen (Mine is a 128 x 64), and my eyesight is not too good recently😊
It would be fantastic if you could display the data on a TFT display – say 2,8″, which will present much more readable data.
Thanks for the suggestion.
We really need to create some tutorials with the TFT display.
Regards,
Sara
I find the sketches very interesting and instructive. Especially the commands for the for low pass fillter are important for me.
My problem: Sometimes the sketch works. But most of the time my gyroscope sensors (4 different ones) are not recognized. (“Failed to find MPU6050 chip”) An I2C scan returns the address 0x68. So the scan finds the gyroscope. Other sketches (directly via wire.h ) detect the gyroscope and work. I tried to start the sensor with
mpu.begin( uint8_t i2c_addr =0x68, TwoWire *wire=&Wire, int32_t sensorID=0);
but when transferring to the ESP32 I get the error message:
expected primary-expression before ‘i2c_addr’.
What can I do? Greetings from germany.
I had the same issue. To debug it, I added some print statements to the conditional checks in the begin method in the MPU6050 library, and found that the chip_id wasn’t matching the MPU6050_DEVICE_ID in the MPU6050 header file. MPU6050_DEVICE_ID was defined as 0x68, but I was getting a returned chip_id of 0x72.
I changed the value of the define and it started working.
como lo cabiaste?
Hi.
After getting the I2C address, you just need to pass it to the begin() method on the following line:
if (!mpu.begin()) {
So, it will be like this:
if (!mpu.begin(YOUR_I2C_ADDRESS)) {
Regards,
Sara
Hi i check my device with other sketch and work well but when i load this sketch this error appears in the serial monitor “Failed to find MPU6050 chip”. i think this problem occurred from i2c address in the program . please help me for solving this problem.
Hi.
You can run an I2C scanner sketch to check the I2C address of your sensor.
Here is the I2C scanner sketch: https://raw.githubusercontent.com/RuiSantosdotme/Random-Nerd-Tutorials/master/Projects/LCD_I2C/I2C_Scanner.ino
Regards,
Sara
I do that, and work fine, 0x68
bat no work in this sketch… 🙁
Hi.
Can you tell me what is exactly the problem?
Otherwise, it is very difficult to find out what’s going on.
Regards,
Sara
The link: https://raw.githubusercontent.com/RuiSantosdotme/Random-Nerd-Tutorials/master/Projects/LCD_I2C/I2C_Scanner.ino is not working. I’m also facing the same problem. When I open serial monitor window and press enable button on esp32 it says “Failed to find MPU6050 chip”. The problem is still not resolved. Please help me out.
Hi.
I just tested the link you sent and it is working fine.
Try it again.
Regards,
Sara
I had this problem. In the end it had nothing to do with the address. I forgot I was using a Nodemcu 32 board and the pinouts are different than the esp32 board shown in the circuit shown here. Once I connected up correctly it worked Just fine.
Hello,
All I2C problems pls read my mail from the 12. January. The I2C Bus can be a little bitchy specialy when the voltage is a little bit low from the USB.
Kurt
Hello again,
I found a good site in english, “http://www.interfacebus.com/I2C_Interface_Bus_Standard.html”
all other ones I have got there are in german.
Kurt
Hi
when i use sketch program with below i2c address i do’nt have any problem and all is ok
“const int MPU_addr=0x68; // I2C address of the MPU-6050″
but when i upload program with ” #include <Adafruit_MPU6050.h>” and dont define i2c directly in program lines this error appears in the serial monitor “Failed to find MPU6050 chip” if it is possible please give exact cod for solving this problem. thanks in advance for your help
Thanks for the information. What would it take to make this bluetooth and and still recieve the gyro data. I am trying to come up with a wireless solution. Do you know if it is possible with this board and gyro? Or should i look at other options. Thanks
Hi.
I’m not sure if the ESP32 Bluetooth can handle it.
You have to try it.
We have getting started tutorials for Classic Bluetooth and BLE:
– https://randomnerdtutorials.com/esp32-bluetooth-low-energy-ble-arduino-ide/
– https://randomnerdtutorials.com/esp32-bluetooth-classic-arduino-ide/
Regards,
Sara
Sara,
Please advise how I can resolve this error on compiling for ESP32 Dev Module. Sketch: File>Examples>Adafuit MPU6050>basic readings, as per your tutorial. It appears there is something amiss within the Adafruit Library.
Thank you,
John
Arduino: 1.8.15 (Windows 10), Board: “ESP32 Dev Module, Disabled, Default, 240MHz (WiFi/BT), QIO, 80MHz, 4MB (32Mb), 921600, None”
C:\Users____\Documents\Arduino\libraries\Adafruit_MPU6050\Adafruit_MPU6050.cpp: In member function ‘bool Adafruit_MPU6050::enableSleep(bool)’:
C:\Users____\Documents\Arduino\libraries\Adafruit_MPU6050\Adafruit_MPU6050.cpp:396:28: error: void value not ignored as it ought to be
return sleep.write(enable);
^
C:\Users____\Documents\Arduino\libraries\Adafruit_MPU6050\Adafruit_MPU6050.cpp: In member function ‘bool Adafruit_MPU6050::enableCycle(bool)’:
C:\Users____\Documents\Arduino\libraries\Adafruit_MPU6050\Adafruit_MPU6050.cpp:418:28: error: void value not ignored as it ought to be
return cycle.write(enable);
^
exit status 1
Error compiling for board ESP32 Dev Module.
I found a typo. Your link to the display in the second “parts required” table goes to the ESP32 comparison page, instead of a MakerAdvisor.com page.
Hi.
Thanks.
It is fixed now.
Regards,
Sara
Hello! Please advise how to have two of this MPU6050-ESP32 module sending data simultaneously to a laptop. I need data from the two IMU sensors at the same time to the laptop. Thanks!
Hi. I am using the MPU6050 in interrupt mode. I want it to interrupt my ESP32 when movement is detected. I don’t need to read anything from the MPU6050 when that interrupt happens, but just get the message that there was movement.
This works under normal circumstances. However, if I turn on cycle mode, which makes the MPU6050 go into a low power mode and only cycle at 1.25Hz or at any of the cycle rates:
MPU6050_CYCLE_1_25_HZ
MPU6050_CYCLE_5_HZ, ///< 5 Hz
MPU6050_CYCLE_20_HZ, ///< 20 Hz
MPU6050_CYCLE_40_HZ
Then the MPU6050 will not interrupt when moved. If I take the MPU out of that mode, interrupts start happening again.
Can anyone verify that this is normal, or if I am doing something wrong? It seems to me that the low power cycle mode should be well suited for use with the interrupt, but that does not seem to be the case.
Thank you.
if and else statement should be inverted in the setup loop
if (mpu.begin()) {
Serial.println(“MPU6050 Found!”);
while (1) {
delay(10);
}
}
else{
Serial.println(“Failed to find MPU6050 chip”);
}
like this
Hello.
Can you explain more about the sensor calibration? I want to calibrate this sensor and how I can do it?
Sara, I am trying to use the MPU6050 with the TTGO OLED LoRa ESP32 board. The Adafruit library for the OLED uses non-standard pins for its I2C bus. I’ve been struggling to get two instances of Wire() defined so I can use the Adafruit library and at the same time have another I2C function using pins 21/22. I’ve been successful getting a second random WireMPU() function to work and talk to the MPU chip, but somehow my TwoWire constructor doesn’t like to build another one for the OLED. Plus, I don’t see in the OLED.cpp how to pass the address of the second Wire() function to the OLED code when I do the OLED.begin(….) .
Hi.
Have you taken a look at this tutorial: https://randomnerdtutorials.com/esp32-i2c-communication-arduino-ide/
I’m sure it will help.
Regards,
Sara
Any reason why you want to have two sets of I2C pins? You could just use the same pair of SDA and SCL pins for multiple I2C devices. I have used an OLED, an MPU, a rotary encoder, and an RTC, all on the same two SDA and SCL pins, with no trouble.
Just a beginner here, How do I caliberate mpu6050. There are other libraries other than Adafruit what are the advantage of it ?
i am getting this kind of error in serial monitor soo it would be if someone could help me.
16:54:10.060 -> ets Jun 8 2016 00:22:57
16:54:10.060 ->
16:54:10.060 -> rst:0x1 (POWERON_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)
16:54:10.060 -> configsip: 0, SPIWP:0xee
16:54:10.060 -> clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
16:54:10.060 -> mode:DIO, clock div:1
16:54:10.060 -> load:0x3fff0030,len:1344
16:54:10.117 -> load:0x40078000,len:13864
16:54:10.117 -> load:0x40080400,len:3608
16:54:10.117 -> entry 0x400805f0
16:54:10.210 -> Adafruit MPU6050 test!
16:54:10.257 -> Failed to find MPU6050 chip
Hello, tutorial is very informative and each and every step you explained verywell.
Wanted to know in above 1)How I can get MPU6050 readings on mobile2) How I can connect ESP32 remotely with the PC/mobile app and MPU 6050 remotely with ESP32. Can you please let me know.
Adafruit_MPU6050 mpu;
Adafruit_SSD1306 display = Adafruit_SSD1306(128, 32, &Wire);
Change your Code for this Line. It will look as you like it.
Failed to find MPU6050 chip – I have the same error with THIS (adafruit) library
With MPU6050 lib by Electronic Cats – I can run example sketch in 1 click
device ID from i2c scanner is the same 0x68
Could you or somebody else make this sketch based on Electronic Cats MPU6050 lib?
Hello and thank you for this perfect tutorial!
I have a question. How can I receive the plot related to MPU-6050 data on the webserver page that this project brought numeric data and the 3D movement of the sensor?
I would be glad if someone could answer this for me causze I’m a new learner.
Thanks a lot in advance.
Beautiful project! Do you think it can be the basis for building a system that calculates the bend angle of the moving bike while riding through a curve? Thanks