009D acc + gyro — ESP32 simulation

An interactive ESP32 circuit simulation you can run free in your browser on Velxio, by josephkinuthia541.

Components

Sketch code

#include <Wire.h>


// =====================================================
// LSM6DS3 I2C ADDRESS
// =====================================================

#define LSM6DS3_ADDR 0x6A


// =====================================================
// LSM6DS3 REGISTERS
// =====================================================

#define WHO_AM_I     0x0F
#define CTRL1_XL     0x10
#define CTRL2_G      0x11

#define OUTX_L_G     0x22
#define OUTX_L_XL    0x28


// =====================================================
// VARIABLES FOR ATTITUDE
// =====================================================

float roll = 0.0;
float pitch = 0.0;


// =====================================================
// TIME
// =====================================================

unsigned long previousTime;


// =====================================================
// WRITE TO REGISTER
// =====================================================

void writeRegister(byte reg, byte value)
{
  Wire.beginTransmission(LSM6DS3_ADDR);

  Wire.write(reg);

  Wire.write(value);

  Wire.endTransmission();
}


// =====================================================
// READ ONE BYTE
// =====================================================

byte readRegister(byte reg)
{
  Wire.beginTransmission(LSM6DS3_ADDR);

  Wire.write(reg);

  Wire.endTransmission(false);

  Wire.requestFrom(LSM6DS3_ADDR, 1);

  return Wire.read();
}


// =====================================================
// READ TWO BYTES
// =====================================================

int16_t read16(byte reg)
{
  Wire.beginTransmission(LSM6DS3_ADDR);

  Wire.write(reg);

  Wire.endTransmission(false);

  Wire.requestFrom(LSM6DS3_ADDR, 2);

  byte low = Wire.read();

  byte high = Wire.read();

  return (int16_t)(high << 8 | low);
}


// =====================================================
// SETUP
// =====================================================

void setup()
{
  Serial.begin(115200);


  // I2C
  // SDA = GPIO 21
  // SCL = GPIO 22

  Wire.begin(21, 22);

  delay(100);


  // ===================================================
  // CHECK SENSOR
  // ===================================================

  byte who = readRegister(WHO_AM_I);

  Serial.print("WHO_AM_I = 0x");

  Serial.println(who, HEX);


  // ===================================================
  // ACCELEROMETER
  // 104 Hz
  // +/- 4 G
  // ===================================================

  writeRegister(CTRL1_XL, 0x48);


  // ===================================================
  // GYROSCOPE
  // 104 Hz
  // +/- 245 dps
  // ===================================================

  writeRegister(CTRL2_G, 0x40);


  Serial.println("LSM6DS3 started.");

  Serial.println();


  // Start timer

  previousTime = micros();
}


// =====================================================
// LOOP
// =====================================================

void loop()
{

  // ===================================================
  // READ RAW GYRO
  // ===========

More projects by josephkinuthia541