gpt4 book ai didi

javascript - 我正在尝试找到一种在服务器端使用 GPIO 输入将客户端重定向到另一个网页的方法 rpi, RPi.GPIO, python,flask,j s

转载 作者:太空宇宙 更新时间:2023-11-03 20:20:18 28 4
gpt4 key购买 nike

我正在从事密室逃脱项目。实际上,我试图创建的行为如下:

网络浏览器以通常的方式显示网络应用程序的一部分。从此时起,客户端上将不再有键盘/鼠标的输入。我已经使用 JS 解决了基于时间的更改,因此我可以加载 Web 应用程序,并且在一段时间后 JS 重定向到另一个应用程序路由。这就是我开始挣扎的地方,以及基于时间的重定向,我希望服务器端有一个 GPIO 输入,以使浏览器重定向到另一个应用程序路由。

我正在使用线程,因此当应用程序路由函数运行时,它会启动在等待 GPIO 输入的函数上运行的线程。 waitfortrigger 函数正常工作并运行,直到我尝试返回重定向。此时,我在 Flask 调试日志中收到未知上下文错误。我可以使用 app.app_contextapp.app_context.push 修复该错误。此时,waitfortrigger 函数运行时不会出现错误,但不会导致客户端重定向。我也尝试过使用 copy_current_context 装饰器,但不太了解如何使用它并且没有成功。您可能会注意到,我使用 URL 进行重定向,而不是 url_for 函数。那是因为没有客户端请求 url_for 无法构造我尝试重定向到的 URL。对于我想要做的事情来说,使用完整的 URL 确实不是问题。

我认为我正确地说它在客户端不起作用的原因是因为请求不是来自客户端并且位于与主应用程序不同的线程中,因此它不会了解要重定向的内容。

这是我尝试的代码的简化版本:

from flask import Flask, render_template, redirect, url_for, session, logging
import RPi.GPIO as GPIO
import threading

app = Flask(__name__)
input_pin = 18

def gpio_setup():
GPIO.setmode(GPIO.BCM)
GPIO.setup(input_pin, GPIO.IN, pull_up_down=GPIO.PUD_UP)

def waitfortrigger():
while GPIO.input(input_pin) == GPIO.HIGH:
continue
else:
con.push()
return redirect('http://192.168.0.17:5000/page2')

@app.route('/')
def home():
trig_thread.start()
global con
con = app.app_context()
return render_template('home.html')

@app.route('/page2')
def page2():
GPIO.cleanup()
return render_template('page2.html')

if __name__ == '__main__':
gpio_setup()
app.secret_key='test'
trig_thread = threading.Thread(target=waitfortrigger)
app.run(debug=True, host='0.0.0.0')

我现在在想:也许有一种方法可以使用 waitfortrigger 函数在服务器端看到 GPIO 输入时更新某些内容,然后用 JS 监视某些内容,然后重定向在客户端的 JS 中?

或者也许使用 Flask 作为网络应用程序并不是最好的解决方案?我正在边学习边学习,因此非常感谢任何建议。

最佳答案

最后我还是想办法做到了这一点......从 rpi GPIO 获取输入的函数现在创建一个文件。在我的主应用程序中,我使用 if 语句创建了一个新的 Flask 路径。如果文件不存在,该函数将返回 404。在客户端的 js 中,我查询 url,如果它返回 200(仅当文件存在时才会发生),它会进行重定向。

有效地使更改服务器端重定向客户端成为可能。

我将输入更改为 pwm,并有效地创建了一个安全的弹子锁,当正确输入代码时,它会重定向逃生室屏幕上显示的 Web 应用程序。

感谢花时间纠正我原来问题中的拼写和语法的人。

现在,如果我能弄清楚为什么我的 rpi 会双重执行我的代码,嗯

关于javascript - 我正在尝试找到一种在服务器端使用 GPIO 输入将客户端重定向到另一个网页的方法 rpi, RPi.GPIO, python,flask,j s,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58208789/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com