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

Материал из Онлайн справочника
Перейти к навигацииПерейти к поиску
(Новая страница: «{{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" enclose="div">
Пример:
 
<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)

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

Методы

Константы

См.также

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