简体   繁体   中英

Interfacing issue with esp8266 esp-01 module and mpu6050

I used the Arduino uno to upload the sketch to the esp 01 module. I attached the image how I connected the esp-01 and mpu6050 , browser continuously prints the gyro values but incrementing by 0.01 I need actual gyro values

[1]
#include <ESP8266WiFi.h>
#include <MPU6050_tockn.h>
#include <Wire.h>

MPU6050 mpu6050(Wire);

const char* ssid = "TP-LINK";
const char* password = "1913131";

// Create an instance of the server
// specify the port to listen on as an argument
WiFiServer server(80);

void setup() {

  Serial.begin(115200);
  delay(1000);


  // Connect to WiFi network
  Serial.println();
  Serial.println();
  Serial.print("Connecting to ");
  Serial.println(ssid);

  WiFi.mode(WIFI_STA);
  WiFi.begin(ssid, password);

  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("");
  Serial.println("WiFi connected");

  // Start the server
  server.begin();
  Serial.println("Server started");

  // Print the IP address
  Serial.println(WiFi.localIP());



  delay(5000);
  //Serial.begin(9600);
  Wire.begin(0,2);
  delay(1000);


  mpu6050.begin();
  delay(1000);
  mpu6050.calcGyroOffsets(true);

  delay(1000);
}

void loop() {
  // Check if a client has connected

  WiFiClient client = server.available();
  if (!client) {
    Serial.print("Client did not connect");
    delay(1000);

    return;
  }

  // Wait until the client sends some data
  Serial.println("new client");
  while (!client.available()) {
    delay(1);
  }

  while(client.available()){
  mpu6050.update();

  client.print(mpu6050.getGyroAngleX());
  client.print(",");
  client.print(mpu6050.getGyroAngleY());
  client.print(",");
  client.println(mpu6050.getGyroAngleZ());
  delay(10);

  }

  delay(1);

  Serial.println("Client disonnected");

  // The client will actually be disconnected
  // when the function returns and 'client' object is detroyed
}

> Blockquote

when client actually connects and when I enter the ip address in the browser values printed in the browser are 0.69,0.69,0.60 0.70,0.70,0.60 0.70 and goes on incrementing the values by 0.01 but I need actual gyroscope reading. help me please

I connected the esp 01 and mpu6050 like in this image List item

instead of using MPU 6050 library just use Wire Library to get the values refer to the data sheet of MPU6050 uses address 0x68 to start trnsmission.

 Wire.beginTransmission(0x68);

you can refer to following datasheet . To get the Gyro values we write to 0x1B(MSB) and 0x18(LSB). We will get the 6 bytes of data

 // Select gyroscope configuration register
 Wire.write(0x1B);
 Wire.write(0x18);

now write to data register 0x43 to recieve the gyro values. We will receive 6 bytes of values from the sensor where the 16 bits(1byte) for x, y and z axis respectively Wire.requestFrom(Addr, 6);

// Read 6 byte of data 
if(Wire.available() == 6)
{
   data[0] = Wire.read();
   data[1] = Wire.read();
   data[2] = Wire.read();
   data[3] = Wire.read();
   data[4] = Wire.read();
   data[5] = Wire.read(); 
 }
 // Convert the data
   int xGyro = data[0] * 256 + data[1];
   int yGyro = data[2] * 256 + data[3];
   int zGyro = data[4] * 256 + data[5];

where as To get accelerometer values we write to 0x1C(MSB) and 0x18(LSB). you can find the full code in this github link . Here we have got the gyro and accelerometer values from the sensor

also Do it like this Wire.begin(SDA,SCL) in your case it would be Wire.begin(0,2); *Note MPU6000 and MPU6050 have the same specification and address so don't worry about that.

The full-scale range of GYRO can be detected from register address 0x1B, there are different resolution ranging from 250 to 2000 degree/sec to get the exact value of the the axis of rotation you need to divide your raw values with the scale factor defined in the following datasheet in Gyroscope specification column. this is sensitivity/scale factor. The raw values you are getting are the decimal values and this scale factor is in LSB(degree/sec). for example if you have chosen 500 deg/sec then you need to devide it by 65.5 to get the value

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM