С Python это просто.

Rasberry Pi (RPi) - это недорогой мини-компьютер размером с кредитную карту. Это отличное решение для хобби и домашних проектов (а также некоторых коммерческих), потому что у него есть различные контакты ввода / вывода, видео, камера, звуковые интерфейсы и множество хороших ОС для установки.

Вступление

Межинтегральная схема (I2C) - это протокол, обеспечивающий связь между несколькими микросхемами. Он использует только две линии для связи:

  • SDA: последовательные данные
  • SCL: последовательные часы

Он сочетает в себе некоторые характеристики двух других коммуникаций (UART и SPI):

  • Как и SPI, он предназначен только для связи на короткие расстояния;
  • Как и UART, для обмена информацией требуется всего два провода.

И решим некоторые их проблемы:

  • В отличие от SPI, он позволяет использовать более одного главного на линии и имеет только две линии, что позволяет сэкономить много подключений и места;
  • В отличие от UART, линия SCL используется для синхронизации данных и может поддерживать более двух устройств.

Протокол шины I2C может поддерживать до 1008 устройств и достигать скорости до 5 МГц.

Raspberry Pi содержит два интерфейса I2C:

  • I2C0 (GPIO 0 / GPIO 1): обычно используется системой для чтения HAT EEPROM, но может использоваться как альтернативная шина.
  • I2C1 (GPIO 2 / GPIO 3): интерфейс по умолчанию.

Вы можете узнать больше о GPIO в статье ниже.



Требования

В этом уроке мы собираемся использовать порт I2C. Для этого мы использовали следующие материалы:

  • Raspberry Pi 3 модель B +.
  • Датчик емкостной влажности почвы: он использует емкостное зондирование для вывода аналогового напряжения, пропорционального влажности почвы.
  • ADS1115: поскольку у RPi нет аналогового входа, мы должны преобразовать его в цифровой формат. Мы используем АЦП с интерфейсом I2C.

Примечание: мы использовали Ubuntu Server в качестве ОС нашего RPi. Вы можете проверить, как его установить и настроить ниже.



Как установить Ubuntu Server на Raspberry Pi
Это проще, чем вы думаете. medium.com



Конфигурация

Чтобы начать использовать I2C, мы должны установить несколько пакетов:

sudo apt update 
sudo apt upgrade -y
sudo apt install -y i2c-tools python3-pip

После этого нужно установить пакет smbus2 с помощью pip:

sudo pip3 install smbus2

Примечание: если вы используете систему Raspbian, вы должны включить I2C в ядре. Отметьте здесь.

Схема

Ниже вы можете найти схему, которую мы собираемся использовать в этом руководстве. Он прост и удобен в сборке.

Кодирование

Первое, что нам нужно сделать, это проверить адрес нашего компонента I2C. Для этого мы используем i2cdetect программное обеспечение, которое мы установили ранее:

sudo i2cdetect -y 1

Эта команда сообщит RPi об обнаружении всех устройств, подключенных к линии I2C, и их соответствующих адресов. В нашем случае это должно быть примерно так:

Затем у нас есть компонент, подключенный к шине I2C с адресом 0x48. Это адрес, который мы будем использовать для связи с ним.

Примечание: вы должны использовать sudo при использовании I2C, иначе вы получите ошибку Permission denied.

Для кода первое, что нам нужно сделать, это импортировать пакет smbus:

from smbus2 import SMBus

После этого нам нужно создать объект, который будет разговаривать с этим интерфейсом:

bus = SMBus(1)

Примечание: мы используем канал 1, так как это имя его называет RPi.

Нас интересуют две функции:

  • bus.write_i2c_block_data: записывает в устройство блок данных (до 32 байтов).
  • bus.read_i2c_block_data: он может считывать с устройства до 32 байтов.

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

Чтобы запустить его, просто запустите команду sudo python3 run.py. Результат должен быть примерно таким:

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

Заключение

Как видите, использовать интерфейс I2C с RPi совсем несложно. Каждое устройство I2C будет иметь свои собственные адреса и конфигурацию, поэтому вам следует проверить их техническое описание.

И вы можете подключить до 128 устройств, используя те же два контакта на RPi. Пока ни одно устройство не имеет одинаковый адрес.

Подпишитесь на меня в Twitter, чтобы знать, когда я опубликую еще одну подобную статью.