如何检测 GPIO 输入的变化 raspberry pi

How to detect change in GPIO input raspberry pi

有没有一种方法可以在不使用无限循环的情况下检测 raspberry pi GPIO 的变化?

您可以使用以下方法检测上升或下降:

GPIO.add_event_detect(channel, GPIO.RISING, callback=my_callback)

但是您一次只能将事件检测器设置为下降或上升。有没有办法不在无限循环中检查输入?

这个 link 可能会有帮助 raspberry-gpio-python 基本上只是使用回调在上升沿或下降沿做任何你想做的事情而不是轮询(你所描述的)

您可以在 event_detect 上使用线程回调。根据 raspberry-gpio-python,您可以使用类似这样的东西。

GPIO.add_event_detect(channel, GPIO.RISING, callback=my_callback)

其中事件可以是 GPIO.RISINGGPIO.FALLINGGPIO.BOTHmy_callback 是一个正常的 python 函数,其行为类似于一个 ISR 运行 在不同的线程中。

希望对您有所帮助。

如果你有一个简单的 MCP3004 或 MCP3008 IC,它是一个模数转换器,你可以用输入做更多的事情。下面是一些示例代码,可帮助您入门。 More info on ADC's here 以及如何将它们连接到您的 pi

import spidev

#this fucntion can be used to find out the ADC value on ADC 0
def readadc_0(adcnum_0):
    if adcnum_0 > 7 or adcnum_0 < 0:
        return -1
    r_0 = spi_0.xfer2([1, 8 + adcnum_0 << 4, 0])
    adcout_0 = ((r_0[1] & 3) << 8) + r_0[2]
    return adcout_0

reading= readadc_0(0))

根据 ADC 的分辨率,您必须进行一些计算才能将读数转换为电压