3.7. Вывод GPIO

machine.LED скрывает разводку встроенных индикаторов камеры. Управление любым внешним устройством начинается с machine.Pin в режиме вывода – сырого периферийного устройства, лежащего в основе любого другого взаимодействия с GPIO.

3.7.1. Управление выводом

Создайте вывод с Pin.OUT, чтобы сделать его выходом, а затем задайте его значение:

from machine import Pin

led = Pin("P0", Pin.OUT)
led.on()           # drive high (about 3.3 V)
led.off()          # drive low (about 0 V)

Три равнозначных способа задать состояние, все на machine.Pin:

Вызов value() без аргументов считывает текущее состояние вывода – это работает как для входов, так и для выходов.

3.7.2. Управление внешним светодиодом

Красному светодиоду при 10 мА от 3,3 В требуется около 130 Ω в последовательной цепи (на странице по электронике расписаны вычисления). Подключите вывод P0 через этот резистор к аноду светодиода, а катод светодиода – к земле. Мигалка:

import time
from machine import Pin

led = Pin("P0", Pin.OUT)

while True:
    led.on()
    time.sleep_ms(500)
    led.off()
    time.sleep_ms(500)

Светодиод включается и выключается раз в секунду. Ток через светодиод (а значит, и его яркость) задаётся резистором; коэффициент заполнения вкл/выкл определяет только то, как часто он зажигается, а не то, насколько ярко он светит во включённом состоянии.

Совет

Конструктор принимает начальное значение в качестве именованного аргумента: Pin("P0", Pin.OUT, value=0) настраивает вывод как выход, который стартует в низком состоянии. Без этого вывод на короткое время принимает то состояние по умолчанию, которое было у него до первого вызова value().

3.7.3. Режим открытого стока

Режим Pin.OUT по умолчанию – двухтактный (push-pull): вывод активно подтягивает линию и в высокое состояние (к питанию), и в низкое (к земле). Иногда это неверно. Используйте Pin.OPEN_DRAIN, когда вывод должен либо подтягивать линию к низкому уровню, либо отпускать её (переводить в плавающее состояние):

pin = Pin("P0", Pin.OPEN_DRAIN)
pin.off()       # actively drive low
pin.on()        # release; an external pull-up brings the line high

Основное применение – совместное использование провода. Несколько выходов с открытым стоком могут разделять одну линию, поскольку ни один из них не подтягивает её активно к высокому уровню. Любой из них может подтянуть линию к низкому уровню; если все они её отпустят, внешний подтягивающий резистор переводит линию в высокое состояние. Это и есть схемотехническое соглашение, лежащее в основе общих шин связи.

Предупреждение

Открытый сток – это не универсальное решение для управления устройством с более высоким напряжением. Подключение вывода с открытым стоком к подтяжке на 5 В безопасно на 5-вольт-толерантном выводе, но повреждает нетолерантный вывод через его встроенные защитные диоды, как только вывод отпускается и линия всплывает до 5 В. Сигнализация между разными напряжениями требует надлежащего преобразователя уровней; схему см. в Согласование уровней.