首页 > 解决方案 > 如何阻止错误的 GPIO 触发发生?

问题描述

我是与 Raspberry Pi 交互的新手,并且有一个用于发送 webhook 的 Pi,这样当有人按下我作为门铃放置的按钮时,我可能会收到警报。我已经把 webhook 全部整理好了,但是当按钮什么也没做时,我不断收到错误的 GPIO 触发器,这些触发器会向我发送钩子。

我尝试通过使用屏蔽线来消除噪音,在 Raspberry Pi 和按钮之间只使用大约 12 英寸左右的电线,甚至在回路中加入一个电阻电容电路,以尝试“硬件去抖”按钮。即使在之后在这些升级中,我看到了错误的按钮按下,尽管要少得多(每几周一次,而不是每几天一次)。

我正在使用的代码

import RPi.GPIO as GPIO
import sys
import os

GPIO.setmode(GPIO.BOARD)


buttonPin = 16

input_state1 = True
last_state1 = True


GPIO.setup(buttonPin, GPIO.IN, pull_up_down=GPIO.PUD_UP)

try:
    while True:
        input_state1 = GPIO.input(16)
        if input_state1 != last_state1:
            os.system('python hook.py')
finally:
    GPIO.cleanup()

我希望不会看到错误的按钮按下,特别是因为我已经在使用内部上拉和硬件循环。我只是在这一点上迷路了

标签: pythonraspberry-pi

解决方案


last_state1 永远不会更新,因此当 input_state1 更改时,您的if input_state1 != last_state1:条件将变为 true,并且它将os.system('python hook.py')在 while 循环中一遍又一遍地触发。

解决方法是在调用last_state1 = input_state1后设置。os.system


推荐阅读