Гид по технологиям

SPI и I2C на Raspberry Pi: включение, проверка и примеры

7 min read Raspberry Pi Обновлено 19 Apr 2026
SPI и I2C на Raspberry Pi: включение и использование
SPI и I2C на Raspberry Pi: включение и использование

Распиновка SPI и I2C на Raspberry Pi

Raspberry Pi — универсальная платформа: от медиаплееров до промышленных IoT‑решений. При подключении внешних компонентов часто используются протоколы SPI и I2C. Они экономят контакты GPIO и упрощают работу с датчиками, дисплеями и считывателями карт.

В этой статье вы найдёте понятные определения, пошаговое включение, команды проверки, примеры проектов, диагностику неполадок и практические чек‑листы.

Краткие определения

  • SPI — последовательный интерфейс с отдельными линиями для тактового сигнала (SCLK), передачи (MOSI) и приёма (MISO) плюс выбор ведомого (CE/SS). Хорош для высокоскоростной передачи и одно‑мастерных топологий.
  • I2C — двухпроводная шина (SDA и SCL), где каждый устройство имеет 7‑битный адрес. Удобна, когда нужно подключить много устройств при ограниченном числе выводов.

Почему выбирать SPI или I2C: быстрая сводка

  • Выберите SPI, если нужна скорость и простое по‑пиновому выделение для каждого устройства (или поддержка цепочки «daisy chain»).
  • Выберите I2C, если важна экономия проводов и у вас много устройств с уникальными адресами.

Что такое SPI на Raspberry Pi?

SPI (Serial Peripheral Interface) — синхронизированный последовательный протокол. Raspberry Pi обычно выступает в роли мастера, а внешние модули — ведомыми. Передача управляется линией SCLK, MOSI и MISO обмениваются битами одновременно, а CE0/CE1 (или SS) выбирают конкретное ведомое.

Схема подключения SPI и I2C на Raspberry Pi

SCLK задаёт частоту передачи. На каждом фронте такта мастер и ведомый отправляют и получают по одному биту. MOSI — от мастера к ведомому, MISO — обратно. CE0/CE1 активируют нужное устройство. Многие устройства поддерживают «daisy chain», что снижает количество необходимых линий выбора.

Примеры использования: флеш‑память, ADC (аналогово‑цифровые преобразователи), сдвиговые регистры, дисплеи и RFID‑ридеры.

Как включить SPI на Raspberry Pi

  1. Откройте терминал и запустите raspi-config:
sudo raspi-config
  1. Перейдите в Interfacing Options → P4 SPI (Enable/Disable automatic loading of SPI kernel module) и ответьте Yes.
  2. Перезагрузите плату:
sudo reboot

Альтернативный способ — редактировать /boot/config.txt:

sudo nano /boot/config.txt

Найдите строку

#dtparam=spi=on

и удалите ведущий #, чтобы получилось

dtparam=spi=on

После перезагрузки должен появиться драйвер spidev и устройство /dev/spidev0.0 (или /dev/spidev0.1).

Проверка, что SPI загружен

lsmod | grep spi

Ожидаемые модули: spidev, spi_bcm2835 (название модуля может отличаться в зависимости от ядра), а также наличие устройств /dev/spidev*.

Что можно сделать со SPI: проекты и идеи

  • RFID‑ридер (например, MFRC‑522). Подходит для замков и учёта доступа.
  • Быстрые дисплеи или LED‑матрицы, где важна скорость обновления.
  • Подключение внешних АЦП/ЦАП для сбора данных.
  • Сдвиговые регистры для расширения выходов.

Примерная последовательность проекта: аппаратная проводка → включение SPI → установка библиотек python3‑spidev → тест с примерным скриптом.

Что такое I2C на Raspberry Pi?

I2C (Inter‑Integrated Circuit) — шина с двумя линиями: SCL (тактовая) и SDA (данные). Устройства имеют адреса (обычно 7‑битные). Мастер начинает передачу старт‑битом и адресом, затем указывает режим чтения/записи (R/W). Каждый ведомый отправляет ACK или NACK.

