Работа с шиной I2C на Python в Orange Pi и Raspberry Pi
SMBus (англ. System Management Bus) — последовательный протокол обмена данными для устройств питания. Основан на шине I?C, но использует более низкое сигнальное напряжение (3,3 В), предложен Intel в 1995 году. Используется, например, для получения информации о состоянии аккумуляторной батареи ноутбука (оставшаяся ёмкость аккумуляторной батареи, температура, количество использованных циклов разряда, и т. д.). С версии SMBus 2.0 (2000 год) используется не только для настройки батареи, но и для иных внутренних устройств компьютера.
SMBus является двухпроводным интерфейсом, по которому простые устройства могут обмениваться информацией с остальной системой. Сообщения идут к устройствам и от них, вместо прохождения по отдельным управляющим линиям. Отлично подходит для Raspberry Pi и Orange Pi.
Python-smbus — этот модуль Python обеспечивает доступ к SMBus через интерфейс I2C /dev на хостах Linux. Ядро хоста должно иметь поддержку I2C, поддержку интерфейса устройства I2C и драйвер адаптера шины.
Установка и обновление Python
Python 2 и Python 3 поставляются предварительно установленными в операционных системах Raspbian, но чтобы установить Python в другой ОС Linux или обновить его, просто выполните одну из следующих команд в командной строке:
Установка или обновление Python 3.
Установка или обновление Python 2.
Открытие Python REPL
Чтобы получить доступ к Python REPL (где вы можете вводить команды Python точно так же, как в командной строке), введите python или python3 в зависимости от того, какую версию вы хотите использовать:
Введите Ctrl-D, чтобы выйти из REPL.
Установка I2C Tools
I2C Tools — это пакет с полезными консольными инструментами для I2C. После установки нам будут доступны несколько полезных утилит: i2cdetect, i2cdump, i2cget, i2cset.
i2cdetect — это пользовательская программа, которая сканирует шину I2C на наличие устройств.
Отображать список доступных в системе шин I?C:
Отображать таблицу обнаруженных устройств на указанной шине:
Установка SMBus
Описание методов (функций)
SMBus функции
Быстрая транзакция.
Параметры
int addr — I2C адрес устройства.
Возвращает
long — Отрицательный errno или ноль в случае успеха.
read_byte()
Чтение байта.
Параметры
int addr — I2C адрес устройства.
Возвращает
long — Отрицательный errno или байт данных в случае успеха.
write_byte()
Запись байта.
Параметры
int addr — I2C адрес устройства.
char val — Байт данных.
Возвращает
long — Отрицательный errno или ноль в случае успеха.
read_byte_data()
Чтение байта данных.
Параметры
int addr — I2C адрес устройства.
char cmd — Адрес регистра (команда).
Возвращает
long — Отрицательный errno или байт данных в случае успеха.
write_byte_data()
Запись байта данных.
Параметры
int addr — I2C адрес устройства.
char cmd — Адрес регистра (команда).
char val — Байт данных.
Возвращает
long — Отрицательный errno или ноль в случае успеха.
read_word_data()
Чтение двух байт данных.
Параметры
int addr — I2C адрес устройства.
char cmd — Адрес регистра (команда).
Возвращает
long — Отрицательный errno или два байта данных в случае успеха.
process_call()
Process Call (вызов процесса).
Параметры
int addr — I2C адрес устройства.
char cmd — Адрес регистра (команда).
int val — Два байта данных.
Возвращает
long — Отрицательное значение errno или 16-разрядное беззнаковое «слово», полученное от устройства.
read_block_data()
Чтение массива данных.
Параметры
int addr — I2C адрес устройства.
char cmd — Адрес регистра (команда).
Возвращает
long[] — Отрицательный errno или массив данных в случае успеха.
write_block_data()
Запись массива данных.
Параметры
int addr — I2C адрес устройства.
char cmd — Адрес регистра (команда).
long[] vals — Массив данных.
block_process_call()
Параметры
int addr — I2C адрес устройства.
char cmd — Адрес регистра (команда).
long[] vals — Массив данных.
Возвращает
long[] — Массив данных.
I2C функции
read_i2c_block_data()
Чтение массива данных.
Параметры
int addr — I2C адрес устройства.
char cmd — Адрес регистра (команда).
int length — Желаемая длина блока.
Возвращает
long[] — Массив данных в случае успеха.
write_i2c_block_data()
Запись массива данных.
Параметры
int addr — I2C адрес устройства.
char cmd — Адрес регистра (команда).
long[] vals — Массив данных.
Примеры программ
Пример 1: чтение байта
Открыть шину I2C «0» и прочитать один байт от адреса 0x39, со смещением 0x0C (адрес регистра).
bus = smbus.SMBus(0)
data = bus.read_byte_data(0x39, 0x0C)
print(data)
bus.close()
Пример 2: чтение массива данных
Открыть шину I2C «0» и прочитать 4 байта от адреса 0x39, со смещением 0x0C (адрес регистра). Вы можете прочитать до 32 байтов за раз.
bus = smbus.SMBus(0)
data = bus.read_i2c_block_data(0x39, 0x0C, 4)
print(data)
bus.close()
Пример 3: запись байта
Открыть шину I2C «0» и записать один байт по адресу 0x39, со смещением 0x0C (адрес регистра).
bus = smbus.SMBus(0)
data = 45
bus.write_byte_data(0x39, 0x0C, data)
bus.close()
Пример 4: запись массива
Открыть шину I2C «0» и записать масив байтов по адресу 0x39, со смещением 0x0C (адрес регистра). Вы можете записать до 32 байтов за раз.
bus = smbus.SMBus(0)
data = [1, 2, 3, 4, 5, 6, 7, 8]
bus.write_i2c_block_data(0x39, 0x0C, data)
bus.close()
28.02.2024 в 14:04, Просмотров: 2116
Опубликовал: ak167