6. GPIO 引脚

将电路板连接到外部世界并控制其他组件的方法是通过 GPIO 引脚。并非所有引脚都可用,大多数情况下只能使用引脚 0、2、4、5、12、13、14、15 和 16。

引脚在机器模块中可用,因此请确保先导入它。然后您可以使用以下方法创建一个引脚:

>>> 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()

6.1. 外部中断

除了 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 代码。因此,您的回调函数的功能有限(例如,它们无法分配内存),并且应该尽可能简短。