I2C медленнее SPI, но очень экономичен по контактам и широко поддерживается библиотеками.

Как включить I2C на Raspberry Pi

  1. В терминале:
sudo raspi-config
  1. Interfacing Options → P5 I2C (Enable/Disable automatic loading of I2C kernel module). Подтвердите Yes и перезагрузите.

Или правьте /boot/config.txt:

sudo nano /boot/config.txt

Найдите и раскомментируйте строку

#dtparam=i2c_arm=on

чтобы получить

dtparam=i2c_arm=on

Перезагрузите плату.

Установка инструментов и проверка

Для работы с I2C установите утилиты и библиотеки:

sudo apt update
sudo apt install -y i2c-tools python3-smbus

Проверка шины (на современных платах обычно используется i2c‑1):

i2cdetect -y 1

Команда покажет карту адресов: если устройство подключено и работает, вы увидите его адрес в таблице.

Что можно сделать с I2C: проекты и идеи

  • Жидкокристаллические дисплеи (LCD) с I2C‑распределителем (I2C backpack) — экономия выводов.
  • Множество датчиков (температуры, давления, акселерометры) на одной шине.
  • Расширение GPIO через I2C‑модули (PCF8574, MCP23017 и т. п.).

Типичные номера контактов (Raspberry Pi 40‑pin header)

НазваниеGPIOНомер контактаОписание
SDAGPIO23I2C‑данные
SCLGPIO35I2C‑тактовая
MOSIGPIO1019SPI Master Out Slave In
MISOGPIO921SPI Master In Slave Out
SCLKGPIO1123SPI Clock
CE0GPIO824SPI Chip Enable 0 (SS)
CE1GPIO726SPI Chip Enable 1 (SS)

Важно: нумерация контактов (pin numbers) отличается от нумерации GPIO. При проводке сверяйтесь с распиновкой вашей модели Pi.

Быстрая проверка и примеры команд

Проверка модулей:

lsmod | egrep "spi|i2c"

Просмотр устройств в /dev:

ls -l /dev/spidev* /dev/i2c-*

Сканирование I2C:

i2cdetect -y 1

Установка Python‑пакетов для работы со шинами:

sudo apt install -y python3-pip python3-spidev python3-smbus
pip3 install RPI.GPIO

Пример простого Python‑скрипта для SPI (с использованием spidev):

import spidev

spi = spidev.SpiDev()
spi.open(0, 0)  # шина 0, устройство CE0
spi.max_speed_hz = 500000
resp = spi.xfer2([0x01, 0x02, 0x03])
print('Ответ устройства:', resp)
spi.close()

Простой пример проверки I2C (чтение регистров) можно реализовать через smbus:

import smbus
bus = smbus.SMBus(1)  # i2c-1
addr = 0x3c  # пример адреса
try:
    data = bus.read_byte(addr)
    print('Чтение успешно, байт:', data)
except Exception as e:
    print('Ошибка доступа к I2C:', e)

Отладка: типичные проблемы и решения

  • Устройство не обнаруживается в i2cdetect:

    • Проверьте питание (VCC и GND).
    • Проверьте правильность адреса и pull‑up резисторов (I2C требует подтяжки SDA/SCL).
    • Убедитесь, что в /boot/config.txt раскомментирована строка dtparam=i2c_arm=on.
    • Проверьте, добавлен ли пользователь в группу i2c: sudo adduser i2c.
  • /dev/spidev0.0 отсутствует:

    • Проверьте dtparam=spi=on в /boot/config.txt или включение через raspi-config.
    • Убедитесь, что модуль spidev загружен (lsmod).
    • Проверьте, не занят ли CE вывод другим устройством.
  • Права доступа к устройствам:

    • Обычно устройства принадлежат группам spi и i2c. Добавьте пользователя в соответствующие группы: sudo adduser spi и sudo adduser i2c.
  • Конфликты выводов:

    • Некоторые аппаратные функции (например, HAT‑шляпы) используют одни и те же GPIO. Сверьте документацию устройств.

