我是覆盆子pi和python编码的新手。我正在做一个学校项目。我已经找了一些教程和例子,但也许我错过了一些东西。我想构建一个基于Web服务器的gpio控制器。我正在使用烧瓶。为了进入这个,我开始使用这个例子。只需刷新页面即可打开和关闭LED。
所以问题是,我无法在Web服务器端看到响应值。它正在打开和关闭LED。但我想在网上看到这种情况。但我不能。我收到内部服务器错误。我正在给python和html代码。你能帮我解决这个问题。
from flask import Flask
from flask import render_template
import RPi.GPIO as GPIO
app=Flask(__name__)
GPIO.setmode(GPIO.BCM)
GPIO.setup(4, GPIO.OUT)
GPIO.output(4,1)
status=GPIO.HIGH
@app.route('/')
def readPin():
global status
global response
try:
if status==GPIO.LOW:
status=GPIO.HIGH
print('ON')
response="Pin is high"
else:
status=GPIO.LOW
print('OFF')
response="Pin is low"
except:
response="Error reading pin"
GPIO.output(4, status)
templateData= {
'title' : 'Status of Pin' + status,
'response' : response
}
return render_template('pin.html', **templateData)
if __name__=="__main__":
app.run('192.168.2.5')
基本上这条线就在我的html页面上。
<h1>{{response}}</h1>
我认为“回应”没有得到价值。这有什么不对?
答案 0 :(得分:2)
首先,它有助于在调试模式下运行它:
app.run(debug=True)
这将帮助您追踪任何被抑制的错误。
接下来看一下构建标题字符串的行:
'title' : 'Status of Pin' + status
如果启用调试模式,那么你应该看到一些东西,说int / bool无法隐式转换为str。 (Python不知道如何添加字符串和int / bool)。
为了解决这个问题,你应该明确地将状态转换为字符串:
'title' : 'Status of Pin' + str(status)
或者更好:
'title' : 'Status of Pin: {}'.format(status)
答案 1 :(得分:0)
您的服务器在尝试创建字典时可能会抛出异常,因此templateData值将作为空值发送。
请注意,在此示例中,尝试连接不同类型的2个变量时抛出TypeError。
因此,在尝试组合变量之前,将变量包装在str(status)中会将状态变量强制转换为字符串重新进行。
[root@cloud-ms-1 alan]# cat add.py
a = 'one'
b = 2
print a + b
[root@cloud-ms-1 alan]# python add.py
Traceback (most recent call last):
File "add.py", line 6, in <module>
print a + b
TypeError: cannot concatenate 'str' and 'int' objects
[root@cloud-ms-1 alan]# cat add.py
a = 'one'
b = str(2)
print a + b
[root@cloud-ms-1 alan]# python add.py
one2