在本教程中,我們將使用 Raspberry Pi 構(gòu)建一個智能車庫開門器。這里將創(chuàng)建一個Raspberry Pi Web 服務(wù)器,以使用您的智能手機打開和關(guān)閉車庫門。
所需組件
安裝了 Raspbian 的樹莓派板
繼電器模塊
連接電線
假設(shè)您的 Raspberry Pi 已刷入操作系統(tǒng)并能夠連接到 Internet。如果沒有,請 在繼續(xù)之前遵循Raspberry Pi 入門教程。這里我們使用 Rasbian Jessie 安裝 Raspberry Pi 3。
在這里,使用 HDMI 電纜的外部顯示器用作與 Raspberry Pi 連接的顯示器。如果您沒有顯示器,您可以使用 SSH 客戶端(Putty)或 VNC 服務(wù)器使用筆記本電腦或計算機連接到樹莓派。在此處了解有關(guān)無頭設(shè)置 Raspberry Pi 的更多信息。
電路原理圖
將車庫門開啟機構(gòu)連接到繼電器的輸出端。在這里,為了演示目的,我們剛剛連接了一個帶繼電器的 LED。
Raspberry Pi 中用于控制車庫門的 Flask 設(shè)置
在這里,我們使用 Flask創(chuàng)建了一個 Web 服務(wù)器,它提供了一種 將命令從網(wǎng)頁發(fā)送到 Raspberry Pi 以通過網(wǎng)絡(luò)控制機器人的方法。Flask 允許我們通過網(wǎng)頁運行我們的 python 腳本,我們可以從 Raspberry Pi 向網(wǎng)絡(luò)瀏覽器發(fā)送和接收數(shù)據(jù),反之亦然。 Flask 是 Python 的微框架。這個工具是基于 Unicode 的,具有內(nèi)置的開發(fā)服務(wù)器和調(diào)試器、集成的單元測試支持、對安全 cookie 的支持及其易于使用,這些東西使它對業(yè)余愛好者很有用。
運行以下命令在您的 Raspberry Pi 中安裝燒瓶:
sudo apt-get 更新
sudo apt-get install python-pip python-flask
現(xiàn)在,運行 pip 命令來安裝 Flask 及其依賴項:
sudo pip 安裝燒瓶
您可以在此處了解有關(guān) 使用 Flask 編程的更多信息,還可以查看我們之前的項目,其中我們使用 Flask通過 webserver 控制機器人, 將消息從網(wǎng)頁發(fā)送到 Raspberry Pi , 并將重量值發(fā)送到 Smart Container 中的 Raspberry Pi。
現(xiàn)在,我們將為我們的車庫門 Web 服務(wù)器編寫一個 Python 腳本。
為智能車庫門開啟器創(chuàng)建 Python 腳本
該腳本將與我們的 Raspberry Pi GPIO 交互并設(shè)置 Web 服務(wù)器。所以,這是我們應(yīng)用程序的核心腳本。最后給出了完整的開門器Python腳本,這里我們解釋了它的幾個部分。
首先,制作一個文件夾。所有其他必需的文件夾應(yīng)僅在此文件夾中。運行以下命令以創(chuàng)建文件夾并在此文件夾內(nèi)創(chuàng)建名為app.py的 python 文件。
mkdirgarage_door cdgarage_door nano app.py
這將打開 Nano 編輯器,我們必須在其中編寫腳本。
首先包括重要的庫。
從燒瓶導(dǎo)入 RPi.GPIO 作為 GPIO 導(dǎo)入 Flask, render_template, request app = Flask(__name__, static_url_path='/static')
現(xiàn)在,創(chuàng)建一個字典作為引腳來存儲引腳編號、名稱和引腳狀態(tài)。您可以根據(jù)需要使用多個引腳。
pin = { 14 : {'name' : '車庫門', 'state' : GPIO.LOW} }
然后,將引腳設(shè)置為輸出并最初將其設(shè)為低電平。
?對于引??腳中的引腳: GPIO.setup(引腳,GPIO.OUT) GPIO.輸出(引腳,GPIO.LOW)
現(xiàn)在,創(chuàng)建一個 main 函數(shù)來讀取引腳狀態(tài)并將此狀態(tài)存儲在一個變量中。
@app.route("/") def main(): for pin in pin: pins[pin]['state'] = GPIO.input(pin) ..
我們必須將此數(shù)據(jù)傳遞給我們的 html 頁面,以便我們可以控制輸入按鈕的狀態(tài)。
return render_template('main.html', **templateData)
現(xiàn)在,創(chuàng)建一個函數(shù)來處理來自 URL 的請求,其中包含 pin 號和操作。
@app.route("http://", methods=['GET', 'POST']) def action(changePin, action):
將來自 URL 的 pin 轉(zhuǎn)換為整數(shù)。
changePin = int(changePin)
如果 URL 的操作部分是“打開”,則執(zhí)行以下操作。
if action == "open": GPIO.output(changePin, GPIO.HIGH) if action == "close": GPIO.output(changePin, GPIO.LOW)
您可以從本教程的末尾復(fù)制完整的腳本并使用 ctrl+x 保存它,然后按 Enter。我們已經(jīng)完成了 python 腳本?,F(xiàn)在,我們必須制作一個 HTML 頁面來與 python 腳本交互。
為 Raspberry Pi Webserver 創(chuàng)建 HTML 頁面
在同一個garage_door文件夾中,創(chuàng)建另一個名為templates的文件夾,并在該文件夾中使用以下命令創(chuàng)建一個.html 文件。
在nano文本編輯器中,編寫 html 代碼。您可以編輯頁面的
部分并根據(jù)您的選擇設(shè)置樣式。我剛剛使用了使用鏈接標(biāo)簽的第三方 css 方案。完整的 HTML 代碼如下:
這里重要的部分是創(chuàng)建一個按鈕來打開和關(guān)閉門,并為打開和關(guān)閉按鈕分配一個狀態(tài)。該按鈕將從 python 腳本發(fā)送和獲取 GPIO 狀態(tài)。
您可以在編輯器中使用上面給出的 HTML 代碼并保存它。現(xiàn)在 Web 服務(wù)器已準(zhǔn)備好啟動。
打開終端并導(dǎo)航到garage_door文件夾并運行以下命令
須藤蟒蛇app.py
打開瀏覽器并輸入您的樹莓派 IP 地址并回車。要查找您的 IP 地址,您可以在終端中運行以下命令。
主機名 -I
你會看到這樣的頁面。
確保繼電器模塊連接到樹莓派。按打開按鈕打開繼電器或打開車庫門。您還可以查看繼電器的狀態(tài)。一旦您打開繼電器,按鈕文本將更改為關(guān)閉以關(guān)閉繼電器?,F(xiàn)在,當(dāng)您再次單擊按鈕時,繼電器將關(guān)閉,按鈕文本將再次更改為打開。
要停止服務(wù)器,請按 ctrl+c 。
因此,只需將此繼電器連接到市場上現(xiàn)成的一些開門器機構(gòu),然后開始使用智能手機控制車庫門。
從燒瓶導(dǎo)入 RPi.GPIO 作為 GPIO
導(dǎo)入 Flask,render_template,請求
app = Flask(__name__, static_url_path='/static')
GPIO.setmode(GPIO.BCM)
引腳 = {
14 : {'name' : '車庫門', 'state' : GPIO.LOW}
}
用于引腳中的引腳:
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("http://", methods=['GET', 'POST'])
def action(changePin, action):
changePin = int(changePin)
deviceName = pin[changePin]['name']
if action == "open":
GPIO.output(changePin, GPIO.HIGH)
if action == "close":
GPIO.output(changePin, GPIO.LOW)
for pin in pins :
引腳[pin]['state'] = GPIO。輸入(引腳)
模板數(shù)據(jù) = {
“引腳”:引腳
}
return render_template('main.html', **templateData)
if __name__ == "__main__":
app.run(host='0.0.0.0', port=80, debug=True)
GPIO.cleanup()
-
物聯(lián)網(wǎng)
+關(guān)注
關(guān)注
2911文章
44828瀏覽量
375148 -
智能車庫
+關(guān)注
關(guān)注
0文章
9瀏覽量
7393
發(fā)布評論請先 登錄
相關(guān)推薦
評論