Важно: всегда отключайте питание перед переподключением проводов.

Чек‑лист по внедрению (роль‑ориентированный)

  • Для хоббиста:

    • Включить интерфейс через raspi-config.
    • Установить i2c-tools или spidev.
    • Подключить устройство и запустить i2cdetect / пример spidev.
  • Для разработчика ПО:

    • Добавить автоматическую загрузку в /boot/config.txt.
    • Настроить сервис systemd для запуска тестов/демонов.
    • Настроить права доступа и test‑suite для CI.
  • Для интегратора/инженера систем:

    • Спроектировать физические уровни (уровни напряжения, фильтрацию).
    • Проверить помехи и длину проводов для I2C.
    • Провести стресс‑тесты и запланировать мониторинг ошибок.

Методика быстрой валидации (mini‑methodology)

  1. Аппаратная проверка: питание, земля, правильная нумерация контактов.
  2. Включение интерфейса (raspi-config или /boot/config.txt).
  3. Установка инструментов (i2c-tools, python3‑spidev).
  4. Проверка видимости устройств (/dev, i2cdetect).
  5. Простая передача/чтение данных.
  6. Автоматизация и мониторинг.

Когда не использовать SPI/I2C — контрпримеры

  • Если у вас много устройств с высокими требованиями к пропускной способности и сложной топологией — иногда выгоднее применять UART/USB или специализированные интерфейсы.
  • Для дистанционного соединения на большие расстояния I2C и SPI не подходят без согласования уровней и экранирования.

Диаграмма выбора: SPI или I2C

flowchart TD
  A[Нужно подключить периферию?] --> B{Сколько проводов можно выделить?}
  B -->|2 провода| C[I2C]
  B -->|4+ провода| D{Нужна ли высокая скорость?}
  D -->|Да| E[SPI]
  D -->|Нет| F[I2C или GPIO расширитель]
  C --> G[Проверить адресацию и подтяжки]
  E --> H[Проверить CE, MOSI, MISO, SCLK]

Критерии приёмки

  • Для I2C: i2cdetect показывает адрес подключённого устройства; чтение/запись регистров проходит без ошибок.
  • Для SPI: /dev/spidev0.* присутствует; примерный обмен через spidev возвращает ожидаемый ответ.
  • Аппаратно: нет скачков питания; провода надёжно закреплены.

Советы по совместимости и миграции

  • Внимательно проверьте уровни напряжения: Pi работает на 3.3V, многие модулі 5V — требуется преобразователь уровней.
  • При переходе с других плат уточняйте номера GPIO и нумерацию контактов (board vs BCM).
  • Для промышленных применений рассмотрите изоляцию и защиту линий от помех.

Резюме

SPI и I2C — ключевые интерфейсы для расширения возможностей Raspberry Pi. Простое включение через raspi-config или /boot/config.txt, базовые инструменты (i2c-tools, spidev) и последовательная методика проверки позволят быстро подключить датчики, дисплеи и считыватели. Начните с простых примеров и постепенно переходите к интеграции в проекты.

Итоговые рекомендации: включите интерфейс, установите инструменты, выполните аппаратную проверку, запустите i2cdetect/spidev и автоматизируйте тесты в процессе разработки.


Подсказка для публикации: используйте краткое изображение распиновки в качестве og:image и поместите на странице ссылку на официальную распиновку Raspberry Pi.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Free lensing — мечтательные фотографии
Фотография

Free lensing — мечтательные фотографии

Trello для фрилансера — управление проектами и клиентами
Productivity

Trello для фрилансера — управление проектами и клиентами

Идеальная фотосессия беременных: 6 ключевых советов
Фотография

Идеальная фотосессия беременных: 6 ключевых советов

Слои в фотографии: добавить глубину и выразительность
Фотография

Слои в фотографии: добавить глубину и выразительность

Как делать лучшие headshot-портреты
Фотография

Как делать лучшие headshot-портреты

Как снимать отличные фото на вечеринке
Фотография

Как снимать отличные фото на вечеринке