MicroPython:Библиотеки/pyb/Класс I2C: различия между версиями

Материал из Онлайн справочника
Перейти к навигацииПерейти к поиску
Нет описания правки
 
Строка 11: Строка 11:
Пример:
Пример:


<syntaxhighlight lang="python" enclose="div">
<syntaxhighlight lang="python">
from pyb import I2C
from pyb import I2C


Строка 30: Строка 30:
Базовые методы класса I2C – это send() и recv():
Базовые методы класса I2C – это send() и recv():


<syntaxhighlight lang="python" enclose="div">
<syntaxhighlight lang="python">
i2c.send('abc')      # отправляем 3 байта
i2c.send('abc')      # отправляем 3 байта
i2c.send(0x42)      # отправляем 1 байт, задав его номер
i2c.send(0x42)      # отправляем 1 байт, задав его номер
Строка 38: Строка 38:
Чтобы получить данные, сначала создаем массив данных:
Чтобы получить данные, сначала создаем массив данных:


<syntaxhighlight lang="python" enclose="div">
<syntaxhighlight lang="python">
data = bytearray(3)  # создаем буфер
data = bytearray(3)  # создаем буфер
i2c.recv(data)      # получаем 3 байта, записываем их в «data»
i2c.recv(data)      # получаем 3 байта, записываем их в «data»
Строка 45: Строка 45:
Вы также можете задать таймаут (в миллисекундах):
Вы также можете задать таймаут (в миллисекундах):


<syntaxhighlight lang="python" enclose="div">
<syntaxhighlight lang="python">
i2c.send(b'123', timeout=2000)  # таймаут через 2 секунды  
i2c.send(b'123', timeout=2000)  # таймаут через 2 секунды  
</syntaxhighlight>
</syntaxhighlight>
Строка 51: Строка 51:
Чтобы ведущее устройство могло отправить данные, ему надо знать адрес получателя:
Чтобы ведущее устройство могло отправить данные, ему надо знать адрес получателя:


<syntaxhighlight lang="python" enclose="div">
<syntaxhighlight lang="python">
i2c.init(I2C.MASTER)
i2c.init(I2C.MASTER)
i2c.send('123', 0x42)        # отправляем 3 байта ведомому устройству
i2c.send('123', 0x42)        # отправляем 3 байта ведомому устройству
Строка 60: Строка 60:
У ведущего устройства также есть другие методы:
У ведущего устройства также есть другие методы:


<syntaxhighlight lang="python" enclose="div">
<syntaxhighlight lang="python">
i2c.is_ready(0x42)      # проверяем, готово ли ведомое устройство
i2c.is_ready(0x42)      # проверяем, готово ли ведомое устройство
                         # с адресом «0x42»
                         # с адресом «0x42»

Текущая версия от 18:16, 14 мая 2023

Перевод: Максим Кузьмин
Проверка/Оформление/Редактирование: Мякишев Е.А.


Класс I2C – класс для работы с протоколом I2C[1]

I2C – это 2-проводной протокол для коммуникации между устройствами. На физическом уровне он состоит из 2 проводов: SCL и SDA (это линии для тактовой частоты и данных соответственно).

Объекты I2C создаются привязанными к заданной шине. Их можно инициализировать при создании или позже.

Пример:

from pyb import I2C

i2c = I2C(1)                         # создаем объект «i2c» на шине 1
i2c = I2C(1, I2C.MASTER)             # создаем объект «i2c»
                                     # и инициализируем его
                                     # как ведущее устройство (мастер)
i2c.init(I2C.MASTER, baudrate=20000) # инициализируем объект «i2c»
                                     # как ведущее устройство (мастер) 
i2c.init(I2C.SLAVE, addr=0x42)       # инициализируем объект «i2c»
                                     # как ведомое устройство
                                     # с заданным адресом
i2c.deinit()                         # выключаем I2C-коммуникацию

Если распечатать объект I2C, это покажет информацию о его настройках.

Базовые методы класса I2C – это send() и recv():

i2c.send('abc')      # отправляем 3 байта
i2c.send(0x42)       # отправляем 1 байт, задав его номер
data = i2c.recv(3)   # получаем 3 байта

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

data = bytearray(3)  # создаем буфер
i2c.recv(data)       # получаем 3 байта, записываем их в «data»

Вы также можете задать таймаут (в миллисекундах):

i2c.send(b'123', timeout=2000)   # таймаут через 2 секунды

Чтобы ведущее устройство могло отправить данные, ему надо знать адрес получателя:

i2c.init(I2C.MASTER)
i2c.send('123', 0x42)        # отправляем 3 байта ведомому устройству
                             # с адресом «0x42»
i2c.send(b'456', addr=0x42)  # адрес задан как именованный аргумент

У ведущего устройства также есть другие методы:

i2c.is_ready(0x42)       # проверяем, готово ли ведомое устройство
                         # с адресом «0x42»
i2c.scan()               # сканируем ведомые устройства на шине, 
                         # возвращая список корректных адресов
i2c.mem_read(3, 0x42, 2) # считываем 3 байта из памяти
                         # ведомого устройства с адресом «0x42»,
                         # начиная с адреса «2» на ведомом устройстве 
# записываем 'abc' (3 байта) в память ведомого устройства
# с адресом «0x42», начиная с адреса «2» на ведомом устройстве,
# таймаут спустя 1 секунду:
i2c.mem_write('abc', 0x42, 2, timeout=1000)

Конструкторы

Методы

Константы

См.также

Внешние ссылки