Как переключаться между несколькими датчиками BMP180?

У меня есть шесть датчиков BMP180 для измерения температуры и давления. Проблема в том, что я могу получить значение от одного датчика, но мне нужны значения от всех шести датчиков, используя одну плату Arduino Mega. Как мне это сделать? Я уже пытался включить каждый датчик с помощью digitalWrite, но это не сработало. Если у вас есть решение, можете ли вы также предоставить код для него?

, 👍1

Обсуждение

что ты пробовал? ... какие проблемы у вас были?, @jsotola


2 ответа


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

1

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

Итак, знайте, что у вас есть два пути:

  • Вы можете использовать программную библиотеку I2C и определить один порт I2C для каждого BMP. Для этого потребуется 12 цифровых контактов, и вам нужно найти подходящую библиотеку, которая поддерживает несколько экземпляров. Из-за временного характера шины I2C вы, скорее всего, сможете обслуживать только одну шину за раз.

  • Вы можете купить чип мультиплексора для обеих сигнальных линий. Затем вы можете переключить линии SCL и SDA на каждый BMP. Для этого вам понадобятся микросхемы мультиплексора, 2 контакта для I2C и 3 цифровых контакта для ввода микросхем мультиплексора (предполагается 8-канальный мультиплексор)

,

как я могу определить порты портов для каждого bmp, я проверил библиотеку I2C на github, но я немного запутался. Также какую библиотеку я должен использовать, поскольку я уже использую библиотеку bmp180, и я не думаю, что она поддерживает несколько экземпляров., @newbie

Я не знаю, что вы подразумеваете под «библиотекой I2C на github». На github наверняка есть много библиотек I2C. Вы не можете использовать библиотеку Wire, так как это аппаратная библиотека I2C, а не программная библиотека I2C. Я не использовал такую библиотеку, поэтому не могу предложить хорошую. Я погуглил «программное обеспечение github arduino i2c» и нашел [это](https://github.com/felias-fogg/SoftI2CMaster) в первых нескольких результатах. Вам нужно попробовать самому и посмотреть, какая библиотека дает вам нужный функционал., @chrisl

Возможно, вы не найдете библиотеку, которая может иметь несколько экземпляров, но в которой вы можете многократно начинать() библиотеку с разными выводами, каждый раз, когда вы хотите связаться с одним из BMP., @chrisl

спасибо, Крис, я посмотрю на это., @newbie


1

Если у вас есть n-MOSFET, простым мультиплексным решением будет: SCL напрямую от главного устройства ко всем подчиненным устройствам. SDA от ведущего к истоку MOSFET (для каждого подчиненного по одному MOSFET), сток MOSFET с подтягивающим резистором (например, 4,7 кОм) будет сигналом SDA. Ворота MOSFET для выбора ведомых (активный <-> Gate=высокий уровень). Убедитесь, что ваш МОП-транзистор включается в зависимости от используемых вами уровней напряжения.

,