esp32 with mpu6050

Hello,

I am trying to read data from mpu6050 using the below code. I have used the same code with arduinomega2560 which works perfectly fine with it. But when using the same code with esp32 it gives me a contact value of 134.96. Could you please help.

Since I downloaded this board from expressif the Wire library is already present, but I suppose it is not the same as in the Wire library of Arduino mega 2560. So i tried to copy this library to the library set of the ESP32 in expressif while deleting the original library from esp32, but this also doesn't seem to work instead it give me an error of multiple libraries present.

#include "Wire.h"

#define MPU_addr 0x68


double AccelX,AccelY,AccelZ,Tmp,GyroX,GyroY,GyroZ; //These will be the raw data from the MPU6050.
uint32_t timer; //it's a timer, saved as a big-ass unsigned int. We use it to save times from the "micros()" command and subtract the present time in microseconds from the time stored in timer to calculate the time for each loop.
double Angle_X, Angle_Y; //These are the angles in the complementary filter
#define degconvert 57.29577951//there are like 57 degrees in a radian.

void setup()
{
  Wire.begin();
  #if ARDUINO >= 157
    Wire.setClock(400000UL); // Set I2C frequency to 400kHz
  #else
    TWBR = ((F_CPU / 400000UL) - 16) / 2; // Set I2C frequency to 400kHz
  #endif

  Wire.beginTransmission(MPU_addr);
  Wire.write(0x6B); // PWR_MGMT_1 register
  Wire.write(0); // set to zero (wakes up the MPU-6050)
  Wire.endTransmission(true);
  Serial.begin(57600);
  delay(100);
  //setup starting angle
  //1) collect the data
 
  Wire.beginTransmission(MPU_addr);
  Wire.write(0x3B); // starting with register 0x3B (ACCEL_XOUT_H)
  Wire.endTransmission(false);
  Wire.requestFrom(MPU_addr,14,true); // request a total of 14 registers
  AccelX=Wire.read()<<8|Wire.read(); // 0x3B (ACCEL_XOUT_H) & 0x3C (ACCEL_XOUT_L)
  AccelY=Wire.read()<<8|Wire.read(); // 0x3D (ACCEL_YOUT_H) & 0x3E (ACCEL_YOUT_L)
  AccelZ=Wire.read()<<8|Wire.read(); // 0x3F (ACCEL_ZOUT_H) & 0x40 (ACCEL_ZOUT_L)
  Tmp=Wire.read()<<8|Wire.read(); // 0x41 (TEMP_OUT_H) & 0x42 (TEMP_OUT_L)
  GyroX=Wire.read()<<8|Wire.read(); // 0x43 (GYRO_XOUT_H) & 0x44 (GYRO_XOUT_L)
  GyroY=Wire.read()<<8|Wire.read(); // 0x45 (GYRO_YOUT_H) & 0x46 (GYRO_YOUT_L)
  GyroZ=Wire.read()<<8|Wire.read(); // 0x47 (GYRO_ZOUT_H) & 0x48 (GYRO_ZOUT_L) 
  }

void loop()
{
  Wire.beginTransmission(MPU_addr);
  Wire.write(0x3B); // starting with register 0x3B (ACCEL_XOUT_H)
  Wire.endTransmission(false);
  Wire.requestFrom(MPU_addr,14,true); // request a total of 14 registers
  AccelX=Wire.read()<<8|Wire.read(); // 0x3B (ACCEL_XOUT_H) & 0x3C (ACCEL_XOUT_L)
  AccelY=Wire.read()<<8|Wire.read(); // 0x3D (ACCEL_YOUT_H) & 0x3E (ACCEL_YOUT_L)
  AccelZ=Wire.read()<<8|Wire.read(); // 0x3F (ACCEL_ZOUT_H) & 0x40 (ACCEL_ZOUT_L)
  Tmp=Wire.read()<<8|Wire.read(); // 0x41 (TEMP_OUT_H) & 0x42 (TEMP_OUT_L)
  GyroX=Wire.read()<<8|Wire.read(); // 0x43 (GYRO_XOUT_H) & 0x44 (GYRO_XOUT_L)
  GyroY=Wire.read()<<8|Wire.read(); // 0x45 (GYRO_YOUT_H) & 0x46 (GYRO_YOUT_L)
  GyroZ=Wire.read()<<8|Wire.read(); // 0x47 (GYRO_ZOUT_H) & 0x48 (GYRO_ZOUT_L)
  double dt = (double)(micros() - timer) / 1000000;
  timer = micros();
  double roll = atan2(AccelY, AccelZ)*degconvert;
  double pitch = atan2(-AccelX, AccelZ)*degconvert;
  double gyroXrate = GyroX/131.0; 
  double gyroYrate = GyroY/131.0;  
  Angle_X = 0.99 * (Angle_X + gyroXrate * dt) + 0.01 * roll;
  Angle_Y = 0.99 * (Angle_Y + gyroYrate * dt) + 0.01 * pitch;
  
  Serial.println(Angle_Y);  
  }

You do realize that a ESP32 is not a MEGA? Put the libraries back the way they were.

When you ran the I2C scanner with the ESP32 and the MPU6050 attached, what did the I2C scanner report?

You do realize that a ESP32 is a 32 bit uController and that, in this case, using a double is a waste?

I notice you chose to not do the WhoAmI read, I'd not allow the rest of the code to run if WhoAmI fails.

Anyways, what does the I2C scanner report, after you fixed the libraries.

Hello,

Thank you. Yes I realize. I have changed the library folder back. Also Yes i did used I2C scanner and it works fine. The output is uploaded.

But I am still not able to run my code.

Please describe the problems you are encountering. Post the error messages, example of incorrect output, etc.

Hello,

Thank you for the efforts. There was a problem with the SDA pin no my mpu6050, so changed the MPU6050.
Also wanted to know how can i use analogWrite with my esp32?

ESP32 A:D API, Digital To Analog Converter (DAC) - ESP32 - — ESP-IDF Programming Guide latest documentation