С 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. Вы можете проверить, как его установить и настроить ниже.
Конфигурация
Чтобы начать использовать 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, чтобы знать, когда я опубликую еще одну подобную статью.