此篇为《树莓派使用基础》 中,RPI.GPIO Input功能高级应用技巧。GPIO的简单使用请参考博文树莓派3B+ GPIO输入输出使用
目前有几种途径可以在程序中获得 GPIO 的输入信息。
第一种也是最简易的一种,在某个时间点检查输入值。这即是所谓的“轮询(polling)”,而且如果程序在错误的时间里进行了读取,可能会错过某个输入值。在循环中运用轮询,有可能使处理器资源紧张。
另一种对 GPIO 输入进行响应的方式为“中断(interruots)”(边缘检测(edge detection))。边缘可以是从 HIGH 到 LOW 的过度(下降临界值(falling edge))或从 LOW 到 HIGH 的过度(上升临界值(rising edge))。
上拉/下拉电阻
如果在输入针脚上没有连接任何元件,那么它将是“浮动(float)”的。换句话说,因为没有连接任何元件,在按下按钮或开关之前,读取的值是没有意义的。由于电源的波动,获取到的值可能会有很大的变化。
为了解决这个问题,我们需要使用上拉/下拉电阻。这样,我们就可设定输入的默认值了。在这里,可以使用硬件或软件对电阻进行上拉/下拉。使用硬件方式,将一个 10K 的电阻连接在输入通道与 3.3V(上拉)或 0V(下拉)之间是常用的做法。而 RPi.GPIO 也允许您通过软件的方式对配置 Broadcom SOC 来达到目的:
GPIO.setup(channel, GPIO.IN, pull_up_down=GPIO.PUD_UP)
或者
GPIO.setup(channel, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)
通道编号是基于所使用的编号系统所指定的(BOARD 或 BCM)。