ESP8266——GPIO和外部中断

1.GPIO

  将电路板连接到外部世界并控制其他组件的方法是通过 GPIO 引脚。并非所有引脚都可以使用,在大多数情况下,只能使用引脚 0、2、4、5、12、13、14、15 和 16。分别对应的是开发板上引脚的GPIO0、GPIO2、...GPIO15和GPIO16。

 

图1-1 NodeMCU开发板引脚示意图

 

针脚在机器模块中可用,因此请确保首先导入该引脚。然后,您可以使用:

>>> pin = machine.Pin(0)

此处,"0"是您要访问的引脚。通常,您希望将引脚配置为输入或输出,并在构造引脚时执行此操作。要使用输入引脚:

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

对于输入拉取模式,可以使用PULL_UP或无。如果未指定,则默认为"无",即无拉电阻。GPIO16 没有上拉模式。您可以使用以下功能读取引脚上的值:

>>> pin.value()
0

板上的引脚可能会在此处返回 0 或 1,具体取决于其连接的内容。要使用输出引脚:

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

然后使用:

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

或:

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

 2.外部中断

除数字 16 外,所有引脚都可以配置为在输入发生变化时触发硬中断。您可以设置要在触发器上执行的代码(回调函数)。

让我们首先定义一个回调函数,该函数必须采用单个参数,即触发该函数的引脚。我们将使函数只打印引脚:

>>> def callback(p):
...     print('pin change', 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 设置为仅在输入的下降沿(当它从高到低)上触发,并将引脚 2 设置为在上升和下降边缘触发。输入此代码后,您可以将高电压和低电压应用于引脚 0 和 2 以查看正在执行的中断。

一旦事件发生,硬中断将触发,并将中断任何正在运行的代码,包括 Python 代码。因此,回调函数在它们能做什么(例如,它们不能分配内存)方面受到限制,并且应该尽可能短和简单。

posted on 2019-12-05 09:36  iBoundary  阅读(6041)  评论(0编辑  收藏  举报

导航