MicroPython:Библиотеки/pyb/Класс I2C: различия между версиями
Материал из Онлайн справочника
Перейти к навигацииПерейти к поиску
Myagkij (обсуждение | вклад) (Новая страница: «{{MicroPython/Панель перехода}} {{Перевод от Сubewriter}} {{Myagkij-редактор}} =<ref>[]</ref>= <syntaxhighlight lang="python"...») |
Нет описания правки |
||
(не показано 11 промежуточных версий 1 участника) | |||
Строка 3: | Строка 3: | ||
{{Myagkij-редактор}} | {{Myagkij-редактор}} | ||
=<ref>[]</ref>= | =Класс I2C – класс для работы с протоколом I2C<ref>[http://docs.micropython.org/en/latest/library/pyb.I2C.html docs.micropython.org - class I2C – a two-wire serial protocol]</ref>= | ||
[[I2C]] – это 2-проводной протокол для коммуникации между устройствами. На физическом уровне он состоит из 2 проводов: [[SCL]] и [[SDA]] (это линии для тактовой частоты и данных соответственно). | |||
Объекты [[I2C]] создаются привязанными к заданной шине. Их можно инициализировать при создании или позже. | |||
<syntaxhighlight lang="python" | Пример: | ||
<syntaxhighlight lang="python"> | |||
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-коммуникацию | |||
</syntaxhighlight> | |||
Если распечатать объект [[I2C]], это покажет информацию о его настройках. | |||
Базовые методы класса I2C – это send() и recv(): | |||
<syntaxhighlight lang="python"> | |||
i2c.send('abc') # отправляем 3 байта | |||
i2c.send(0x42) # отправляем 1 байт, задав его номер | |||
data = i2c.recv(3) # получаем 3 байта | |||
</syntaxhighlight> | |||
Чтобы получить данные, сначала создаем массив данных: | |||
<syntaxhighlight lang="python"> | |||
data = bytearray(3) # создаем буфер | |||
i2c.recv(data) # получаем 3 байта, записываем их в «data» | |||
</syntaxhighlight> | |||
Вы также можете задать таймаут (в миллисекундах): | |||
<syntaxhighlight lang="python"> | |||
i2c.send(b'123', timeout=2000) # таймаут через 2 секунды | |||
</syntaxhighlight> | |||
Чтобы ведущее устройство могло отправить данные, ему надо знать адрес получателя: | |||
<syntaxhighlight lang="python"> | |||
i2c.init(I2C.MASTER) | |||
i2c.send('123', 0x42) # отправляем 3 байта ведомому устройству | |||
# с адресом «0x42» | |||
i2c.send(b'456', addr=0x42) # адрес задан как именованный аргумент | |||
</syntaxhighlight> | |||
У ведущего устройства также есть другие методы: | |||
<syntaxhighlight lang="python"> | |||
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) | |||
</syntaxhighlight> | |||
==Конструкторы== | |||
* [[MicroPython:Библиотеки/pyb/Класс I2C/pyb.I2C()|pyb.I2C(bus, ...)]] | |||
==Методы== | |||
* [[MicroPython:Библиотеки/pyb/Класс I2C/I2C.deinit()|I2C.deinit()]] | |||
* [[MicroPython:Библиотеки/pyb/Класс I2C/I2C.init()|I2C.init(mode, *, addr=18, baudrate=400000, gencall=False, dma=False)]] | |||
* [[MicroPython:Библиотеки/pyb/Класс I2C/I2C.is_ready()|I2C.is_ready(addr)]] | |||
* [[MicroPython:Библиотеки/pyb/Класс I2C/I2C.mem_read()|I2C.mem_read(data, addr, memaddr, *, timeout=5000, addr_size=8)]] | |||
* [[MicroPython:Библиотеки/pyb/Класс I2C/I2C.mem_write()|I2C.mem_write(data, addr, memaddr, *, timeout=5000, addr_size=8)]] | |||
* [[MicroPython:Библиотеки/pyb/Класс I2C/I2C.recv()|I2C.recv(recv, addr=0, *, timeout=5000)]] | |||
* [[MicroPython:Библиотеки/pyb/Класс I2C/I2C.send()|I2C.send(send, addr=0, *, timeout=5000)]] | |||
* [[MicroPython:Библиотеки/pyb/Класс I2C/I2C.scan()|I2C.scan()]] | |||
==Константы== | |||
* [[MicroPython:Библиотеки/pyb/Класс I2C/I2C.MASTER|I2C.MASTER]] | |||
* [[MicroPython:Библиотеки/pyb/Класс I2C/I2C.SLAVE|I2C.SLAVE]] | |||
=См.также= | =См.также= |
Текущая версия от 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()