Несколько устройств 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);
}
@Tobias Guo, 👍0
1 ответ
Лучший ответ:
I2C-это многоадресная шина. Это означает, что один набор контактов I2C предназначен для подключения нескольких устройств, если каждое устройство имеет уникальный адрес.
На Uno дискретные контакты I2C и контакты A4/A5 I2C являются одними и теми же контактами. Дискретные контакты представляют собой попытку обеспечить кроссплатформенное стандартное расположение сигналов I2C для экранов.
- Изменение адреса I2C MPU-6050
- MPU6050 не выдает выход
- Использование MPU-6050 без I2C
- Почему Wire.write дважды?
- Мультиплексор Adafruit MPU-6050 и adafruit I2C
- запрос члена "X" в чем-то, кроме структуры или союза
- MPU-6050 с Arduino – вскрытие
- Код показывает одинаковые углы для всех трех осей гироскопа MPU
Итак, поскольку у меня нет возможности подключить несколько устройств к контактам A4/A5, означает ли это, что я могу подключить один IMU к контактам A4/A5 и один к дискретным контактам, и он будет функционировать до тех пор, пока я дам им разные адреса? Спасибо за вашу помощь!, @Tobias Guo
Да. За исключением того, что вы обычно не "даете" адреса устройств I2C (если только вы не создаете их самостоятельно) - обычно вы можете выбирать между несколькими адресами, используя специальные контакты на устройствах I2C. Если вы не можете выбрать разные адреса, у вас есть возможность "мультиплексора I2C" для выбора между ними., @Majenko
Добавляя в Majenko, вы можете найти A1, A2, A3 на своем устройстве I2C, обычно они не подключены, припаивая их (по отдельности), вы можете изменить адрес своего устройства, который затем можете изменить в своем коде, @Coder9390