给学生做的一个智能家居的教程: 采用树莓派作为服务器,我们通过访问服务器的方法,控制树莓派的I/O口的高低电平,I/O口接上继电器(实现低压控制高压),继电器上你就可以随意接上你想控制的家用电器啦!
直接点击网页页面上的按钮就可以控制家电了!
下面是页面效果图:
教程
- 安装FLASK
使用Flask(http://flask.pocoo.org/)这个Python 的Web 框架把Raspberry Pi 变为一个动态Web 服务器。在命令行上输入下面的命令安装:
pi@raspberrypi~@sudo pip install flask
2.编写python程序
创建一个名为WebLight.py的文件,写入以下代码:
import RPi.GPIO as GPIO
from flask import Flask, render_template, request
app = Flask(__name__)
GPIO.setmode(GPIO.BCM)
pins = {
24 : {‘name‘ : ‘TV‘, ‘state‘ : GPIO.LOW},
25 : {‘name‘ : ‘Light‘, ‘state‘ : GPIO.LOW}
}
for pin in pins:
GPIO.setup(pin, GPIO.OUT)
GPIO.output(pin, GPIO.LOW)
@app.route("/")
def main():
for pin in pins:
pins[pin][‘state‘] = GPIO.input(pin)
templateData = {
‘pins‘ : pins
}
return render_template(‘main.html‘, **templateData)
@app.route("/<changePin>/<action>")
def action(changePin, action):
changePin = int(changePin)
deviceName = pins[changePin][‘name‘]
if action == "on":
GPIO.output(changePin, GPIO.HIGH)
message = "Turned " + deviceName + " on."
if action == "off":
GPIO.output(changePin, GPIO.LOW)
message = "Turned " + deviceName + " off."
if action == "toggle":
GPIO.output(changePin, not GPIO.input(changePin))
message = "Toggled " + deviceName + "."
for pin in pins:
pins[pin][‘state‘] = GPIO.input(pin)
templateData = {
‘message‘ : message,
‘pins‘ : pins
}
return render_template(‘main.html‘, **templateData)
if __name__ == "__main__":
app.run(host=‘0.0.0.0‘, port=80, debug=True)
如果我们还想再加一个可以端口控制电器,很简单我们可以这样去添加:
把
pins = {
24 : {‘name‘ : ‘TV‘, ‘state‘ : GPIO.LOW},
25 : {‘name‘ : ‘Light‘, ‘state‘ : GPIO.LOW}
}
改为
pins = {
24 : {‘name‘ : ‘TV‘, ‘state‘ : GPIO.LOW},
25 : {‘name‘ : ‘Light‘, ‘state‘ : GPIO.LOW}
26 : {‘name‘ : ‘Coffee Maker‘, ‘state‘ : GPIO.LOW}
}
3.编写html文件
在WebLight.py 所在的目录下,创建一个名为templates 的子目录。在templates 子目录中,创建一个名为
main.html 的文件并输入以下的代码:
这个HTML 页面模板中所有括号的部分会被解析为变量名,在Python 脚本调用render_template 函数时,会被实际的数据所替换。
<!DOCTYPE html>
<head>
<title>家居智能控制</title>
</head>
<body>
<h1>家庭自动化项目</h1>
<img src="http://www.5qdd.com/files/all/121207/6-12120G43028.jpg" border="0" widgth="440" height="230"></a>
<h2>学生姓名: <font size ="6" color="red" >张三</font> </h2>
{% for pin in pins %}
<p>The {{ pins[pin].name }}
{% if pins[pin].state == true %}
(<a href="/{{pin}}/off">关闭</a>)
{% else %}
(<a href="/{{pin}}/on">打开</a>)
{% endif %}
</p>
{% endfor %}
{% if message %}
<h3>{{ message }}</h3>
{% endif %}
</body>
</html>
解析:
家居智能控制
“家居智能控制”是网页的标题,可以换成你喜欢的标题
4.启动服务器
pi@raspberrypi~$sudo python WebLight.py
*Running on http://0.0.0.0:80/
*Restarting with reloader
最后:把继电器接在控制的I/O上,在局域网内登陆树莓派的IP地址,就实现了网络控制家用电器啦!。。
时间: 2024-11-08 16:31:16