Raspberry PI Multiple I2C Devices: 3 шага
Raspberry PI Multiple I2C Devices: 3 шага
Anonim
Raspberry PI Несколько устройств I2C
Raspberry PI Несколько устройств I2C
Raspberry PI Несколько устройств I2C
Raspberry PI Несколько устройств I2C

Расстроен, потому что вы не можете использовать в своем проекте несколько одинаковых устройств I2C. Нет необходимости использовать медленные мультиплексоры. Последнее ядро raspbian поддерживает создание нескольких шин I2C с использованием контактов GPIO. Это решение очень быстрое.

Шаг 1: некоторые команды оболочки

Некоторые команды оболочки
Некоторые команды оболочки

Подключите одно из ваших устройств i2c, когда у вас Raspberry Pi, запустите Raspberry Pi и запустите

sudo i2cdetect -y 1

Вы увидите таблицу, как на прикрепленном рисунке. Я прикрепил датчик температуры и атмосферного давления BMP280. Адрес i2c - 0x76 согласно таблице. Обратите внимание на этот адрес.

Сделайте это для всех своих устройств i2c.

Шаг 2. Случай первый: устройства I2c имеют одинаковый адрес

Случай первый: устройства I2c имеют одинаковый адрес
Случай первый: устройства I2c имеют одинаковый адрес

Это всегда было проблемным случаем. Шина i2c может обрабатывать несколько устройств, но у них должны быть разные адреса i2c. Некоторые устройства i2c имеют перемычки для установки других адресов i2c, но многие этого не делают. В этом случае вы можете использовать мультиплексор i2c (аппаратный) для вращения i2c SDA (Data) и SCL (Clock), или вы можете создать дополнительную шину i2c или более.

Я создам два дополнительных автобуса, nl bus 3 и 4.

Откройте cli и запустите

cd / boot

sudo nano config.txt

Добавьте следующую строку кода, желательно в раздел, где включены spi и i2c.

dtoverlay = i2c-gpio, bus = 4, i2c_gpio_delay_us = 1, i2c_gpio_sda = 23, i2c_gpio_scl = 24

Эта линия создаст дополнительную шину i2c (шина 4) на GPIO 23 как SDA и GPIO 24 как SCL (GPIO 23 и 24 по умолчанию)

Также добавьте следующую строку, чтобы создать шину i2c 3

dtoverlay = i2c-gpio, bus = 3, i2c_gpio_delay_us = 1, i2c_gpio_sda = 17, i2c_gpio_scl = 27

GPIO 17 будет SDA, а GPIO 27 будет SCL для шины 4 i2c.

Нажмите кнопку X, чтобы выйти.

Примечание о нумерации и порядке автобусов:

Никогда не используйте шину 0 и 2, она используется для других вещей на плате, таких как eprom на шляпах и т. Д.

Для выпуска raspbian в апреле 2019 года:

Вы всегда должны начинать с самой высокой шины (в данном случае с шины 4) в файле config.txt и переходить к самой низкой шине (шина 3).

Самый низкий автобус всегда должен быть автобусом 3.

Если вам нужно 5 дополнительных автобусов, автобусы должны идти в порядке следования 7, 6, 5, 4, 3.

Этой проблемы с заказом автобусов не было, когда изначально было написано это руководство. Похоже, что в ядро внесены изменения.

Выключите свой PI, выключите его. Подключите свои устройства i2c к шине 4 (SDA к GPIO 23 и SCL к GPIO 24), а другие к шине i2c 3 (SDA к GPIO 17 и SCL к GPIO 27).

Включите пи.

Запустить:

sudo i2cdetect -l (нижний регистр L)

Теперь вы увидите, что шина i2c 3 и 4 также указаны в списке. Также запустите:

sudo i2cdetect -y 3

sudo i2cdetect -y 4

Теперь вы можете использовать свой датчик на своем языке программирования. Не забудьте указать правильные шины i2c.

Attach - это пример популярного датчика температуры и давления BMP280. Ни один мультиплексор не может так быстро прочитать 2 BMP280.

Также прилагается пример 2 датчиков Sensirion SDP 810. Опять же, работает намного быстрее, чем мультиплексор, который я использовал в прошлом.

Я создал код на Python для чтения двух новых BMP388 от adafruit.

Я также могу добавить другие датчики в будущем на

Шаг 3: Случай 2: разные адреса I2c

Простой. i2c - это автобус. Назначение шины - связываться с несколькими устройствами. Подключите устройства параллельно к одной шине i2c. Вы можете воспользоваться автобусом один.

Запустить:

sudo i2cdetect -y 1

Вы увидите список устройств.

Рекомендуемые: