MicroPython:Платы/ESP8266/Руководство по MicroPython для ESP8266/GPIO-контакты: различия между версиями

Материал из Онлайн справочника
Перейти к навигацииПерейти к поиску
Нет описания правки
 
Строка 9: Строка 9:
Эти контакты доступны в модуле machine, так что сначала убедитесь, что вы его импортировали. Затем вы можете создать контакт, используя:
Эти контакты доступны в модуле machine, так что сначала убедитесь, что вы его импортировали. Затем вы можете создать контакт, используя:


<syntaxhighlight lang="python" enclose="div">
<syntaxhighlight lang="python">
>>> pin = machine.Pin(0)
>>> pin = machine.Pin(0)
</syntaxhighlight>
</syntaxhighlight>
Строка 15: Строка 15:
Здесь ''«0»'' – это контакт, к которому вы хотите получить доступ. Обычно вам также нужно задать, выходным он будет или входным, что делается при его создании. Чтобы сделать входной контакт, используйте:
Здесь ''«0»'' – это контакт, к которому вы хотите получить доступ. Обычно вам также нужно задать, выходным он будет или входным, что делается при его создании. Чтобы сделать входной контакт, используйте:


<syntaxhighlight lang="python" enclose="div">
<syntaxhighlight lang="python">
>>> pin = machine.Pin(0, machine.Pin.IN, machine.Pin.PULL_UP)
>>> pin = machine.Pin(0, machine.Pin.IN, machine.Pin.PULL_UP)
</syntaxhighlight>
</syntaxhighlight>
Строка 23: Строка 23:
Чтобы прочитать значение контакта, используйте:
Чтобы прочитать значение контакта, используйте:


<syntaxhighlight lang="python" enclose="div">
<syntaxhighlight lang="python">
>>> pin.value()
>>> pin.value()
0
0
Строка 30: Строка 30:
Контакт может вернуть ''«0»'' или ''«1»'' – в зависимости от того, к чему подключен. Чтобы создать выходной контакт, используйте:
Контакт может вернуть ''«0»'' или ''«1»'' – в зависимости от того, к чему подключен. Чтобы создать выходной контакт, используйте:


<syntaxhighlight lang="python" enclose="div">
<syntaxhighlight lang="python">
>>> pin = machine.Pin(0, machine.Pin.OUT)
>>> pin = machine.Pin(0, machine.Pin.OUT)
</syntaxhighlight>
</syntaxhighlight>
Строка 36: Строка 36:
Затем можно задать его значение. Вот первый способ:
Затем можно задать его значение. Вот первый способ:


<syntaxhighlight lang="python" enclose="div">
<syntaxhighlight lang="python">
>>> pin.value(0)
>>> pin.value(0)
>>> pin.value(1)
>>> pin.value(1)
Строка 43: Строка 43:
А вот второй:
А вот второй:


<syntaxhighlight lang="python" enclose="div">
<syntaxhighlight lang="python">
>>> pin.off()
>>> pin.off()
>>> pin.on()
>>> pin.on()
Строка 54: Строка 54:
Давайте сначала зададим функцию обратного вызова, в которой будет всего один аргумент – контакт, запускающий эту функцию. Задача этой функции будет лишь в печати названия контакта и уведомления о том, что его значение изменилось:
Давайте сначала зададим функцию обратного вызова, в которой будет всего один аргумент – контакт, запускающий эту функцию. Задача этой функции будет лишь в печати названия контакта и уведомления о том, что его значение изменилось:


<syntaxhighlight lang="python" enclose="div">
<syntaxhighlight lang="python">
>>> def callback(p):
>>> def callback(p):
...    print('значение изменилось', p)
...    print('значение изменилось', p)
Строка 61: Строка 61:
Затем мы создадим два контакта, сделав их входными:
Затем мы создадим два контакта, сделав их входными:


<syntaxhighlight lang="python" enclose="div">
<syntaxhighlight lang="python">
>>> from machine import Pin
>>> from machine import Pin
>>> p0 = Pin(0, Pin.IN)
>>> p0 = Pin(0, Pin.IN)
Строка 69: Строка 69:
И, наконец, мы должны сказать контактам, при каких условиях они должны запустить прерывание, и какую функцию нужно вызвать, если они обнаружат заданное событие:
И, наконец, мы должны сказать контактам, при каких условиях они должны запустить прерывание, и какую функцию нужно вызвать, если они обнаружат заданное событие:


