Einbindung MPU6050 mit Xiao ESP32C6

Hallo Zusammen,
ich brauche Unterstützung bei der Einbindung des MPU6050. Testaufbau ist auf einem Breadboard mit dem ESP32C6 verkabelt. Ich habe die Library MPU6050 von Electronic Cats installiert und wollte hier den Testsketch MPU6050_DMP6 laufen lassen, allerdings hängt er sich hier beim Initialisierungsvorgang vom DMP auf

Hat jemand eine Idee, woran das liegen mag?

Dankeschön!

VG
Rainer

Im englischen Teil des Forum müssen die Beiträge und Diskussionen in englischer Sprache verfasst werden.
Deswegen wurde diese Diskussion in den deutschen Teil des Forums verschoben.

mfg ein Moderator.

versuch mal damit ist vom Wolle

#include "Wire.h" 

#define MPU6050_ADDR 0x68 // Alternatively set AD0 to HIGH  --> Address = 0x69

int16_t accX, accY, accZ, gyroX, gyroY, gyroZ, tRaw; // Raw register values (accelaration, gyroscope, temperature)
char result[7]; // temporary variable used in convert function

void setup() {
  Serial.begin(9600);
  Wire.begin();
  Wire.beginTransmission(MPU6050_ADDR);
  Wire.write(0x6B); // PWR_MGMT_1 register
  Wire.write(0); // wake up!
  Wire.endTransmission(true);
}
void loop() {
  Wire.beginTransmission(MPU6050_ADDR);
  Wire.write(0x3B); // starting with register 0x3B (ACCEL_XOUT_H)
  Wire.endTransmission(false); // the parameter indicates that the Arduino will send a restart. 
                               // As a result, the connection is kept active.
  Wire.requestFrom(MPU6050_ADDR, 14, true); // request a total of 7*2=14 registers
  
  // "Wire.read()<<8 | Wire.read();" means two registers are read and stored in the same int16_t variable
  accX = Wire.read()<<8 | Wire.read(); // reading registers: 0x3B (ACCEL_XOUT_H) and 0x3C (ACCEL_XOUT_L)
  accY = Wire.read()<<8 | Wire.read(); // reading registers: 0x3D (ACCEL_YOUT_H) and 0x3E (ACCEL_YOUT_L)
  accZ = Wire.read()<<8 | Wire.read(); // reading registers: 0x3F (ACCEL_ZOUT_H) and 0x40 (ACCEL_ZOUT_L)
  tRaw = Wire.read()<<8 | Wire.read(); // reading registers: 0x41 (TEMP_OUT_H) and 0x42 (TEMP_OUT_L)
  gyroX = Wire.read()<<8 | Wire.read(); // reading registers: 0x43 (GYRO_XOUT_H) and 0x44 (GYRO_XOUT_L)
  gyroY = Wire.read()<<8 | Wire.read(); // reading registers: 0x45 (GYRO_YOUT_H) and 0x46 (GYRO_YOUT_L)
  gyroZ = Wire.read()<<8 | Wire.read(); // reading registers: 0x47 (GYRO_ZOUT_H) and 0x48 (GYRO_ZOUT_L)
  
  Serial.print("AcX = "); Serial.print(toStr(accX));
  Serial.print(" | AcY = "); Serial.print(toStr(accY));
  Serial.print(" | AcZ = "); Serial.print(toStr(accZ));
  // from data sheet:
  Serial.print(" | tmp = "); Serial.print((tRaw + 12412.0) / 340.0);
  Serial.print(" | GyX = "); Serial.print(toStr(gyroX));
  Serial.print(" | GyY = "); Serial.print(toStr(gyroY));
  Serial.print(" | GyZ = "); Serial.print(toStr(gyroZ));
  Serial.println();
  
  delay(1000);
}

char* toStr(int16_t character) { // converts int16 to string and formatting
  sprintf(result, "%6d", character);
  return result;
}

ja der Sketch funktioniert, löst aber mein Problem mit dem DMP nicht. Der ist hier ja gar nicht mit enthalten

Wenn das funktioniert und Daten werden angezeigt stimt was nicht mit der Bibliothek, die ist für ESP32 freigegeben, aber ob die wurde mit C6 gestestet, das ist andere Sache.

vll. jmd einen Workaround?

Irgend verstehe deine Denkweise nicht, wenn es funktioniert dan brache ich was anderes nichtmer nur baue mir was zusammen.
Schaue dir das mall an

Das Thema ist ja nicht die Anzeige von Werten, ich möchte die ja weiter verwenden und da bringt es mir nichts, wenn die nicht kalibriert sind und wenn die Werte wegdriften. Deswegen die Lib, um brauchbare Winkelwerte als Rückgabe zu haben

Ich habe hier zufällig so einen MPU6050 liegen, aber keinen ESP32C6 sondern nur einen C3 der allerdings aktuell verbaut ist (ich ihn nicht verwenden kannst). Ich habe die von dir genannte Library installiert und mit einem Arduino Nano getestet. Damit funktioniert es.

