Рекомендации по подключению двух датчиков с соединениями SCL и SDA
У меня есть два разных датчика с соединениями SCL и SDA, которые я пытаюсь подключить к Arduino nano. Насколько я понимаю, подключение обоих этих датчиков к контактам A5 и A4 не имеет никакого смысла, учитывая, что мне нужно постоянно собирать данные с обоих датчиков. Более того, нет других контактов с такой же функциональностью, как A5 и A4. Я новичок в изучении микроконтроллеров, но мне кажется, что наилучшей практикой здесь будет использование двух Arduino nano. Это единственный способ или есть другой способ, о котором я не знаю?
@nova, 👍0
Обсуждение1 ответ
Суть шины I2C заключается в том, чтобы обеспечить возможность подключения нескольких датчиков или устройств, если они имеют разные адреса I2C. Адреса обычно встроены в деталь, и часто в них предусмотрена возможность выбора адреса из диапазона.
Несмотря на то, что вы не можете одновременно собирать данные сразу с двух датчиков, вы, безусловно, можете запросить их в быстрой последовательности. Вам необходимо подключить SDA, SCL, заземление и +5 В к каждому датчику и Arduino.
Ваш код будет делать что-то вроде:
- Датчик запросов по адресу 42
- Датчик запросов по адресу 43
- Что-то сделать с данными
- Подождите немного, прежде чем делать это снова.
Общую информацию об I2C можно найти в Википедии, а также у меня есть страница об I2c, которая может вам помочь.
Обратите внимание, что вам также потребуется подтягивающий резистор как на SDA, так и на SCL (то есть два резистора), типичное значение будет 4,7 кОм (подсоедините резисторы 4,7 кОм между SDA/SCL и линией +5 В).
- MAX30100 не работает
- Arduino Nano BME280 странные значения
- Использование библиотеки емкостных датчиков с мультиплексором 74HC4067
- Проблема с сигналом датчика пульса
- Считывание значений с емкостного сенсорного датчика TTP229 на arduino
- Подключение двух Arduino через I2C, когда контакты I2C A4/A5 уже используются.
- Два датчика расхода, один ESP32, ЖК-дисплей и/или Arduino
- Arduino nano 33 ble vs ble sense. Потребляемая мощность и т.д.
вы даже не можете непрерывно собирать данные с одного датчика... данные передаются последовательно... всегда есть задержка между показаниями, @jsotola
о каких датчиках вы говорите? ... какую пропускную способность вы ожидаете?, @jsotola
[I2C](https://en.wikipedia.org/wiki/I²C) — это шина, позволяющая подключать несколько датчиков (при условии, что они имеют разные адреса) к одной и той же шине с использованием двух проводов. Д, @hcheung
@jsotola У меня два разных датчика температуры. Под непрерывным я имел в виду, что мне нужно собирать данные каждые 10 мс., @nova
@hcheung, но не будут ли данные, которые я собираю, перемешанной версией данных, собранных разными датчиками?, @nova
Сначала прочитайте википедию I2C, чтобы понять, как работает I2C. В любой момент хост I2C (главный) общается с одним клиентом I2C (ведомым), то есть те датчики I2C, которые не были адресованы, не будут мешать обмену данными по шине. Лучший способ для вас, чтобы попробовать его в дополнение к чтению., @hcheung
@hcheung, не будет ли это означать, что я не могу получить одновременные данные с двух датчиков, или разница во времени не будет значительной? Кроме того, что вы подразумеваете под «использованием двух проводов»?, @nova
Определите «одновременный», если вы запускаете часы I2C на частоте 400 кГц, для отправки каждого бита требуется 1/400000 = 2,5 мкс (микросекунды). Чтение датчика температуры, вероятно, займет около 7,5 мкс, что более чем достаточно для считывания его каждые 10 миллисекунд., @hcheung
В вашем вопросе недостаточно подробностей для хорошего ответа. Пожалуйста, **отредактируйте вопрос** (не отвечайте в комментарии) и добавьте следующую информацию: **(1)** Каковы номера деталей двух датчиков? **(2)** Насколько они удалены от Arduino и друг от друга. **(3)** Как часто вы хотите собирать данные?, @Nick Gammon