<syntaxhighlight lang="python" enclose="div">
<syntaxhighlight lang="python">
>>> p0.irq(trigger=Pin.IRQ_FALLING, handler=callback)
>>> p0.irq(trigger=Pin.IRQ_FALLING, handler=callback)
>>> p2.irq(trigger=Pin.IRQ_RISING | Pin.IRQ_FALLING, handler=callback)
>>> p2.irq(trigger=Pin.IRQ_RISING | Pin.IRQ_FALLING, handler=callback)

Текущая версия от 20:05, 23 мая 2023

Перевод: Максим Кузьмин
Проверка/Оформление/Редактирование: Мякишев Е.А.


GPIO-контакты[1]

Ваша плата подключается к «внешнему миру» и управляет другими компонентами при помощи GPIO-контактов. Вы можете использовать не все контакты, в большинстве случаев вам доступны лишь 0, 2, 4, 5, 12, 13, 14, 15 и 16 контакты.

Эти контакты доступны в модуле machine, так что сначала убедитесь, что вы его импортировали. Затем вы можете создать контакт, используя:

>>> pin = machine.Pin(0)

Здесь «0» – это контакт, к которому вы хотите получить доступ. Обычно вам также нужно задать, выходным он будет или входным, что делается при его создании. Чтобы сделать входной контакт, используйте:

>>> pin = machine.Pin(0, machine.Pin.IN, machine.Pin.PULL_UP)

В последнем параметре можно указать PULL_UP или None – он отвечает за то, будет ли включен подтягивающий резистор или нет. Если не указывать этот параметр, по умолчанию в том параметре будет задано None (т.е. подтягивающий резистор будет выключен). Контакт GPIO16 нельзя переключить в режим подтягивающего резистора.

Чтобы прочитать значение контакта, используйте:

>>> pin.value()
0

Контакт может вернуть «0» или «1» – в зависимости от того, к чему подключен. Чтобы создать выходной контакт, используйте:

>>> pin = machine.Pin(0, machine.Pin.OUT)

Затем можно задать его значение. Вот первый способ:

>>> pin.value(0)
>>> pin.value(1)

А вот второй:

>>> pin.off()
>>> pin.on()

Внешние прерывания

Все контакты, кроме GPIO16, можно настроить на запуск аппаратного прерывания при изменении значения. Вы также можете задать код (функцию обратного вызова), который будет выполняться при этом прерывании.

Давайте сначала зададим функцию обратного вызова, в которой будет всего один аргумент – контакт, запускающий эту функцию. Задача этой функции будет лишь в печати названия контакта и уведомления о том, что его значение изменилось:

>>> def callback(p):
...     print('значение изменилось', p)

Затем мы создадим два контакта, сделав их входными:

>>> from machine import Pin
>>> p0 = Pin(0, Pin.IN)
>>> p2 = Pin(2, Pin.IN)

И, наконец, мы должны сказать контактам, при каких условиях они должны запустить прерывание, и какую функцию нужно вызвать, если они обнаружат заданное событие:

>>> p0.irq(trigger=Pin.IRQ_FALLING, handler=callback)
>>> p2.irq(trigger=Pin.IRQ_RISING | Pin.IRQ_FALLING, handler=callback)

Таким образом, контакт 0 будет срабатывать только по заднему фронту (т.е. когда значение сменится с «1» на «0»), а контакт 2 будет срабатывать и по заднему, и по переднему фронту (т.е. и при изменении с «1» на «0», и при изменении с «0» на «1»). Введя этот код, попробуйте применить к контактам 0 и 2 высокое и низкое напряжение, чтобы увидеть, как срабатывает заданное вами прерывание.

При обнаружении заданного события прерывание сработает и прервет любой код, работающий в данный момент (даже код Python). То есть функционал ваших функций обратного вызова ограничен (например, они не могут занимать память), поэтому они должны быть максимально короткими и простыми.

См.также

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