SMBus: Работа с шиной I2C на Python в Raspberry Pi/Orange Pi/Banana Pi

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 в зависимости от того, какую версию вы хотите использовать:

SMBus Работа с I2C на Python в Raspberry Pi - Открытие Python REPL

Введите Ctrl-D, чтобы выйти из REPL.

Установка I2C Tools

I2C Tools — это пакет с полезными консольными инструментами для I2C. После установки нам будут доступны несколько полезных утилит: i2cdetect, i2cdump, i2cget, i2cset.

sudo apt-get install i2c-tools

i2cdetect — это пользовательская программа, которая сканирует шину I2C на наличие устройств.

Отображать список доступных в системе шин I²C:

i2cdetect -l

Установка I2C Tools (список доступных в системе шин I²C) - i2cdetect -l

Отображать таблицу обнаруженных устройств на указанной шине:

i2cdetect -y 0

Установка I2C Tools - 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 — Википедия

Похожие записи

Комментарии 3

  • Untuk memulai, Anda cukup memilih taruhan dan memutar gulungan. Tidak hanya itu, game ini juga menawarkan opsi untuk membeli putaran gratis, memungkinkan Anda langsung masuk ke mode free spins tanpa harus menunggu simbol scatter muncul. Oleh karena itu, jika Anda ingin segera merasakan sensasi putaran gratis di situs BAMBUHOKI88, opsi ini bisa menjadi pilihan yang tepat.

  • Ontdek een spannende wereld vol entertainment en kansen. Als je op zoek bent naar
    een plek waar je volop kunt genieten van unieke ervaringen,
    dan is dit de ideale bestemming voor jou. Met een gebruiksvriendelijke interface
    en toegang vanaf elk apparaat, heb je alles binnen handbereik om te ontspannen en plezier te
    hebben.

    Je vindt hier een breed scala aan mogelijkheden, van klassieke spellen tot
    moderne innovaties. Dankzij het veilige en betrouwbare platform kun je zorgeloos
    genieten en je volledig richten op het plezier.

    Wacht niet langer en maak deel uit van deze unieke ervaring.
    De mogelijkheden wachten op jou!

    my web-site — kody bonusowe betonred

  • It is important to play the crash game responsibly to avoid losses. You can set budget and time limits in the game, avoid chasing losses, and manage expectations and emotions so that they don’t impact the game. Minesweeper Classic Bomb Games The AI behind the Mines hack v3 provides a reliable forecast of the outcome of the mine with 99.99% accuracy. Using the app’s prediction, you can transform your gaming experience. Complete the registration, get the app and download the APK file to your phone free of cost. Our Mines hack supports both Android and iOS devices. Whether you’re aiming to elevate your game or start winning big, Mines Game Hack is your go-to solution. Download now and take your Mines game to the next level! The author of the site is an expert in the casino game called Mines. With a deep understanding of the nuances and strategies of the game, he dedicates himself to analyzing and revealing the secrets of this game to his readers. Through his insights and analysis, he offers a valuable perspective for those interested in improving their skills and better understanding the mechanics and tactics of the game.
    https://www.pubpub.org/user/Buddy-Watkins
    Supporting GPU, CPU and ASICs with a dedicated web console for monitoring and remote management of all your devices. Cudo Miners platforms are fully automated and optimised for both profit and the highest performance on Windows, Ubuntu (Linux), CudoOS and ASICs. Cudo Miner is suitable for miners with all levels of experience from single machines up to full scale GPU and ASIC mining farms One-click to install XAPK APK files on Android! It is an incredibly vibrant and fascinating mineral mining game for you to relax, explore, and be passionate about your mining. In the game there are a lot of attractive and exciting points that will definitely make you boast for the fun and excitement of a lot compared to other games. One-click to install XAPK APK files on Android! Quiero que se instale Minecraft gratis

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *