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 代码。因此,回调函数在它们能做什么(例如,它们不能分配内存)方面受到限制,并且应该尽可能短和简单。