Hi,
I am trying to fetch Gyro and Accelerometer data from the Gyro MPU6050 into LoRa ESP32 (ESP32 LoRa SX1278 0.96 Inch Blue OLED Display Bluetooth WIFI Lora Kit 32 Module IOT Development Board 433MHz for Arduino) but I am unable to see any data flowing through ESP32 I2C pins. I am getting default values over serial pins, I do not understand what mistake I am doing. I have attached few pics for pin connections.
Pin connections:
MPU VCC = ESP32 VCC 3.3v
MPU GND = ESP32 Gnd
SCL = SCL (Pin 22)
SDA = SDA (Pin 21)
Default Output:
Gyro (deg)X=0.00Y=0.00Z=0.00Accel (g)X=0.00Y=0.00Z=0.000.00
Code:
#include <Wire.h>
HardwareSerial serial(1);
long accelX, accelY, accelZ;
float gForceX, gForceY, gForceZ;
long gyroX, gyroY, gyroZ;
float rotX, rotY, rotZ;
void setup() {
Serial.begin(9600);
Wire.begin();
setupMPU();
}
void loop() {
// put your main code here, to run repeatedly:
recordAccelRegisters();
recordGyroRegisters();
printData();
delay(100);
}
void setupMPU() {
Wire.beginTransmission(0b1101000);//I2C address of the MPU
Serial.println("I2C transmission");
Wire.write(0x6B);//power management
Serial.println("After power management");
Wire.write(0b00000000);//setting sleep register to 0.
Wire.endTransmission();
Wire.beginTransmission(0b1101000);//I2C address of the MPU
Wire.write(0x1B);//accessing the register 1B - gyroscope config
Wire.write(0b00000000);//setting gyro to full scale
Wire.endTransmission();
Wire.beginTransmission(0b1101000);
Wire.write(0x1C);//accessing the register 1C - accelerometer config
Wire.write(0b00000000);//setting the accel to +/-2g
Wire.endTransmission();
}
void recordAccelRegisters() {
Wire.beginTransmission(0b1101000);//I2C address of the MPU
Wire.write(0x3B);//accessing the register for accel reading
Wire.endTransmission();
Wire.requestFrom(0b1101000, 6); //request accel registers (3B - 40)
while (Wire.available() < 6);
accelX = Wire.read() << 8 | Wire.read(); //store firt 2 bytesrecordGyroRegisters
accelY = Wire.read() << 8 | Wire.read(); //store middle 2 bytes
accelZ = Wire.read() << 8 | Wire.read(); //store last 2 bytes
processAccelData();
}
void processAccelData() {
gForceX = accelX / 16384.0;
Serial.print(gForceX);
gForceY = accelY / 16384.0;
gForceZ = accelZ / 16384.0;
}
void recordGyroRegisters() {
Wire.beginTransmission(0b1101000);
Wire.write(0x43);//starting register for Gyro readings
Wire.endTransmission();
Wire.requestFrom(0b1101000, 6); //request Gyro registers (43 - 48)
while (Wire.available() < 6);
gyroX = Wire.read() << 8 | Wire.read(); //store firt 2 bytes
gyroY = Wire.read() << 8 | Wire.read(); //store middle 2 bytes
gyroZ = Wire.read() << 8 | Wire.read(); //store last 2 bytes
processGyroData();
}
void processGyroData() {
rotX = gyroX / 131.0;
rotY = gyroY / 131.0;
rotZ = gyroZ / 131.0;
}
void printData() {
Serial.print("Gyro (deg)");
Serial.print("X=");
Serial.print(rotX);
Serial.print("Y=");
Serial.print(rotY);
Serial.print("Z=");
Serial.print(rotZ);
Serial.print("Accel (g)");
Serial.print("X=");
Serial.print(gForceX);
Serial.print("Y=");
Serial.print(gForceY);
Serial.print("Z=");
Serial.print(gForceZ);
}