Внимание: во всех версиях одноплатных компьютеров Raspberry Pi обнаружен аппаратный баг (https://elinux.org/BCM2835_dat...), который препядствует корректной работе шины I2C. При этом шина работет, но иногда получает некорректные значения или может зависнуть. В качестве решения предлагаем отключить аппаратную шину I2C, воспользовавшись данной статьёй и включить программную. К шине SPI это не относится.
tl;dr: для отключения аппаратной шины I2C закомментируйте строку dtparam=i2c_arm=on
в файле /boot/config.txt
:
#dtparam=i2c_arm=on
для включения программной шины I2C добавьте следующую строку в файл /boot/config.txt
:
dtoverlay=i2c-gpio,i2c_gpio_sda=2,i2c_gpio_scl=3,i2c_gpio_delay_us=2,bus=1
Оригинальная статья про включение аппаратных шин:
Общие сведения:
Для работы с шинами 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:

Интерфейс включён!

Обсуждение