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

Материал из Онлайн справочника
Перейти к навигации Перейти к поиску

(Новая страница: «{{MicroPython/Панель перехода}} {{Перевод от Сubewriter}} {{Myagkij-редактор}} <syntaxhighlight lang="python" enclose="div"> =С...»)
 
 
Строка 2: Строка 2:
 
{{Перевод от Сubewriter}}
 
{{Перевод от Сubewriter}}
 
{{Myagkij-редактор}}
 
{{Myagkij-редактор}}
 +
 +
=GPIO-контакты<ref>[http://docs.micropython.org/en/latest/esp8266/tutorial/pins.html docs.micropython.org - GPIO Pins]</ref>=
 +
 +
Ваша плата подключается к ''«внешнему миру»'' и управляет другими компонентами при помощи GPIO-контактов. Вы можете использовать не все контакты, в большинстве случаев вам доступны лишь ''0, 2, 4, 5, 12, 13, 14, 15 и 16'' контакты.
 +
 +
Эти контакты доступны в модуле machine, так что сначала убедитесь, что вы его импортировали. Затем вы можете создать контакт, используя:
  
 
<syntaxhighlight lang="python" enclose="div">
 
<syntaxhighlight lang="python" enclose="div">
 +
>>> pin = machine.Pin(0)
 +
</syntaxhighlight>
 +
 +
Здесь ''«0»'' – это контакт, к которому вы хотите получить доступ. Обычно вам также нужно задать, выходным он будет или входным, что делается при его создании. Чтобы сделать входной контакт, используйте:
 +
 +
<syntaxhighlight lang="python" enclose="div">
 +
>>> pin = machine.Pin(0, machine.Pin.IN, machine.Pin.PULL_UP)
 +
</syntaxhighlight>
 +
 +
В последнем параметре можно указать ''PULL_UP'' или ''None'' – он отвечает за то, будет ли включен [[подтягивающий резистор]] или нет. Если не указывать этот параметр, по умолчанию в том параметре будет задано ''None'' (т.е. [[подтягивающий резистор]] будет выключен). Контакт ''GPIO16'' нельзя переключить в режим подтягивающего резистора.
 +
 +
Чтобы прочитать значение контакта, используйте:
 +
 +
<syntaxhighlight lang="python" enclose="div">
 +
>>> pin.value()
 +
0
 +
</syntaxhighlight>
 +
 +
Контакт может вернуть ''«0»'' или ''«1»'' – в зависимости от того, к чему подключен. Чтобы создать выходной контакт, используйте:
 +
 +
<syntaxhighlight lang="python" enclose="div">
 +
>>> pin = machine.Pin(0, machine.Pin.OUT)
 +
</syntaxhighlight>
 +
 +
Затем можно задать его значение. Вот первый способ:
 +
 +
<syntaxhighlight lang="python" enclose="div">
 +
>>> pin.value(0)
 +
>>> pin.value(1)
 +
</syntaxhighlight>
 +
 +
А вот второй:
 +
 +
<syntaxhighlight lang="python" enclose="div">
 +
>>> pin.off()
 +
>>> pin.on()
 +
</syntaxhighlight>
 +
 +
==Внешние прерывания==
 +
 +
Все контакты, кроме ''GPIO16'', можно настроить на запуск аппаратного прерывания при изменении значения. Вы также можете задать код (функцию обратного вызова), который будет выполняться при этом прерывании.
 +
 +
Давайте сначала зададим функцию обратного вызова, в которой будет всего один аргумент – контакт, запускающий эту функцию. Задача этой функции будет лишь в печати названия контакта и уведомления о том, что его значение изменилось:
 +
 +
<syntaxhighlight lang="python" enclose="div">
 +
>>> def callback(p):
 +
...    print('значение изменилось', p)
 +
</syntaxhighlight>
 +
 +
Затем мы создадим два контакта, сделав их входными:
 +
 +
<syntaxhighlight lang="python" enclose="div">
 +
>>> from machine import Pin
 +
>>> p0 = Pin(0, Pin.IN)
 +
>>> p2 = Pin(2, Pin.IN)
 +
</syntaxhighlight>
 +
 +
И, наконец, мы должны сказать контактам, при каких условиях они должны запустить прерывание, и какую функцию нужно вызвать, если они обнаружат заданное событие:
 +
 +
<syntaxhighlight lang="python" enclose="div">
 +
>>> p0.irq(trigger=Pin.IRQ_FALLING, handler=callback)
 +
>>> p2.irq(trigger=Pin.IRQ_RISING | Pin.IRQ_FALLING, handler=callback)
 +
</syntaxhighlight>
 +
 +
Таким образом, контакт ''0'' будет срабатывать только по заднему фронту (т.е. когда значение сменится с ''«1»'' на ''«0»''), а контакт ''2'' будет срабатывать и по заднему, и по переднему фронту (т.е. и при изменении с ''«1»'' на ''«0»'', и при изменении с ''«0»'' на ''«1»''). Введя этот код, попробуйте применить к контактам ''0'' и ''2'' высокое и низкое напряжение, чтобы увидеть, как срабатывает заданное вами прерывание.
 +
 +
При обнаружении заданного события прерывание сработает и прервет любой код, работающий в данный момент (даже код [[Python]]). То есть функционал ваших функций обратного вызова ограничен (например, они не могут занимать память), поэтому они должны быть максимально короткими и простыми.
  
 
=См.также=
 
=См.также=

Текущая версия на 12:25, 1 июля 2020

Перевод: Максим Кузьмин (Cubewriter) Контакты:</br>* Skype: cubewriter</br>* E-mail: cubewriter@gmail.com</br>* Максим Кузьмин на freelance.ru
Проверка/Оформление/Редактирование: Мякишев Е.А.


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). То есть функционал ваших функций обратного вызова ограничен (например, они не могут занимать память), поэтому они должны быть максимально короткими и простыми.

См.также

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