Skip to content

I2C still not working #90

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
kriswiner opened this issue Dec 11, 2016 · 75 comments
Closed

I2C still not working #90

kriswiner opened this issue Dec 11, 2016 · 75 comments

Comments

@kriswiner
Copy link

kriswiner commented Dec 11, 2016

I can read the I2C addresses of the I2C sensors with pins 21/22 but I cannot read the WHO_AM_I byte.
This works on the Teensy and STM32L4:

 uint8_t readByte(uint8_t address, uint8_t subAddress)
{
  uint8_t data; // `data` will store the register data   
  Wire.beginTransmission(address);         // Initialize the Tx buffer
  Wire.write(subAddress);                  // Put slave register address in Tx buffer
  Wire.endTransmission(false);             // Send the Tx buffer, but send a restart to keep connection alive
  Wire.requestFrom(address, 1);            // Read one byte from slave register address 
  data = Wire.read();                      // Fill Rx buffer with result
  return data;                             // Return data read from slave register
}
@me-no-dev
Copy link
Member

what is that slave device that you are trying to access?

@kriswiner
Copy link
Author

MPU9250 and MS5637.

@kriswiner
Copy link
Author

kriswiner commented Dec 13, 2016

OK, I confirmed I can read the I2C pressure/temperature sensor MS5637, which essentially uses one byte at a time for reads and writes. Here is the sketch that works just fine:

#include "Wire.h"   

// See MS5637-02BA03 Low Voltage Barometric Pressure Sensor Data Sheet
#define MS5637_RESET      0x1E
#define MS5637_CONVERT_D1 0x40
#define MS5637_CONVERT_D2 0x50
#define MS5637_ADC_READ   0x00

#define MS5637_ADDRESS 0x76   // Address of altimeter

#define SerialDebug true  // set to true to get Serial output for debugging

#define ADC_256  0x00 // define pressure and temperature conversion rates
#define ADC_512  0x02
#define ADC_1024 0x04
#define ADC_2048 0x06
#define ADC_4096 0x08
#define ADC_8192 0x0A
#define ADC_D1   0x40
#define ADC_D2   0x50

// Specify sensor full scale
uint8_t OSR = ADC_8192;     // set pressure amd temperature oversample rate
  
// Pin definitions
int intPin = 14;  

int myLed = 5;

uint16_t Pcal[8];         // calibration constants from MS5637 PROM registers
unsigned char nCRC;       // calculated check sum to ensure PROM integrity
uint32_t D1 = 0, D2 = 0;  // raw MS5637 pressure and temperature data
double dT, OFFSET, SENS, TT2, OFFSET2, SENS2;  // First order and second order corrections for raw S5637 temperature and pressure data
    
int16_t tempCount;            // temperature raw count output
float   temperature;          // Stores the MPU9250 gyro internal chip temperature in degrees Celsius
double Temperature, Pressure; // stores MS5637 pressures sensor pressure and temperature

// global constants for 9 DoF fusion and AHRS (Attitude and Heading Reference System)
float pi = 3.141592653589793238462643383279502884f;

void setup()
{
  Serial.begin(115200);
  delay(4000);
  
  Wire.begin(21,22); // 21/22 are default on ESP32
  Wire.setClock(400000); // choose 400 kHz I2C rate
//  Wire.setClockStretchLimit(1000000);
  delay(1000);
  
  // Set up the interrupt pin, its set as active high, push-pull
  pinMode(intPin, INPUT);
  pinMode(myLed, OUTPUT);
  digitalWrite(myLed, LOW);
  
  I2Cscan();// look for I2C devices on the bus
    
  // Reset the MS5637 pressure sensor
  MS5637Reset();
  delay(100);
  Serial.println("MS5637 pressure sensor reset...");
  // Read PROM data from MS5637 pressure sensor
  MS5637PromRead(Pcal);
  Serial.println("PROM dta read:");
  Serial.print("C0 = "); Serial.println(Pcal[0]);
  unsigned char refCRC = Pcal[0] >> 12;
  Serial.print("C1 = "); Serial.println(Pcal[1]);
  Serial.print("C2 = "); Serial.println(Pcal[2]);
  Serial.print("C3 = "); Serial.println(Pcal[3]);
  Serial.print("C4 = "); Serial.println(Pcal[4]);
  Serial.print("C5 = "); Serial.println(Pcal[5]);
  Serial.print("C6 = "); Serial.println(Pcal[6]);
  
  nCRC = MS5637checkCRC(Pcal);  //calculate checksum to ensure integrity of MS5637 calibration data
  Serial.print("Checksum = "); Serial.print(nCRC); Serial.print(" , should be "); Serial.println(refCRC);  
}

