Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/api/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 仪表板中GPIO引脚的后台监控_Python_Plotly Dash_Gpio - Fatal编程技术网

Python 仪表板中GPIO引脚的后台监控

Python 仪表板中GPIO引脚的后台监控,python,plotly-dash,gpio,Python,Plotly Dash,Gpio,我担心这是一个非常基本的问题,在这里我找不到正确的搜索词,因此任何帮助都将不胜感激 我想经常监控一个覆盆子的GPIO(24)引脚。在最简单的示例中,我将其连接到一个按钮,并希望显示dash站点上的按下次数。我用dash_core_组件实现了这一点。如图所示。但是,这也会每隔一段时间刷新页面。我想不断监测GPIO引脚,只显示网站刷新当前的计数值 import RPi.GPIO as GPIO import dash import dash_core_components as dcc import

我担心这是一个非常基本的问题,在这里我找不到正确的搜索词,因此任何帮助都将不胜感激

我想经常监控一个覆盆子的GPIO(24)引脚。在最简单的示例中,我将其连接到一个按钮,并希望显示dash站点上的按下次数。我用dash_core_组件实现了这一点。如图所示。但是,这也会每隔一段时间刷新页面。我想不断监测GPIO引脚,只显示网站刷新当前的计数值

import RPi.GPIO as GPIO
import dash
import dash_core_components as dcc
import dash_html_components as html
from dash.dependencies import Input, Output

globalCounter = 0
GPIO.setwarnings(False)
GPIO.setmode(GPIO.BCM)
GPIO.setup(24, GPIO.IN) #connected to 3.3V Pin of the pi, separated by a button.

app = dash.Dash()
app.layout = html.Div(
    html.Div([
        html.H1(id="live-update-text"),
        dcc.Interval(
            id='interval-component',
            interval=1*1000, # in milliseconds
            n_intervals=0
        )
    ])
)


@app.callback(Output('live-update-text', 'children'),
              Input('interval-component', 'n_intervals'))
def update_metrics(n):
    global globalCounter
    if GPIO.input(24) == 1:
        globalCounter += 1
    return "Number of presses:  "+str(globalCounter)

if __name__ == '__main__':
    app.run_server(debug=True, host='0.0.0.0', port=8080)

为此,我想我需要将app.layout链接到一个函数(如中的2.示例),但我如何始终监视按钮是否按下?

找到了一个线程解决方案。GPIO在线程中的while循环中进行监控,仪表板布局链接到函数,如文档中所述

import dash
import dash_core_components as dcc
import dash_html_components as html
import RPi.GPIO as GPIO
import threading

gC = 0
GPIO.setmode(GPIO.BCM)
GPIO.setup(24, GPIO.IN)
def thread_function():
   isButtonPressed = False #bool to avoid multi registration per press
   while True:
       global gC
       if GPIO.input(24) == 1 and not isButtonPressed:
           isButtonPressed = True
           gC += 1
       elif GPIO.input(24) == 0 and isButtonPressed:
           isButtonPressed = False

x = threading.Thread(target=thread_function)
x.start()


app = dash.Dash()
colors = {
    'background': '#ff0000',
    'text': '#7FDBFF'
}
def sever_layout():
    return  html.Div(style={'backgroundColor': colors['background']}, children=[
        html.H1(children='Counter '+str(gC))
        ])
app.layout = sever_layout

if __name__ == '__main__':
    app.run_server(debug=True, host='0.0.0.0', port=8080)

为True时:
线程函数中的函数不正确。我还建议在丑陋的RPi库中,或者通过切换到标准的
libgpiod
来查看监视GPIO行的适当API。