I2C на ESP32 или Arduino: какое максимальное количество ведомых устройств, использующих датчик BMP388

BMP388: максимальное количество подчиненных адресов в режиме I2C

В режиме I2C с одним мастером, сколько BMP388 в качестве ведомого можно подключить к Arduino UNO? Из таблицы я понимаю, что в режиме I2C возможны только 2 адреса (0x76 или 0x77), обозначенные битом 7 в адресе устройства и настроенные через порт SDO (контакт 5) на землю или плюс. В режиме SPI, как я надеюсь хорошо понять из таблицы, это до 128 адресов BMP388.

Мои вопросы: - Хорошо ли я понимаю, что в режиме I2C максимальное количество ведомых устройств - два? -Конечно, я могу подключить множество BMP388 последовательно к Arduino, но как я могу обращаться к ним в режиме I2C? Или мне следует использовать режим SPI? -Есть ли какая-либо документация, кроме таблицы данных, которая поясняет это? -Есть ли пример кода Arduino для ситуации с I2C?


person Barry Jobsis    schedule 04.10.2019    source источник
comment
Вы можете использовать мультиплексоры или переключатели I²C для подключения многих датчиков. Если у них есть что-то вроде вывода включения, вы можете подключить их с помощью GPIO.   -  person 0andriy    schedule 07.10.2019


Ответы (1)


Вы правильно поняли адресацию i2c. Для BMP388 может быть только 2 адреса, управляемых выводом SDO в режиме i2c.

Если вы хотите использовать более двух модулей BMP388 с одним микроконтроллером, используйте SPI. Вы можете использовать столько модулей BMP388, сколько у вас есть выводов GPIO на микроконтроллере для управления выводом Slave Select.

Это пример из библиотеки Adafruit BMPxxx.

Вот

Позже в коде вы можете использовать каждый объект библиотеки Adafruit BMPxxx для получения показаний.

person hmxmghl    schedule 07.10.2019
comment
Можно подключить сколько угодно. Существует множество решений, которые в основном представляют собой мультиплексоры или коммутаторы I²C. Надежность этого решения, конечно, под вопросом. - person 0andriy; 07.10.2019
comment
Спасибо за ответ на мой вопрос о I2C. Это мне очень помогло. Также я тестировал SPI с помощью вышеупомянутого примера, но для меня не было возможности обратиться ко второму BMP388, потому что я не мог создать решение для кодирования, чтобы активировать другой вывод CS в этом коде. Как я могу активировать второй, третий и т. Д. Вывод CS в этом примере? - person Barry Jobsis; 10.10.2019
comment
Вам необходимо создать объекты для каждого BMP388, передавая каждому объекту соответствующий вывод CS. Как это: Adafruit_BMP3XX bmp_one (BMP1_CS); Adafruit_BMP3XX bmp_two (BMP2_CS); - person hmxmghl; 11.10.2019
comment
@BarryJobsis Если это сработало, отметьте ответ как принятый, чтобы помочь другим пользователям определить полезный ответ. - person hmxmghl; 19.11.2019
comment
Ответ ПРИНЯТ - person Barry Jobsis; 20.11.2019
comment
Вот как отметить его как принятый: - Выберите один ответ, который, по вашему мнению, является лучшим решением вашей проблемы. - Чтобы пометить ответ как принятый, нажмите на галочку рядом с ответом, чтобы переключить его с серого на заполненный. - person hmxmghl; 20.11.2019