Verkabelung wie hier beschrieben…

  Circuit: In addition to connection 3.3v, GND, SDA, and SCL, this sketch
  depends on the MPU6050's INT pin being connected to the Arduino's
  external interrupt #0 pin.

Evtl. wäre ein Ansatz, deinen MPU und die Library mit einem anderen MC zu probieren. Ggf. auch ein MC ungleich ESP32 um sicher zu gehen, dass der MPU nicht defekt ist?

ich habe es am ESP-32 C3 Mini probiert. Die I2C Anschlüsse hatte ich noch frei und konnte es testen. Damit bekomme ich es nicht hin… Es hängt bei mir in einem Step… auf Interrupt warten, hängt sich aber nicht auf (oder eben genau bei diesem Schritt). Also ich komme ein paar Schritte weiter als du, aber nicht so weit wie mit dem Nano.

ESP32 C3 Mini

Arduino Nano

Wie im Post #5 geschrieben mit ESP32 ohne zusatz soll es funktionieren.
Also ist die Lib nicht für andere ESP32.

Zu Klarstellung, habe kein C6 und keine MPU, vermutlich hat der TO das allerneuste Core für ESP32, wurde mall zum testen downgraden auf 2.0.17 das war zu der Zeit die gängige.
Auf die 3.x.x wurden noch nicht alle Bibliotheken angapast

Ich sehe das ähnlich. Ich habe noch einiges ausprobiert (diverse andere Bibliotheken). Entweder ich bekomme Unmengen an Syntaxfehlern oder keine Ergebnisse. Ich habe keine funktionierende Library gefunden, die den ESP32-C3 Mini und DMP unterstützt.

Was für ESP32 Core nutzt du?

Wenn du mich meinst… die aktuellste. Die Installation geht ja auch nur mit Tricks. Downgraden möchte ich das aktuell nicht. Bin froh, dass ich alles installiert habe und meine aktuellen Projekte nicht gefährden.

Ich habe noch folgendes gefunden… Link ich denke so in die Richtung könnte auf den richtigen Weg führen in Verbindung mit deinem Post, dass ggf. noch nicht alle Libraries angepasst wurden. Das erklärt die verschiedenen Syntaxfehler, die ich bei anderen Libraries erhalte.

Gestern hatte ich auch einen Post, wo die Empfehlung ausgesprochen wurde, den Library-Ersteller direkt zu kontaktieren. Das halte ich für die beste Option.

Letzter Post von meiner Seite. Das naheliegendeste zu versuchen ist, den Codingschnippsel von Wolle mit dem ESP32-C3 Mini zu probieren. Damit funktioniert es. Berechnungen müssen dann selbst ausgeführt werden. Man bekommt die RAW Daten ohne Einbezug des DMP. Schade, aber immerhin ein Teilerfolg.

Wolle

Mit dem Beispielsketch “MPU6050_raw” aus der Lib

Auch wenn es nur ein indirekter Beweis ist, sehe ich damit die Aussagen von @fony bestätigt. Die Library hat ein Problem mit bestimmten ESP32 Modellen. Daher meine Empfehlung… an den Ersteller der Lib wenden, geduldig auf ein Update der Lib warten oder gemäß @fony einen Downgrad z.B. auf 2.0.17 im Boardmanager durchführen. Damit stünden dann ggf. auch weitere Beispiele im Web zur Verfügung, die dann ggf. fehlerfrei compilieren.

@fony für deinen Beitrag zu Wolles Elektronikkiste spendiere ich dir gern ein “Like”. Denn das ist bisher das einzige, was in meinem Fall mit dem ESP32 C3 funktioniert und eine Verwendung des MPU6050 ermöglicht. Danke dafür. Für mich ist das in sofern interessant, als ich in meiner in Arbeit befindlichen Retro-Handheld-Spielkonsole so einen Lagesensor einbauen möchte und ggf. später von einem Arduino Mega auf einen ESP32 C3 wechsele.

PS

Interessanter Link insbesondere der folgende Abschnitt. Ausprobiert. Funktioniert bei mir auch nicht. Siehe dazu vorgenannte Aspekt bzgl. mgl. aktueller Kompatibilitätsprobleme.

Besten Dank für die Mühe, die ihr da reingesteckt habt! Ich schau mir das noch mal alles in Ruhe an :) Schade, dass das nicht so einfach klappt, wie gedacht

Warum versuchst nich die downgraden?
ZB. Sehr viele Grafik Lib funktionieren nicht mit dem Core höher als 2.0.7.

Weil ich das aktuell nicht brauche und nicht möchte. Das kann der TO selbst ausprobieren.

ja werde ich auch testen und berichten :slight_smile:

Sehr gern. Wenn du Infos hast, hilfst du anderen, die ähnliche Probleme haben :slight_smile: