Несколько устройств I2C, подключенных к одному Arduino Uno?

Возможно ли подключить более одного устройства I2C к Arduino Uno? Я знаю, что контакты SCL и SDA находятся на аналоговых выводах A4 и A5 соответственно, но есть также два вывода с надписью SCL и SDA, расположенные рядом с выводом AREF на другой стороне платы. Означает ли это, что я могу подключить несколько устройств к одной плате, и если да, то как?

Для контекста, в настоящее время я работаю над созданием роботизированной руки, которая соответствует своим движениям движениям моей руки (я полагаю, что это называется роботом телеприсутствия). Для этого я хотел использовать пару IMU (в частности, MPU-6050) для записи движений моего запястья и плеча. Используя библиотеку TinyMPU6050 Габриэля Милана, я уже смог установить связь с одним IMU, но со вторым у меня проблемы. Я уже общаюсь с arm через SPI-интерфейс Uno, поэтому я не могу использовать его для связи со вторым IMU, хотя я знаю, что это возможно.

Я знаю, что подобные вопросы задавались и раньше, но ни на один из вопросов, которые я смог найти, не было точных ответов, в которых я нуждался, поэтому я подумал, что все равно задам. Этот код, который у меня сейчас есть, работает для одного IMU, но я не знаю, с чего начать добавлять второй (если это вообще возможно). Любая помощь, которую я смогу получить, будет мне очень признательна. Ваше здоровье!

#include <TinyMPU6050.h>

MPU6050 IMU_1(Wire);

void setup() {
  Serial.begin(9600);

  //initializing and calibrating `IMU_1`
  IMU_1.Initialize();
  Serial.println("Calibrating...");
  IMU_1.Calibrate();
  Serial.println("Calibrated");

  while (!Serial) {
    //пустой цикл while
  }
}

void loop() {
  IMU_1.execute();
  Serial.println();
  Serial.print("X angle = ");
  Serial.println(IMU_1.GetAngX());
  Serial.print("Y angle = ");
  Serial.println(IMU_1.GetAngY());
  Serial.print("Z angle = ");
  Serial.println(IMU_1.GetAngZ());

  delay(1000);
}

, 👍0


1 ответ


Лучший ответ:

3

I2C-это многоадресная шина. Это означает, что один набор контактов I2C предназначен для подключения нескольких устройств, если каждое устройство имеет уникальный адрес.

На Uno дискретные контакты I2C и контакты A4/A5 I2C являются одними и теми же контактами. Дискретные контакты представляют собой попытку обеспечить кроссплатформенное стандартное расположение сигналов I2C для экранов.

,

Итак, поскольку у меня нет возможности подключить несколько устройств к контактам A4/A5, означает ли это, что я могу подключить один IMU к контактам A4/A5 и один к дискретным контактам, и он будет функционировать до тех пор, пока я дам им разные адреса? Спасибо за вашу помощь!, @Tobias Guo

Да. За исключением того, что вы обычно не "даете" адреса устройств I2C (если только вы не создаете их самостоятельно) - обычно вы можете выбирать между несколькими адресами, используя специальные контакты на устройствах I2C. Если вы не можете выбрать разные адреса, у вас есть возможность "мультиплексора I2C" для выбора между ними., @Majenko

Добавляя в Majenko, вы можете найти A1, A2, A3 на своем устройстве I2C, обычно они не подключены, припаивая их (по отдельности), вы можете изменить адрес своего устройства, который затем можете изменить в своем коде, @Coder9390