用树莓派自己动手打造一个智能车库开门器,这个想法听起来就非常酷。你只需要一台树莓派、一个继电器模块和几根连接线,就能通过智能手机远程控制车库门的开关。下面我们一步步把它实现出来。
所需组件
- 安装了 Raspbian 的树莓派板(这里以 Raspberry Pi 3 为例,系统使用 Raspbian Jessie)
- 继电器模块
- 连接电线
前提是你的树莓派已经刷好系统并能联网。如果还没准备好,可以先参考树莓派入门教程完成基础设置。这里我们直接用 HDMI 外接显示器操作;如果你没有显示器,也可以用 SSH 客户端(Putty)或 VNC 服务器通过笔记本远程连接。
电路原理图

将车库门的开门机构连接到继电器的输出端。这里为了演示,我们先用一个 LED 来代替实际的门机。

Raspberry Pi 中用于控制车库门的 Flask 设置
我们用 Flask 来搭建一个轻量级 Web 服务器。Flask 是 Python 的微框架,内置开发服务器和调试器,支持安全 cookie,对业余爱好者来说非常友好。通过它,我们可以在网页上发送命令给树莓派,控制继电器的通断,从而实现车库门的开关。
首先在树莓派中安装 Flask:
sudo apt-get update
sudo apt-get install python-pip python-flask
sudo pip install flask

为智能车库门开启器创建 Python 脚本
这个脚本是核心,负责与树莓派的 GPIO 交互并运行 Web 服务器。我们来一步步构建它。
先创建一个文件夹,并在里面新建一个 Python 文件 app.py:
mkdir garage_door
cd garage_door
nano app.py
在 Nano 编辑器中写入以下内容:
首先引入必要的库:
from flask import Flask, render_template, request
import RPi.GPIO as GPIO
app = Flask(__name__, static_url_path='/static')
然后定义一个字典,存储引脚编号、名称和状态:
pin = {
14 : {'name' : '车库门', 'state' : GPIO.LOW}
}
接着将引脚设为输出并初始化为低电平:
for pin in pins:
GPIO.setup(pin, GPIO.OUT)
GPIO.output(pin, GPIO.LOW)
创建主路由,读取引脚状态并传递给 HTML 模板:
@app.route("/")
def main():
for pin in pins:
pins[pin]['state'] = GPIO.input(pin)
templateData = {
'pins' : pins
}
return render_template('main.html', **templateData)
再创建一个路由处理来自 URL 的请求(包含引脚号和操作):
@app.route("//", methods=['GET', 'POST'])
def action(changePin, action):
changePin = int(changePin)
deviceName = pins[changePin]['name']
if action == "open":
GPIO.output(changePin, GPIO.HIGH)
if action == "close":
GPIO.output(changePin, GPIO.LOW)
for pin in pins:
pins[pin]['state'] = GPIO.input(pin)
templateData = {
'pins' : pins
}
return render_template('main.html', **templateData)
最后加上启动代码:
if __name__ == "__main__":
app.run(host='0.0.0.0', port=80, debug=True)
GPIO.cleanup()
保存文件(ctrl+x,按 Enter 确认)。至此 Python 脚本完成。
为 Raspberry Pi Webserver 创建 HTML 页面
在 garage_door 文件夹里再创建一个 templates 文件夹,并在其中新建一个 main.html 文件:

用 Nano 编写 HTML 代码。你可以自己设计样式,这里我们直接用一个第三方 CSS 方案(通过链接标签引入)。关键部分是创建一个按钮,能够发送打开/关闭命令,并实时显示当前状态。

完整的 HTML 代码可以参考上面的截图。保存文件后,整个 Web 服务器就准备好了。
运行与测试
打开终端,进入 garage_door 文件夹,运行:
sudo python app.py

然后打开浏览器,输入树莓派的 IP 地址(用 hostname -I 命令查看)。你会看到类似下面的页面:

确保继电器模块已经连接到树莓派。点击“打开”按钮,继电器就会吸合,LED 点亮(或者实际的车库门机构动作)。同时按钮文本会变为“关闭”,再点击一下即可断开继电器。整个状态实时同步显示。
要停止服务器,按 ctrl+c 即可。
将这个继电器接入市面上现成的开门器机构,你的智能手机就能轻松遥控车库门了。
