树莓派-Web控制家电

给学生做的一个智能家居的教程: 采用树莓派作为服务器,我们通过访问服务器的方法,控制树莓派的I/O口的高低电平,I/O口接上继电器(实现低压控制高压),继电器上你就可以随意接上你想控制的家用电器啦!

直接点击网页页面上的按钮就可以控制家电了!

下面是页面效果图:
技术分享

教程


  1. 安装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地址,就实现了网络控制家用电器啦!。。

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。