MicroPython:Библиотеки/pyb/Класс I2C: различия между версиями
Материал из Онлайн справочника
Перейти к навигацииПерейти к поиску
Myagkij (обсуждение | вклад) |
Нет описания правки |
||
Строка 11: | Строка 11: | ||
Пример: | Пример: | ||
<syntaxhighlight lang="python | <syntaxhighlight lang="python"> | ||
from pyb import I2C | from pyb import I2C | ||
Строка 30: | Строка 30: | ||
Базовые методы класса I2C – это send() и recv(): | Базовые методы класса I2C – это send() и recv(): | ||
<syntaxhighlight lang="python | <syntaxhighlight lang="python"> | ||
i2c.send('abc') # отправляем 3 байта | i2c.send('abc') # отправляем 3 байта | ||
i2c.send(0x42) # отправляем 1 байт, задав его номер | i2c.send(0x42) # отправляем 1 байт, задав его номер | ||
Строка 38: | Строка 38: | ||
Чтобы получить данные, сначала создаем массив данных: | Чтобы получить данные, сначала создаем массив данных: | ||
<syntaxhighlight lang="python | <syntaxhighlight lang="python"> | ||
data = bytearray(3) # создаем буфер | data = bytearray(3) # создаем буфер | ||
i2c.recv(data) # получаем 3 байта, записываем их в «data» | i2c.recv(data) # получаем 3 байта, записываем их в «data» | ||
Строка 45: | Строка 45: | ||
Вы также можете задать таймаут (в миллисекундах): | Вы также можете задать таймаут (в миллисекундах): | ||
<syntaxhighlight lang="python | <syntaxhighlight lang="python"> | ||
i2c.send(b'123', timeout=2000) # таймаут через 2 секунды | i2c.send(b'123', timeout=2000) # таймаут через 2 секунды | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Строка 51: | Строка 51: | ||
Чтобы ведущее устройство могло отправить данные, ему надо знать адрес получателя: | Чтобы ведущее устройство могло отправить данные, ему надо знать адрес получателя: | ||
<syntaxhighlight lang="python | <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 | <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)
Конструкторы
Методы
- I2C.deinit()
- I2C.init(mode, *, addr=18, baudrate=400000, gencall=False, dma=False)
- I2C.is_ready(addr)
- I2C.mem_read(data, addr, memaddr, *, timeout=5000, addr_size=8)
- I2C.mem_write(data, addr, memaddr, *, timeout=5000, addr_size=8)
- I2C.recv(recv, addr=0, *, timeout=5000)
- I2C.send(send, addr=0, *, timeout=5000)
- I2C.scan()