Hallo zusammen,
endlich habe ich mich hier mal angemeldet. Das soll ja so nicht sein, dass ich nur vom tollen Archiv und den vielen kompetenten Beiträgen profitiere und nichts beisteuere. Mein Bier teile ich schließlich auch immer. Also meistens ;-)
Da habe ich auch gleich was, wonach ich mir einen Wolf gesucht habe:
Im Konfig-Modus war der Tilt immer auf 0°, immer
Acc Test Connection ERROR, aber per MQTT wurden meist sinnvolle Werte für Gravity und Tilt ausgegeben. Meist deshalb, weil das eben nicht immer ging. Aber nix kalte Lötstelle oder so - der langen Rede kuzer Sinn: mein MPU6050 war standardmäßig im Sleep-Modus. Wahrscheinlich hätten viele MPU6050 in der Geschichte der iSpindel nicht entsorgt werden müssen, und die Serienstreuung erklärt sich evtl. durch dieses nicht bei jedem Modul gesetzte "Sleep-Mode-Bit".
Ich habe Firmware.bin aus den Sourcen neu kompiliert mit folgender Änderung in iSpindel.cpp:
bool testAccel()
{
uint8_t res = Wire.status();
if (res != I2C_OK)
CONSOLELN(String(F("I2C ERROR: ")) + res);
//SleepMode gem.
http://www.i2cdevlib.com/devices/mpu6050#help deaktivieren:
accelgyro.setSleepEnabled(false);
bool con = accelgyro.testConnection();
if (!con)
CONSOLELN(F("Acc Test Connection ERROR!"));
return res == I2C_OK && con == true;
}
void initAccel()
{
// join I2C bus (I2Cdev library doesn't do this automatically)
Wire.begin(D3, D4);
Wire.setClock(100000);
Wire.setClockStretchLimit(2 * 230);
testAccel();
// init the Accel
accelgyro.initialize();
//SleepMode gem.
http://www.i2cdevlib.com/devices/mpu6050#help deaktivieren:
accelgyro.setSleepEnabled(false);
Lösung lt.
http://www.i2cdevlib.com/devices/mpu6050#help
I connected my MPU-6050 breakout board and it seems to be responding correctly, but all I get are zeros from the accel/gyro sensor registers! What's wrong?
This is a very common problem, and fortunately one that is very easy to fix. When the device powers on, it starts up in sleep mode, which must be explicitly disabled in order to begin normal operations. To do this, simply write a 0 to the PWR_MGMT_1 (0x6B) register. If you are using the I2Cdev MPU6050 class, calling _device_.setSleepEnabled(false) will set the correct bit for you.
Schönen Abend noch!