void loop()
{  

    D1 = MS5637Read(ADC_D1, OSR);  // get raw pressure value
    D2 = MS5637Read(ADC_D2, OSR);  // get raw temperature value
    dT = D2 - Pcal[5]*pow(2,8);    // calculate temperature difference from reference
    OFFSET = Pcal[2]*pow(2, 17) + dT*Pcal[4]/pow(2,6);
    SENS = Pcal[1]*pow(2,16) + dT*Pcal[3]/pow(2,7);
 
    Temperature = (2000 + (dT*Pcal[6])/pow(2, 23))/100;           // First-order Temperature in degrees Centigrade
//
// Second order corrections
    if(Temperature > 20) 
    {
      TT2 = 5*dT*dT/pow(2, 38); // correction for high temperatures
      OFFSET2 = 0;
      SENS2 = 0;
    }
    if(Temperature < 20)                   // correction for low temperature
    {
      TT2      = 3*dT*dT/pow(2, 33); 
      OFFSET2 = 61*(100*Temperature - 2000)*(100*Temperature - 2000)/16;
      SENS2   = 29*(100*Temperature - 2000)*(100*Temperature - 2000)/16;
    } 
    if(Temperature < -15)                      // correction for very low temperature
    {
      OFFSET2 = OFFSET2 + 17*(100*Temperature + 1500)*(100*Temperature + 1500);
      SENS2 = SENS2 + 9*(100*Temperature + 1500)*(100*Temperature + 1500);
    }
 // End of second order corrections
 //
     Temperature = Temperature - T2/100;
     OFFSET = OFFSET - OFFSET2;
     SENS = SENS - SENS2;
 
     Pressure = (((D1*SENS)/pow(2, 21) - OFFSET)/pow(2, 15))/100;  // Pressure in mbar or kPa

    float altitude = 145366.45*(1. - pow((Pressure/1013.25), 0.190284));
   
    if(SerialDebug) {
    Serial.print("Digital temperature value = "); Serial.print( (float)Temperature, 2); Serial.println(" C"); // temperature in degrees Celsius
    Serial.print("Digital temperature value = "); Serial.print(9.*(float) Temperature/5. + 32., 2); Serial.println(" F"); // temperature in degrees Fahrenheit
    Serial.print("Digital pressure value = "); Serial.print((float) Pressure, 2);  Serial.println(" mbar");// pressure in millibar
    Serial.print("Altitude = "); Serial.print(altitude, 2); Serial.println(" feet");
    }   
 
   digitalWrite(myLed, !digitalRead(myLed));
   delay(500);
}

//===================================================================================================================
//====== Set of useful function to access acceleration. gyroscope, magnetometer, and temperature data
//===================================================================================================================

// I2C communication with the MS5637 is a little different from that with the MPU9250 and most other sensors
// For the MS5637, we write commands, and the MS5637 sends data in response, rather than directly reading
// MS5637 registers

        void MS5637Reset()
        {
        Wire.beginTransmission(MS5637_ADDRESS);  // Initialize the Tx buffer
        Wire.write(MS5637_RESET);                // Put reset command in Tx buffer
        Wire.endTransmission();                  // Send the Tx buffer
        }
        
        void MS5637PromRead(uint16_t * destination)
        {
        uint8_t data[2] = {0,0};
        for (uint8_t ii = 0; ii < 7; ii++) {
          Wire.beginTransmission(MS5637_ADDRESS);  // Initialize the Tx buffer
          Wire.write(0xA0 | ii << 1);              // Put PROM address in Tx buffer
          Wire.endTransmission(false);             // Send the Tx buffer, but send a restart to keep connection alive
          uint8_t i = 0;
          Wire.requestFrom(MS5637_ADDRESS, 2);     // Read two bytes from slave PROM address 
          while (Wire.available()) {
          data[i++] = Wire.read(); }               // Put read results in the Rx buffer
          destination[ii] = (uint16_t) (((uint16_t) data[0] << 8) | data[1]); // construct PROM data for return to main program
        }
        }

        uint32_t MS5637Read(uint8_t CMD, uint8_t OSR)  // temperature data read
        {
        uint8_t data[3] = {0,0,0};
        Wire.beginTransmission(MS5637_ADDRESS);  // Initialize the Tx buffer
        Wire.write(CMD | OSR);                   // Put pressure conversion command in Tx buffer
        Wire.endTransmission(false);             // Send the Tx buffer, but send a restart to keep connection alive
        
        switch (OSR)
        {
          case ADC_256: delay(1); break;         // delay for conversion to complete
          case ADC_512: delay(3); break;
          case ADC_1024: delay(4); break;
          case ADC_2048: delay(6); break;
          case ADC_4096: delay(10); break;
          case ADC_8192: delay(20); break;
        }
       
        Wire.beginTransmission(MS5637_ADDRESS);  // Initialize the Tx buffer
        Wire.write(0x00);                        // Put ADC read command in Tx buffer
        Wire.endTransmission(false);             // Send the Tx buffer, but send a restart to keep connection alive
        uint8_t i = 0;
        Wire.requestFrom(MS5637_ADDRESS, 3);     // Read three bytes from slave PROM address 
        while (Wire.available()) {
        data[i++] = Wire.read(); }               // Put read results in the Rx buffer
        return (uint32_t) (((uint32_t) data[0] << 16) | (uint32_t) data[1] << 8 | data[2]); // construct PROM data for return to main program
        }

unsigned char MS5637checkCRC(uint16_t * n_prom)  // calculate checksum from PROM register contents
{
  int cnt;
  unsigned int n_rem = 0;
  unsigned char n_bit;
  
  n_prom[0] = ((n_prom[0]) & 0x0FFF);  // replace CRC byte by 0 for checksum calculation
  n_prom[7] = 0;
  for(cnt = 0; cnt < 16; cnt++)
  {
    if(cnt%2==1) n_rem ^= (unsigned short) ((n_prom[cnt>>1]) & 0x00FF);
    else         n_rem ^= (unsigned short)  (n_prom[cnt>>1]>>8);
    for(n_bit = 8; n_bit > 0; n_bit--)
    {
        if(n_rem & 0x8000)    n_rem = (n_rem<<1) ^ 0x3000;
        else                  n_rem = (n_rem<<1);
    }
  }
  n_rem = ((n_rem>>12) & 0x000F);
  return (n_rem ^ 0x00);
}


// simple function to scan for I2C devices on the bus
void I2Cscan() 
{
    // scan for i2c devices
  byte error, address;
  int nDevices;

  Serial.println("Scanning...");

  nDevices = 0;
  for(address = 1; address < 127; address++ ) 
  {
    // The i2c_scanner uses the return value of
    // the Write.endTransmisstion to see if
    // a device did acknowledge to the address.
    Wire.beginTransmission(address);
    error = Wire.endTransmission();

    if (error == 0)
    {
      Serial.print("I2C device found at address 0x");
      if (address<16) 
        Serial.print("0");
      Serial.print(address,HEX);
      Serial.println("  !");

      nDevices++;
    }
    else if (error==4) 
    {
      Serial.print("Unknown error at address 0x");
      if (address<16) 
        Serial.print("0");
      Serial.println(address,HEX);
    }    
  }
  if (nDevices == 0)
    Serial.println("No I2C devices found\n");
  else
    Serial.println("done\n");
}

But if I try to read the MPU9250 which requires write of a device address, then a register address (more than one byte), then I can not read any data from it. Here is the multi-byte I2C function:

  uint8_t readByte(uint8_t address, uint8_t subAddress)
{
  uint8_t data; // `data` will store the register data   
  Wire.beginTransmission(address);         // Initialize the Tx buffer
  Wire.write(subAddress);                  // Put slave register address in Tx buffer
  Wire.endTransmission(false);             // Send the Tx buffer, but send a restart to keep connection alive
  Wire.requestFrom(address, 1);            // Read one byte from slave register address 
  data = Wire.read();                      // Fill Rx buffer with result
  return data;                             // Return data read from slave register
}

Some how the second byte is causing the I2C bus to get hing up. Not sure why but this is the reason most I2C devices cannot be read by the ESP32 except for the very simple (command and response types) ones. Although now that I look at both readByte functions, they look pretty similar so now I don't know why one works and one does not.

@Nourfdss
Copy link

@kriswiner hey man can you please explain how did you connect the MS5637 to the esp32 im trying to conect the mpu6050 motion sensor but i failed

@kriswiner
Copy link
Author

