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:
pin.value(1)/pin.value(0)– явная форма.
Вызов 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 В. Сигнализация между разными напряжениями требует надлежащего преобразователя уровней; схему см. в Согласование уровней.