SMBus (англ. System Management Bus) — последовательный протокол обмена данными для устройств питания. Основан на шине I²C, но использует более низкое сигнальное напряжение (3,3 В), предложен Intel в 1995 году. Используется, например, для получения информации о состоянии аккумуляторной батареи ноутбука (оставшаяся ёмкость аккумуляторной батареи, температура, количество использованных циклов разряда, и т. д.). С версии SMBus 2.0 (2000 год) используется не только для настройки батареи, но и для иных внутренних устройств компьютера.
SMBus является двухпроводным интерфейсом, по которому простые устройства могут обмениваться информацией с остальной системой. Сообщения идут к устройствам и от них, вместо прохождения по отдельным управляющим линиям.
python-smbus — этот модуль Python обеспечивает доступ к SMBus через интерфейс I2C /dev на хостах Linux. Ядро хоста должно иметь поддержку I2C, поддержку интерфейса устройства I2C и драйвер адаптера шины.
Установка и обновление Python
Python 2 и Python 3 поставляются предварительно установленными в операционных системах Raspbian, но чтобы установить Python в другой ОС Linux или обновить его, просто выполните одну из следующих команд в командной строке:
Установка или обновление Python 3.
sudo apt-get install python3
Установка или обновление Python 2.
sudo apt-get install python
Открытие Python REPL
Чтобы получить доступ к Python REPL (где вы можете вводить команды Python точно так же, как в командной строке), введите python
или python3
в зависимости от того, какую версию вы хотите использовать:
Введите Ctrl-D, чтобы выйти из REPL.
Установка I2C Tools
I2C Tools — это пакет с полезными консольными инструментами для I2C. После установки нам будут доступны несколько полезных утилит: i2cdetect
, i2cdump
, i2cget
, i2cset
.
sudo apt-get install i2c-tools
i2cdetect
— это пользовательская программа, которая сканирует шину I2C на наличие устройств.
Отображать список доступных в системе шин I²C:
i2cdetect -l
Отображать таблицу обнаруженных устройств на указанной шине:
i2cdetect -y 0
Установка SMBus
sudo apt-get install python-smbus
Описание методов (функций)
SMBus функции
write_quick()
Быстрая транзакция.
write_quick(addr)
Параметры
int addr
— I2C адрес устройства.
Возвращает
long
— Отрицательный errno
или ноль в случае успеха.
read_byte()
Чтение байта.
read_byte(addr)
Параметры
int addr
— I2C адрес устройства.
Возвращает
long
— Отрицательный errno
или байт данных в случае успеха.
write_byte()
Запись байта.
write_byte(addr,val)
Параметры
int addr
— I2C адрес устройства.
char val
— Байт данных.
Возвращает
long
— Отрицательный errno
или ноль в случае успеха.
read_byte_data()
Чтение байта данных.
read_byte_data(addr,cmd)
Параметры
int addr
— I2C адрес устройства.
char cmd
— Адрес регистра (команда).
Возвращает
long
— Отрицательный errno
или байт данных в случае успеха.
write_byte_data()
Запись байта данных.
write_byte_data(addr,cmd,val)
Параметры
int addr
— I2C адрес устройства.
char cmd
— Адрес регистра (команда).
char val
— Байт данных.
Возвращает
long
— Отрицательный errno
или ноль в случае успеха.
read_word_data()
Чтение двух байт данных.
read_word_data(addr,cmd)
Параметры
int addr
— I2C адрес устройства.
char cmd
— Адрес регистра (команда).
Возвращает
long
— Отрицательный errno
или два байта данных в случае успеха.
process_call()
Process Call (вызов процесса) .
process_call(addr,cmd,val)
Параметры
int addr
— I2C адрес устройства.
char cmd
— Адрес регистра (команда).
int val
— Два байта данных.
Возвращает
long
— Отрицательное значение errno
или 16-разрядное беззнаковое «слово», полученное от устройства.
read_block_data()
Чтение массива данных.
read_block_data(addr,cmd)
Параметры
int addr
— I2C адрес устройства.
char cmd
— Адрес регистра (команда).
Возвращает
long[]
— Отрицательный errno
или массив данных в случае успеха.
write_block_data()
Запись массива данных.
write_block_data(addr,cmd,vals)
Параметры
int addr
— I2C адрес устройства.
char cmd
— Адрес регистра (команда).
long[] vals
— Массив данных.
block_process_call()
Block Process Call.
block_process_call(addr,cmd,vals)
Параметры
int addr
— I2C адрес устройства.
char cmd
— Адрес регистра (команда).
long[] vals
— Массив данных.
Возвращает
long[]
— Массив данных.
I2C функции
read_i2c_block_data()
Чтение массива данных.
read_i2c_block_data(addr,cmd,length)
Параметры
int addr
— I2C адрес устройства.
char cmd
— Адрес регистра (команда).
int length
— Желаемая длина блока.
Возвращает
long[]
— Массив данных в случае успеха.
write_i2c_block_data()
Запись массива данных.
write_i2c_block_data(addr,cmd,vals)
Параметры
int addr
— I2C адрес устройства.
char cmd
— Адрес регистра (команда).
long[] vals
— Массив данных.
Примеры программ
Пример 1: чтение байта
Открыть шину I2C «0» и прочитать один байт от адреса 0x39, со смещением 0x0C (адрес регистра).
import smbus bus = smbus.SMBus(0) data = bus.read_byte_data(0x39, 0x0C) print(data) bus.close()
Пример 2: чтение массива данных
Открыть шину I2C «0» и прочитать 4 байта от адреса 0x39, со смещением 0x0C (адрес регистра). Вы можете прочитать до 32 байтов за раз.
import smbus bus = smbus.SMBus(0) data = bus.read_i2c_block_data(0x39, 0x0C, 4) print(data) bus.close()
Пример 3: запись байта
Открыть шину I2C «0» и записать один байт по адресу 0x39, со смещением 0x0C (адрес регистра).
import smbus bus = smbus.SMBus(0) data = 45 bus.write_byte_data(0x39, 0x0C, data) bus.close()
Пример 4: запись массива
Открыть шину I2C «0» и записать масив байтов по адресу 0x39, со смещением 0x0C (адрес регистра). Вы можете записать до 32 байтов за раз.
import smbus bus = smbus.SMBus(0) data = [1, 2, 3, 4, 5, 6, 7, 8] bus.write_i2c_block_data(0x39, 0x0C, data) bus.close()
Материалы
How to Write and Run a Python Program on the Raspberry Pi
I2C Tools — Linux i2c Wiki
Using I2C with SM-Bus and Raspbian Linux on the Raspberry Pi
wiki:linux:python:sm-bus:doc [wiki.erazor-zone.de]
smbus2 Documentation
smbus2 · PyPI
i2cdetect(8) — i2c-tools — Debian unstable — Debian Manpages
SMBus — Википедия
эскорт женские услуги в москве москва работа эскорт услуги