信号类 – 控制和检测外部 I/O 设备

Signal 类是该类的简单扩展Pin 。与只能处于“绝对”0 和 1 状态的 Pin 不同,信号可以处于“断言”(on)或“解除断言”(off)状态,同时反转(低电平有效)或不反转。换句话说,它为 Pin 功能添加了逻辑反转支持。虽然这似乎是一个简单的补充,但它正是以跨不同电路板可移植的方式支持各种简单数字设备所需要的,这是 MicroPython 的主要目标之一。无论不同的用户是否有高电平有效或低电平有效的 LED、常开或常闭继电器 - 您都可以开发一个单独的、外观漂亮的应用程序,可以与它们中的每一个一起使用,并在几行代码中捕获硬件配置差异您的应用程序的配置文件。

例子:

from machine import Pin, Signal

# Suppose you have an active-high LED on pin 0
led1_pin = Pin(0, Pin.OUT)
# ... and active-low LED on pin 1
led2_pin = Pin(1, Pin.OUT)

# Now to light up both of them using Pin class, you'll need to set
# them to different values
led1_pin.value(1)
led2_pin.value(0)

# Signal class allows to abstract away active-high/active-low
# difference
led1 = Signal(led1_pin, invert=False)
led2 = Signal(led2_pin, invert=True)

# Now lighting up them looks the same
led1.value(1)
led2.value(1)

# Even better:
led1.on()
led2.on()

以下是应使用 Signal vs Pin 时的指南:

  • 使用信号:如果您想控制简单的开/关(包括软件 PWM!)设备,如 LED、多段指示器、继电器、蜂鸣器,或读取简单的二进制传感器,如常开或常闭按钮,拉高或拉低、簧片开关、湿气/火焰探测器等。总而言之,如果您有一个需要 GPIO 访问的真实物理设备/传感器,您可能应该使用信号。

  • 使用 Pin:如果您实现更高级别的协议或总线以与更复杂的设备进行通信。

Pin 和 Signal 之间的区别来自上面的用例和 MicroPython 的架构:Pin 提供最低的开销,这在位碰撞协议时可能很重要。但是 Signal 在 Pin 之上增加了额外的灵活性,代价是很小的开销(比在 Python 中手动实现高电平有效和低电平有效设备差异要小得多!)。此外,Pin 是一个低级对象,需要为每个支持板实现,而 Signal 是一个高级对象,一旦实现 Pin 就免费提供。

如果有疑问,请尝试使用 Signal!再一次,它使开发人员无需处理诸如低电平有效信号和高电平有效信号等令人兴奋的差异,并允许其他用户共享和享受您的应用程序,而不是因为它不起作用而感到沮丧对他们来说只是因为他们的 LED 或继电器的接线方式略有不同。

构造函数

class machine.Signal(pin_obj, invert=False)
class machine.Signal(pin_arguments..., *, invert=False)

创建一个信号对象。有两种方法可以创建它:

  • 通过包装现有的 Pin 对象 - 适用于任何板的通用方法。

  • 通过将所需的 Pin 参数直接传递给 Signal 构造函数,无需创建中间 Pin 对象。可用于许多电路板,但并非所有电路板。

论据是:

  • pin_obj是现有的 Pin 对象。

  • pin_arguments 是可以传递给 Pin 构造函数的相同参数。

  • invert - 如果为真,信号将被反转(低电平有效)。

方法

Signal.value([x])

此方法允许设置和获取信号的值,具体取决于是否x 提供了参数。

如果省略参数,则此方法获取信号电平,1 表示信号被断言(活动)和 0 - 信号无效。

如果提供了参数,则此方法设置信号电平。参数x可以是任何转换为​​布尔值的东西。如果转换为 True,则信号有效,否则无效。

信号有效与底层引脚上的实际逻辑电平之间的对应关系取决于信号是否反转(低电平有效)。对于非反相信号,有效状态对应逻辑 1,无效 - 对应逻辑 0。对于反相/低电平有效信号,有效状态对应逻辑 0,无效状态对应逻辑 1。

Signal.on()

激活信号。

Signal.off()

停用信号。