Как переключаться между несколькими датчиками BMP180?
У меня есть шесть датчиков BMP180 для измерения температуры и давления. Проблема в том, что я могу получить значение от одного датчика, но мне нужны значения от всех шести датчиков, используя одну плату Arduino Mega. Как мне это сделать? Я уже пытался включить каждый датчик с помощью digitalWrite
, но это не сработало. Если у вас есть решение, можете ли вы также предоставить код для него?
@newbie, 👍1
Обсуждение2 ответа
Лучший ответ:
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
Если у вас есть n-MOSFET, простым мультиплексным решением будет: SCL напрямую от главного устройства ко всем подчиненным устройствам. SDA от ведущего к истоку MOSFET (для каждого подчиненного по одному MOSFET), сток MOSFET с подтягивающим резистором (например, 4,7 кОм) будет сигналом SDA. Ворота MOSFET для выбора ведомых (активный <-> Gate=высокий уровень). Убедитесь, что ваш МОП-транзистор включается в зависимости от используемых вами уровней напряжения.
- Как разделить входящую строку?
- Как использовать SPI на Arduino?
- Как сбросить или отформатировать Arduino?
- Управление скоростью вентилятора с помощью библиотеки Arduino PID
- Arduino Due vs Mega 2560
- Как получить уникальный идентификатор для всех плат Arduino?
- Почему я получаю avrdude: stk500v2_ReceiveMessage(): timeout error when uploading to Arduino Mega?
- Тайм-аут связи Arduino Mega с ошибкой программатора
что ты пробовал? ... какие проблемы у вас были?, @jsotola