ESP32 未连接到 MPU9500/6500

ESP32 not connecting to MPU9500/6500

提问人:redib 提问时间:11/17/2023 更新时间:11/17/2023 访问量:26

问:

我目前使用 ESP-32s WROOM 开发板 v1.1 作为控制模块。我已使用以下连接将其作为 IMU 连接到 MPU9250/6500: 作为 ESP-32s WROOM 开发板 v1.1 的代码,我使用了 Arduino IDE 2.2.1(ALKS ESP32 作为开发板)和以下代码:Diagram of connections between the MPU9500/6500 and ESP32

    #include "MPU9250.h"

    // an MPU9250 object with the MPU-9250 sensor on I2C bus 0 with address 0x68
    MPU9250 IMU(Wire, 0x68);
    int status;

    void setup() {
      // serial to display data
      Serial.begin(115200);
      while (!Serial) {}

      // start communication with IMU
      status = IMU.begin();
      if (status < 0) {
        Serial.println("IMU initialization unsuccessful");
        Serial.println("Check IMU wiring or try cycling power");
        Serial.print("Status: ");
        Serial.println(status);
        while (1) {}
      }
    }

    void loop() {
      // read the sensor
      IMU.readSensor();
      // display the data
      Serial.print(IMU.getAccelX_mss(), 6);
      Serial.print("\t");
      Serial.print(IMU.getAccelY_mss(), 6);
      Serial.print("\t");
      Serial.print(IMU.getAccelZ_mss(), 6);
      Serial.print("\t");
      Serial.print(IMU.getGyroX_rads(), 6);
      Serial.print("\t");
      Serial.print(IMU.getGyroY_rads(), 6);
      Serial.print("\t");
      Serial.print(IMU.getGyroZ_rads(), 6);
      Serial.print("\t");
      Serial.print(IMU.getMagX_uT(), 6);
      Serial.print("\t");
      Serial.print(IMU.getMagY_uT(), 6);
      Serial.print("\t");
      Serial.print(IMU.getMagZ_uT(), 6);
      Serial.print("\t");
      Serial.println(IMU.getTemperature_C(), 6);
      delay(100);
    }

这是来自此处的代码,使用metioned库(我已经安装)。 现在,当我在 ESP32 上运行此代码时,串行监视器中返回以下结果:

    IMU initialization unsuccessful
    Check IMU wiring or try cycling power
    Status: -1

这显然是一个问题,这就是我寻求帮助的原因。因为如果我理解正确,ESP32 无法连接到 MPU9250/6500。(是的,我已经检查了接线是否正确)

我尝试了以下方法:

Arduino ESP32 微处理器

评论

0赞 jasonharper 11/17/2023
I2C 需要两条信号线上的上拉电阻才能工作。这两块板板是否内置了这些功能?
0赞 hcheung 11/17/2023
如果运行 I2C 扫描仪草图,它是否能够检测到 i2c 地址0x68的 MPU 芯片?
0赞 redib 11/20/2023
@hcheung,好主意!我确实运行了一个 I2C 扫描仪,并在地址0x68检测到了一个设备。(扫描仪取自 esp32.com/viewtopic.php?t=4742)也许代码的初始化是错误的?
0赞 redib 11/20/2023
@jasonharper,似乎是这样。在第一个教程中,使用了该图,其中显示了两个上拉电阻。(需要明确的是,这些也出现在我的板上)

答:

0赞 redib 11/26/2023 #1

我想通了。因此,事实证明,由于某种原因,使用 初始化 I2C 协议不会使用标准的 SDA 和 SCL 引脚。为此,您必须使用将 SDA 和 SCL 引脚设置为 21 和 22 的线路初始化 I2C 通信。 要实现此目的,您需要:Wire.begin()Wire.begin(21, 22)

TwoWire MainWire = TwoWire(0);
MPU9250 IMU = MPU9250(MainWire, 0x68);

在代码的开头。以及设置中的以下内容:

MainWire.begin(21,22); 
IMU.begin();