I connected pin 21 to SDA, pin 22 to SCL and then 3V3 and GND. But this won't help you since i can't get anything but the I2C address out of the companion MPU9250. There is something different about the Invensense I2C bus/controller that is causing the I2C bus to latch up. Might be a clock stretching issue. I have seen this before on the ESP8266/85. I am using 4K7 pullips on the I2C lines, which usually works for a variety of controllers including the ESP8266/85. But somehow the ESP32 is having trouble with it.

@Nourfdss
Copy link

So now what is the solution if i wanna get the motion sensor connected to esp32 i tried alot to find in the internet i did not fine anything

@kriswiner
Copy link
Author

Don't know, I'd like to get the other I2C sensors working as well. I am going to test more but I have not been able to get the MPU9250 to work yet.

Lokks like we will both have to just wait until this is fixed. Or go backt o using the ESP8266/85!

@Nourfdss
Copy link

Okay man if i got anything i will post it here and let u know ,good luck

@me-no-dev
Copy link
Member

guys calm down :) i'm working on it and so far I can read MPU fine. Update will be up soon.

@kriswiner
Copy link
Author

No disresepect intended, you guys are doing great work!

Just trying to do my part ;>

I am looking forward to your fix.

@me-no-dev
Copy link
Member

issue with MPU was directly connected to the fact that before you read from it, you do not send stop (Wire.endTransfer(false)). Now that I have that fixed, I can not write more than 9 bytes to I2C... cat and mouse with this bus

@me-no-dev
Copy link
Member

please try the latest commit

@kriswiner
Copy link
Author

I just tried the new core and I am still having the same problem. I can see the I2C devices on the bus but cannot read from the MPU9250 WHO_AM_I register. This is the output I get:

Scanning...
I2C device found at address 0x68  !
I2C device found at address 0x76  !
done

MPU9250 9-axis motion sensor...
MPU9250 I AM FF I should be 71
Could not connect to MPU9250: 0xFF

I verified I can still get data from the MS5637 alone. That is, if I only ask for MS5637 data, read and write from/to MS5637 only then everything works, but when I try to talk with the MPU9250 the bus gets stuck and I can't talk to either.

@kriswiner
Copy link
Author

I also verified that I can get data from the VEML6040 I2C RGBW sensor. So some work and some don't. Odd...

@kriswiner
Copy link
Author

But cannot read the BMX055:

Scanning...
I2C device found at address 0x10  !
I2C device found at address 0x18  !
I2C device found at address 0x1E  !
I2C device found at address 0x59  !
I2C device found at address 0x68  !
I2C device found at address 0x69  !
I2C device found at address 0x6A  !
done

BMX055 accelerometer...
BMX055 ACC I AM 0xFF I should be 0xFA
BMX055 gyroscope...
BMX055 GYRO I AM 0xFF I should be 0xF
BMX055 magnetometer...
BMX055 MAG I AM 0xFF I should be 0x32
Could not connect to BMX055: 0xFF

@tolson2000
Copy link

@kriswiner Can you try adding another Wire.beginTransmission to get the result instead of using endTransmission(false)? Just curious, I haven't received my ESP32 yet to help test. If it works.. might be a hint.

But if I try to read the MPU9250 which requires write of a device address, then a register address (more than one byte), then I can not read any data from it. Here is the multi-byte I2C function:


  uint8_t readByte(uint8_t address, uint8_t subAddress)
{
  uint8_t data; // `data` will store the register data   
  Wire.beginTransmission(address);   // Initialize the Tx buffer
  Wire.write(subAddress);                  // Put slave register address in Tx buffer
  Wire.endTransmission(false);          // Send the Tx buffer, but send a restart to keep connection alive
  Wire.requestFrom(address, 1);        // Read one byte from slave register address 
  data = Wire.read();                          // Fill Rx buffer with result
  return data;                                     // Return data read from slave register
}

Change to...


  uint8_t readByte(uint8_t address, uint8_t subAddress)
{
  uint8_t data; // `data` will store the register data   
  Wire.beginTransmission(address);         // Initialize the Tx buffer
  Wire.write(subAddress);                  // Put slave register address in Tx buffer
  Wire.endTransmission();                 //  <<------
  Wire.beginTransmission(address);  // <<------
  Wire.requestFrom(address, 1);       // Read one byte from slave register address 
  data = Wire.read();                         // Fill Rx buffer with result
  return data;                                    // Return data read from slave register
}

@kriswiner
Copy link
Author

