3.9. 开关与上拉/下拉电阻

GPIO 输出用于驱动外部硬件。GPIO 输入则相反:摄像头读取引脚上的电压,并将其报告为 01。最简单的输入设备是一个开关——而要让它能够被可靠地读取,除了开关本身之外还需要一个电子元件。

3.9.1. 开关与悬空输入

开关是一个机械触点:两片金属,开关闭合时相互接触,断开时彼此分离。从电气角度看,这就是整个器件。它内部没有电压源;单独的开关只能提供“接通”或“断开”。

把开关直接接在 GPIO 引脚和地之间,意味着引脚处于:

  • 0 V——当开关闭合时(此时连到了地)。

  • 悬空——当开关断开时(什么都没连接)。

悬空引脚没有确定的电压。输入会读到它附近恰好出现的任何东西——来自附近信号的串扰、来自电源的噪声,甚至是靠近导线的手指上的静电。value() 每秒会返回多次不可预测的 01 的混合值。

3.9.2. 上拉与下拉电阻

解决办法是上拉/下拉电阻:一个高阻值电阻(通常为 10 kΩ 到 100 kΩ),在开关断开时把输入连接到一个已知的电平轨上。

两张并排的电路图。左:一个上拉 电路,电阻从输入引脚向上连到 电源,开关从输入引脚向下连到 GND。 右:一个下拉电路,电阻从 输入引脚向下连到 GND,开关从输入引脚 向上连到电源。

用于开关输入的上拉(左)和下拉(右)配置。

  • 上拉。电阻把输入连接到电源轨。当开关断开时,只有很小的电流通过电阻流过,引脚读为高电平。当开关闭合时,它把引脚短接到地;引脚读为低电平。该电阻限制了原本会在开关闭合时从电源流向地的电流。

  • 下拉。镜像情况:电阻把输入连接到地,而开关连接到电源。断开读为低电平,闭合读为高电平。

上拉是更常见的约定——即“低电平有效”的按钮。MCU 自身提供了内置的上拉和下拉,可以通过 Pin.PULL_UPPin.PULL_DOWN 启用,从而完全省去外部电阻。