Оглавление:
Видео: Raspberry PI Multiple I2C Devices: 3 шага
2025 Автор: John Day | [email protected]. Последнее изменение: 2025-01-13 06:58
Расстроен, потому что вы не можете использовать в своем проекте несколько одинаковых устройств 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 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
Вы увидите список устройств.