Считывание нескольких датчиков MPU 9250 с помощью мультиплексора TCA9548A
Я пытаюсь считывать несколько датчиков MPU 9250 с помощью мультиплексора TCA9548A в ESP 32 и Arduino IDE. Кто-нибудь сделал это успешно?
Я новичок в области кодирования Arduino. Я пытаюсь отредактировать код в этом руководстве для MPU 9250 (https://www.bluedot.space/tutorials/connect-multiple-sensors-using-i2c-multiplexer /). Я сталкиваюсь с проблемами с библиотеками и командами при переходе с BME 280 на MPU 9250. Как только я перехожу на MPU 9250 и пытаюсь вызвать экземпляр MPU9250 IMU_0, я получаю сообщение об ошибке "нет соответствующей функции для вызова 'MPU9250", которое, как я понимаю, связано с тем, что библиотека, которую я использовал, не поддерживает вызов. Я не могу найти альтернативную библиотеку или команду. Как с этим можно разобраться?
#include <Wire.h>
#include <MPU9250.h>
MPU9250 mpu_0;
MPU9250 mpu_1;
MPU9250 mpu_2;
MPU9250 mpu_3;
#define TCAADDR 0x70
void tcaselect(uint8_t i) {
if (i > 7) return;
Wire.beginTransmission(TCAADDR);
Wire.write(1 << i);
Wire.endTransmission();
}
void setup() {
Serial.begin(9600);
Wire.begin();
Serial.println(F("##############################"));
Serial.println(F("Starting Initialization"));
Serial.println(F("##############################"));
//*************INITIALIZING FIRST SENSOR*******************************
tcaselect(0);
if (mpu_0.begin() != 0x68)
{ Serial.print(F("MPU.1 detected?\t")); Serial.println(F("No"));}
else
{ Serial.print(F("MPU.1 detected?\t")); Serial.println(F("Yes"));}
//**********************************************************************
//*************INITIALIZING SECOND SENSOR*******************************
tcaselect(1);
if (mpu_1.begin() != 0x68)
{ Serial.print(F("MPU Nr.2 detected?\t")); Serial.println(F("No"));}
else
{ Serial.print(F("MPU Nr.2 detected?\t")); Serial.println(F("Yes"));}
//*********************************************************************
//**********************************************************************
Serial.println();
Serial.println(F("##############################"));
Serial.println(F("Initialization Finished"));
Serial.println(F("##############################"));
Serial.println();
Serial.println();
}
@Ajay Raj, 👍2
Обсуждение1 ответ
Лучший ответ:
Вам нужно адаптировать пример, которому вы следуете, чтобы следить за тем, как библиотека MPU выполняет свою конструкцию и настройку.
Просматривая документацию для библиотеки MPU, которую вы используете, вы должны изменить определения на:
MPU9250 mpu_0(Wire, 0x68); // 0x69, если вы подняли AD0 высоко
Затем, если вы прочтете дальше раздел "Общие функции настройки", вы увидите, что функция настройки этой библиотеки
имеет следующее поведение:
Эта функция возвращает положительное значение при успешной инициализации и возвращает отрицательное значение при неудачной инициализации
Так что вам тоже нужно это адаптировать:
Serial.print(F("MPU.1 detected?\t"));
if (mpu_0.begin() < 0) { // в примерах предполагается, что ноль тоже в порядке
Serial.println(F("No"));
} else {
Serial.println(F("Yes"));
}
Вы избавите себя от некоторых проблем, если тоже будете использовать массив для своих датчиков.
MPU9250 mpus[] = { MPU9250(Wire, 0x68), MPU9250(Wire, 0x68) };
const int num_mpus = sizeof(mpus)/sizeof(mpus[0]);
Затем ваша инициализация может быть выполнена с помощью цикла:
for (int i = 0; i < num_mpus; ++i) {
tcaselect(i);
if (mpus[i].begin() < 0) {
// ...
}
}
И вы можете делать аналогичные вещи для взаимодействия с датчиком. например:
for (int i = 0; i < num_mpus; ++i) {
tcaselect(i);
mpus[i].readSensor();
Serial.println(mpus[i].getAccelX_mss());
// ...
}
Большое вам спасибо... Я бы попробовал их реализовать.., @Ajay Raj
- Несколько mpu9250 с использованием tca9548a с esp32
- Синхронизация нескольких MPU9250
- Использование MPU6050 с ESP32 Cam - MPU Не обнаружено
- LILYGO TTGO T-Display не может обнаружить акселерометр, гироскоп и датчик температуры MPU 6050
- Трудности получения значений угла от MPU6050.
- Подключение катода диода к выходу мультиплексора
- Можно ли получить значения только во время вибрации/движения с акселерометра (ADXL335/MPU6050)?
- esp32, platformio A fatal error occurred: Packet content transfer stopped (received 8 bytes) *** [upload] Error 2
"Я сталкиваюсь с * проблемами *". Какие проблемы?, @timemage
Ваш код почти невозможно прочитать. Вы можете рассмотреть возможность редактирования своего вопроса и использования средств форматирования кода на странице., @jwh20
Какую библиотеку MPU9250 вы используете? Вы смотрели на его примеры, чтобы исправить свой код?, @Mat
Я не вижу никакого вопроса, который был бы задан, @jsotola
Я использую библиотеку MPU 9250 из системы bolder-flights. В руководстве по мультиплексору они использовали BME280 и BlueDot_BME280library. Как только я перехожу на MPU 9250 и пытаюсь вызвать экземпляр MPU9250 IMU_0, я получаю сообщение об ошибке "нет соответствующей функции для вызова 'MPU9250", которое, как я понимаю, связано с тем, что библиотека, которую я использовал, не поддерживает вызов. Я не могу найти альтернативную библиотеку или команду. Какие альтернативы я могу использовать или как я могу добиться одновременного снятия показаний с нескольких MPU9250 с помощью мультиплексора? Спасибо, @Ajay Raj