I tried this:

  uint8_t readByte(uint8_t address, uint8_t subAddress)
{
  uint8_t data = 0;                        // `data` will store the register data   
  Wire.beginTransmission(address);         // Initialize the Tx buffer
  Wire.write(subAddress);                  // Put slave register address in Tx buffer
//  Wire.endTransmission(false);             // Send the Tx buffer, but send a restart to keep connection alive
  Wire.endTransmission();                 //  <<------
  Wire.beginTransmission(address);  // <<------ 
  Wire.requestFrom(address, 1);            // Read one byte from slave register address 
  data = Wire.read();                      // Fill Rx buffer with result
  return data;                             // Return data read from slave register
}

and I get the same behavior. MS5637 alone works, but MPU9250 does not.

@me-no-dev
Copy link
Member

Here is what I have found:

  • MPU does not like to be read one byte at a time.
  • When you read only one byte, the MPU holds SDA low which trips the I2C bus and it reaches timeout.
  • If you instead read two bytes, you will get the expected result

Here is an image when you read only one byte:
screen shot 2016-12-14 at 12 51 11 pm

Here is when you read two bytes:
screen shot 2016-12-14 at 12 51 48 pm

@me-no-dev
Copy link
Member

const uint8_t MPU_addr=0x68; // I2C address of the MPU-6050
#define WHO_AM_I_MPU9250 0x75 // Should return 0x71

uint8_t mpuWhoAmI()
{
    uint8_t data; // `data` will store the register data
    Wire.beginTransmission(MPU_addr);         // Initialize the Tx buffer
    Wire.write(WHO_AM_I_MPU9250);                  // Put slave register address in Tx buffer
    Wire.endTransmission(true);             // Send the Tx buffer, but send a restart to keep connection alive
    Wire.requestFrom(MPU_addr, (uint8_t) 2);  // Read one byte from slave register address
    data = Wire.read();                      // Fill Rx buffer with result
    Wire.read();
    return data;                             // Return data read from slave register
}

@me-no-dev
Copy link
Member

Just tested manually and the MPU does not release SDA until it gets another 8 clocks.
I know I wrote code to add more clocks for ESP8266, but there I2C is software and here is hardware. We do not have another way of sending more clocks than reading more or writing more

@kriswiner
Copy link
Author

Tried the fix and it seems to work. I can read the MPU9250 and AK8963C. The fusion rate I measure is 20 kHz (compare to 60 kHz with STM32L4) but the fusion is not behaving properly because of the lack of floating point sqrt and sin/tan functions I think. Anyway, this I2C issue ios solved.

There is one curious problem I am having. I was polling the data ready register bit of the AK8963C to test whether bnew data was available. Now that I am reading the next byte, which is the first data byte, it is clearing the data registers so I have had to abandong the data ready test to read the data. Oh well, can't have everything!

I have reposited working ESP32 Arduino sketches here: https://github.com/kriswiner/ESP32

I have sketches for the MPU9250+MS5637, MS5637, VEML6040 and will be adding more as I can test other sensors.

@me-no-dev
Copy link
Member

awesome! BTW you should not need to read two bytes anymore :) I found the reason why one byte was not working and I hope I fixed it. So you are welcome to try reading one byte again.

@kriswiner kriswiner reopened this Dec 14, 2016
@kriswiner
Copy link
Author

I tested the BNO055 and it works with the extra read byte also. I will download the latest and try without it next.

@kriswiner
Copy link
Author

Tried the latest with reading no extra byte and this does not work. Reading the extra byte does work.

@hcs-svn
Copy link

hcs-svn commented Dec 14, 2016

With the latest version:
SSD1306 works
LM75 works
BMP180 works
BME280 works only with reading an extra byte

"works" means that not only recognition but also communication works.

Great, it gets better and better. Until this version BMP180 did not work.

That looks good:

BMP180: 1028 hPa  21.90 C
BME280: 1027 hPa  21.60 C  56 rH
LM75: 19.00 C
BMP180: 1028 hPa  21.90 C
BME280: 1027 hPa  21.60 C  56 rH
LM75: 19.00 C
BMP180: 1028 hPa  21.90 C
BME280: 1027 hPa  21.60 C  56 rH
LM75: 19.00 C

@me-no-dev
Copy link
Member

I'm reading the documentation for the chips and I'm looking at the decoded data by my logic analyzer and all looks exactly as it should, so I do not get why the extra byte would be needed here and not on other platforms

@muktillc
Copy link

I am just trying to use the above code which is a clip from your code. I don't seem to be having the clock working.

@kriswiner
Copy link
Author

kriswiner commented Oct 17, 2017 via email

@muktillc
Copy link

the blink program and the internet connectivity works. I am using 10k pull up resistors. Do you recommend me using any other pins for I2C? If I want to use any other pins, I just need to change the number in the wire.begin() to the other pin number, right?

Do I have to change anything else? I was also wondering that how does the ESP32 know that pins are being used for I2C. I don't see that being mentioned anywhere.

@muktillc
Copy link

what is the I2C_Scan() function doing? Do I have first include the function in my code first?

@kriswiner
Copy link
Author

kriswiner commented Oct 17, 2017 via email

@muktillc
Copy link

the board is not busted. I just wrote a code to output 1kHz at pin 22 and it works. I am getting 1kHz output

@kriswiner
Copy link
Author

kriswiner commented Oct 18, 2017 via email

@kriswiner
Copy link
Author

kriswiner commented Oct 18, 2017 via email

@muktillc
Copy link

scl_clock

@muktillc
Copy link

I am getting the above clock. the saw shape clock does not make sense to me.

@kriswiner
Copy link
Author

kriswiner commented Oct 18, 2017 via email

@muktillc
Copy link

no. it is 400kHz. the X axis is set to 20us/div

@muktillc
Copy link

when you say Arduino core, you mean the version of the Arduino IDE, right? I installed it only a week ago.

@kriswiner
Copy link
Author

kriswiner commented Oct 18, 2017 via email

@kriswiner
Copy link
Author

kriswiner commented Oct 18, 2017 via email

@muktillc
Copy link

I am using the DOIT ESP32 development board. The ESP32 Arduino core was downloaded last night.

@kriswiner
Copy link
Author

kriswiner commented Oct 18, 2017 via email

@muktillc
Copy link

I am selecting ESP32 Dev Module.

@muktillc
Copy link

@me-no-dev. Do you have any comments on this issue that I am facing.

@stickbreaker
Copy link
Contributor

@muktillc , Is your pullup really 10K?

Philips Electronics( the inventor of the I2C bus) specifies the pullup current to be from 3mA to 20mA.
Philips AppNote (UM10204)

A 10k pullup with 3.3v only provides 0.33mA.
Your sawtooth waveform is that 0.33mA driving the buss capacitance.
You are trying to run the bus at 400kHz with weak pullups
Change your pullups to 1k for 3.3v

I am using I2C with a WeMos Bluetooth&Battery.
I have both 5v devices and 3.3v devices. I use a Sparkfun Level converter (BSS138 FET) between the two segments.
3.3V segment, 3x 24LC64, 3x 24LC512
5V segment 24LC32, DS1307, 2x MCP23008
I use 3.3k pullups on the 5v segment. The Sparkfun circuit adds a 10k pull so my effective pullup on the 5v bus is 2.48k, which provides 2mA, and another 10k pullup to the 3.3V side, adding 0.33mA so my total pullup is 2.34mA. On the low side, but, much better than 0.33mA.

I am having a different problem with I2C, once in a while, the SDA is driven low continuously from the ESP32. A Wire.begin() will not fix it, but a RESET usually will. I think the Wire library is either leaving SDA as an output and Waiting for the bus to clear(it never does) or the Hardware is glitching. I am decoding the I2C section to see if I can find this problem.

Chuck.

@kriswiner
Copy link
Author

kriswiner commented Oct 18, 2017 via email

@carbonadam
Copy link

Did anyone ever solve the DMP aspect of the mpu6050? with FIFO buffers I know this is a cheapo board but that makes it great for teaching. I get my device to be seen by the i2c but i2devlib doesnt seem to be ported over to esp32 yet. I have a bosch bno055 sitting around perhaps im better off with that for now @kriswiner

@kriswiner
Copy link
Author

kriswiner commented Jan 13, 2018 via email

@carbonadam
Copy link

Yes nice work, I had it working with the Nano but now have fallin in love with the esp32, Ill have to give the bno055 a go then..its sitting here on my desk anyway. I wonder if someone has a working i2Cdevx.h for the esp32? I cant seem to get it to compile under the arduino IDE. It seems others might have but feel like I am chasing my tale here

@kriswiner
Copy link
Author

kriswiner commented Jan 13, 2018 via email

@carbonadam
Copy link

Fantastic work, I will give it a shot:)

Lzw655 pushed a commit to Lzw655/arduino-esp32 that referenced this issue Oct 12, 2023
* Enable FREERTOS_WATCHPOINT_END_OF_STACK only for Xtensa

* Skip collecting optimization flag and esptool.py
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

10 participants