Каталог

RMT

Модуль RMT (Remote Control) в первую очередь предназначен для отправки и приема инфракрасных сигналов дистанционного управления, которые используют отключение несущей частоты, но благодаря своей конструкции он может использоваться для генерации сигналов различных типов.

Пример использования: отправка

import machine

# создать объект RMT для передачи

rmt = machine.RMT(channel=3, gpio="P20", tx_idle_level=0)

 # создать серию битов для отправки

data = (1,0,1,0,1,0,1,0,1)

 # определить длительность битов, единица времени зависит от выбранного канала RMT

duration = 10000

 # отправить сигнал

rmt.send_pulses(duration, data)

Пример использования: получение

import machine

 # создать объект RMT

rmt = machine.RMT(channel=3)

 # Настроить RTM для получения

rmt.init(gpio="P20", rx_idle_threshold=12000)   

 # ждать любого количества импульсов, пока какой-нибудь не будет длиннее, чем rx_idle_threshold

data = rmt.recv_pulses()

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

class machine.RMT(channel,…)

Строит объект RMT на заданном канале. channel может быть 2-7. Без дополнительных параметров объект RMT создается, но не инициализируется. Если даны дополнительные аргументы, RMT инициализируется для передачи или приема. Смотрите init для параметров инициализации. Разрешение, с которым может быть отправлен/получен импульс, зависит от выбранного канала:

RMT

Методы

rmt.init(gpio, rx_idle_threshold, rx_filter_threshold, tx_idle_level, tx_carrier)

Инициализирует периферийное устройство RMT с заданными параметрами:

  • gpio - это пин-код GPIO для использования.
  • rx_idle_threshold - максимальная длительность действительного импульса. Представленная единица времени (разрешение) зависит от выбранного канала, значение может быть 0-65535.
  • rx_filter_threshold - минимальная длительность действительного импульса. Представленная единица времени (разрешение) зависит от выбранного канала, значение может быть 0-31.
  • tx_idle_level - уровень выходного сигнала после завершения передачи, может быть RMT.HIGH или RMT.LOW.
  • tx_carrier - это модуляция импульсов для отправки.

Должны быть определены либо rx_idle_threshold, либо tx_idle_level: оба не могут быть заданы одновременно, поскольку канал можно настроить только в режиме RX или TX. rx_filter_threshold не является обязательным параметром. Если он не задан, то принимаются все импульсы с длительностью, меньшей rx_idle_threshold. tx_carrier не является обязательным параметром. Если он не задан, для отправленных импульсов не используется никакая модуляция.

Параметр tx_carrier является кортежем со следующей структурой:

  • carrier_freq_hz – несущая частота в Гц.
  • carrier_duty_percent - это коэффициент частотного сигнала, может быть 0% -100%.
  • carrier_level - уровень импульса для модуляции, может быть RMT.HIGH или RMT.LOW.

rmt.deinit ()

Деинициализирует объект RMT.

Если объект RMT необходимо перенастроить с RX/TX на TX/RX, то нужно либо вызвать первый deinit(), либо снова init() с желаемой конфигурацией.

rmt.pulses_get(pulses, timeout)

 Читает импульсы вывода GPIO.

  • pulses: если не указано иное, эта функция будет продолжать считывать импульсы, пока не будет превышен порог rx_idle_threshold. Если же указано число, функция вернет нужное количество импульсов, игнорируя все, что короче, чем rx_filter_threshold или длиннее, чем rx_idle_threshold.
  • timeout – если указано значение, то функция вернется, если первый импульс не происходит в течение указанного количества микросекунд. Если не указано, то будет ждать неопределённое время

Возвращаемое значение: кортеж элементов со следующей структурой: (level, duration)

  • level представляет уровень принятого бита / импульса, может быть 0 или 1.
  • duration представляет длительность принятого импульса, единица времени (разрешение) зависит от выбранного канала.

Максимум 128 импульсов может быть получено подряд без приема «холостого» сигнала. Если входящая последовательность импульсов содержит более 128 импульсов, остальные отбрасываются, и приемник ожидает другую последовательность импульсов. Функция pulses_get может быть вызвана для получения более 128 импульсов, однако при оценке принятых данных следует учитывать вышеупомянутое ограничение.

rmt.pulses_send(duration, data, start_level)

Генерирует импульсы в соответствии с параметрами ниже

  • duration представляет длительность отправляемых импульсов, единица времени (разрешение) зависит от выбранного канала.
  • data кортеж, представляющий последовательность импульсов, подлежащих отправке, состоит из 0 или 1 элементов.
  • start_level определяет состояние (HIGH / LOW) первого импульса, заданного duration, если data не предоставлена.

data должна быть кортежем, а duration может быть кортежем или одним числом, data необязательна. В случае, если указана только duration, то это должен быть кортеж, и вы также должны указать start_level, который будет определять уровень первой длительности, после чего уровень сигнала переключается между каждым значением длительности. Если data предоставлена, и duration является одним числом, каждый импульс в data будет иметь равную длину, как установлено duration. Если data и duration представлены в виде кортежей, они должны состоять из одного и того же количества элементов, причем каждый импульс согласован. 

Константы

Определяет уровень импульса: RMT.LOW, RMT.HIGH

footer shadow
Контакты

г. Москва, Пятницкое ш. д. 18, пав. 566

zakaz@compacttool.ru

8-495-752-55-22

compacttool logoadaptive site

accepted payment systems

Информация представленная на данном информационном ресурсе преследует исключительно рекламные цели и не является договором-офертой !

© Все права защищены 2015 - 2024г https://compacttool.ru