项目: 我正在创建一个灯开关面板来控制我的LIFX WiFi灯。我有3个按钮连接到GPIO引脚6,20和22,我按下按钮时使用GPIO.add_event_detect进行捕获。
问题: 我的问题是,如果我按下一个按钮,有时它会触发一个或多个其他频道。例如,按下按钮通道6也将触发20和/或22.奇怪的是,它在80%的时间内完美地工作,所以我真的不相信它的任何物理信号,如信号穿过电线。我已经开了两个星期了。
我尝试过的事情:最初我制作了一个小型的原型板,我将其焊接到一个40针的头部,我认为有可能有一根电线正在穿过导致这个幻象按钮按下。然后我在亚马逊上买了一块20美元的电路板,每个GPIO引脚都有螺丝端子......同样的问题。我尝试将我正在使用的GPIO引脚切换到电路板上,以防万一它们正在穿越。
我已尝试更新GPIO库,但我有最新版本。
我尝试过不同的按钮,看看它们是否有问题。
我已经检查过,按下一个按钮不会使其他按钮摆动到足以触发它们。
我已尝试使用GPIO.input(频道)查看按钮是否在buttonPressed回调中被按下但多次没有按下按钮按下按钮(即使是我实际按下的按钮)。
我尝试删除LIFX局域网库和我启动的TCP服务器的其他代码。
按钮被拧成一块木头,它们之间有几英寸,所以我知道电线没有穿过那里。
接下来我要尝试换到另一个PI,但是我把所有东西都搞砸到一个柜子里很难到达。
设置: Raspberry Pi 2 B + Python 2.7
代码: 我省略了不相关的代码,以便于阅读
import os
import sys
from time import sleep
import time
import random
import threading
import json
import itertools, glob
from socket import error as SocketError
from TcpClient import *
from lifxlan import BLUE, CYAN, GREEN, LifxLAN, ORANGE, PINK, PURPLE, RED, YELLOW
from itertools import cycle
import RPi.GPIO as GPIO
BUTTON_1 = 6
BUTTON_2 = 20
BUTTON_3 = 22
# Setup Network
HOST = ''
PORT = 9998
GPIO.setmode(GPIO.BCM)
GPIO.setup(BUTTON_1, GPIO.IN, pull_up_down=GPIO.PUD_UP)
GPIO.setup(BUTTON_2, GPIO.IN, pull_up_down=GPIO.PUD_UP)
GPIO.setup(BUTTON_3, GPIO.IN, pull_up_down=GPIO.PUD_UP)
lifx = None
currentScene = None
def stopScene():
...
def setScene(lan, scene):
...
def lightsOn(lan):
...
def lightsOff(lan):
...
class Message(object):
...
class Client(threading.Thread):
...
class Server(object):
...
def buttonPressed(channel):
global lifx
global currentScene
global BUTTON_1
global BUTTON_2
print("Button Pressed: " + str(channel));
lifx = LifxLAN(None)
print("Discovering Lights...")
numLights = len(lifx.get_lights())
print("Lights discovered: " + str(numLights))
GPIO.add_event_detect(BUTTON_1, GPIO.RISING, callback=buttonPressed, bouncetime=1000)
GPIO.add_event_detect(BUTTON_2, GPIO.RISING, callback=buttonPressed, bouncetime=1000)
GPIO.add_event_detect(BUTTON_3, GPIO.RISING, callback=buttonPressed, bouncetime=1000)
server = Server(HOST, PORT)
server.start(10)
示例输出:仅按按钮6(图片中的左按钮)
Discovering Lights...
Lights discovered: 2
[SERVER] Starting...
[SERVER] Listening
Button Pressed: 6
Button Pressed: 20
示例输出:再次按下按钮6
Discovering Lights...
Lights discovered: 0
[SERVER] Starting...
[SERVER] Listening
Event: 22
Event: 20
Event: 6