Внимание: во всех версиях одноплатных компьютеров Raspberry Pi обнаружен аппаратный баг (https://elinux.org/BCM2835_dat...), который препядствует корректной работе шины I2C. При этом шина работет, но иногда получает некорректные значения или может зависнуть. В качестве решения предлагаем отключить аппаратную шину I2C, воспользовавшись данной статьёй и включить программную. К шине SPI это не относится.
Ссылка на гитхаб: обсуждение бага на Raspberry Pi 5: https://github.com/raspberrypi...
tl;dr: для отключения аппаратной шины I2C закомментируйте строку dtparam=i2c_arm=on
в файле /boot/firmware/config.txt
:
#dtparam=i2c_arm=on
для включения программной шины I2C добавьте следующую строку в файл /boot/firmware/config.txt
:
dtoverlay=i2c-gpio,bus=3
После этого модули необходимо подключать согласно следующей таблице:
Вывод модуля | Вывод Raspberry |
---|---|
SDA | GPIO 23 |
SCL | GPIO 24 |
Для использования программной шины в библиотеках iarduino необходимо обновить библиотеки и передать параметр с названием новой шины в конструктор. На примере библиотеки pyiArduinoI2Cdsl:
# импортируем библиотеку from pyiArduinoI2Cdsl import * # создаём объект датчика с указанием шины i2c dsl = pyiArduinoI2Cdsl(bus="/dev/i2c-3")
Для проверки подуключенных устройств i2c с помощью утилиты i2cdetect
так же необходимо указывать соответсвующую шину:
pi@raspberrypi:~ $ i2cdetect -y 3
Оригинальная статья про включение аппаратных шин:
Общие сведения:
Для работы с шинами I2C и SPI на Raspberry их необходимо включить (по умолчанию они выключены). Сделать это можно в графической среде или через терминал.
Для начала рассмотрим как это сделать в графической среде.
Включение в графической среде:
Нажимаем иконку малины в правом верхнем углу экрана и выбираем параметры -> Raspberry Pi Configuration:
Откроется окно настроек, выбираем вкладку Interfaces:
Во вкладке Interfaces выбираем enable (включено) для I2C и SPI:
Здесь необходимо выбрать "Disable", если Вы включаете программную шину I2C.
Нажимаем ОК. Интерфейс включён!
Настройка в терминале:
Настройка в терминале может понадобится, если мы подключаемся к Raspberry удалённо. Как работать с Raspberry по локальной сети можно узнать тут. Для настройки в терминале необходимо ввести с клавиатуры sudo raspi-config
и нажать enter:
Откроется меню настроек, выбираем 5 Interfacing Options, нажимаем enter:
Откроется меню выбора интерфейсов, выбираем P5 I2C или P4 SPI, в зависимости от того, что мы хотим включить:
На вопрос отвечаем <Да>:
Здесь необходимо ответить <Нет>, если Вы включаете программную шину I2C:
Интерфейс включён!
Обсуждение