在這個(gè)項(xiàng)目中,我們將構(gòu)建自己的安全系統(tǒng),該系統(tǒng)可以檢測(cè)門(mén)/窗是否打開(kāi)。警報(bào)可以通過(guò)谷歌助手通過(guò)語(yǔ)音命令激活或關(guān)閉,當(dāng)檢測(cè)到入侵時(shí),它還會(huì)向您和您的親戚發(fā)送一封郵件,警告他們。很酷的是,整個(gè)東西都在云上運(yùn)行,因此可以從世界任何地方進(jìn)行控制。
所需材料
螺栓開(kāi)發(fā)板
面包板
霍爾效應(yīng)傳感器 (A3144)
引領(lǐng)
電容器 (50V, 10uF)
電阻10K
磁鐵
連接線
工作理念
Bolt 開(kāi)發(fā)板基于 Espressif 半導(dǎo)體著名的 ESP8266 Wi-Fi 模塊。但是這里它內(nèi)部運(yùn)行著自己的 Bolt 固件,這有助于我們通過(guò) Bolt 提供的 API 訪問(wèn) GPIO 引腳(數(shù)字讀/寫(xiě)、模擬讀、PWM 寫(xiě))等。由于這個(gè)事實(shí),Bolt 可以使用 JavaScript、HTML 甚至 Python 進(jìn)行編程。由于我們已經(jīng)有很多使用 Raspberry Pi 和 Python 的物聯(lián)網(wǎng)項(xiàng)目,我決定繼續(xù)使用 python。該項(xiàng)目可以進(jìn)一步擴(kuò)展以使用一些支持相機(jī)接口的微控制器來(lái)捕獲入侵者的圖像。
Bolt 有 5 個(gè) GPIO 引腳和 1 個(gè)模擬引腳,所有這些引腳都連接到云端。所以基本上要從這些引腳寫(xiě)入或讀取,我們必須使用 API 調(diào)用。在我們的硬件中,我們將在門(mén)上安裝一個(gè)霍爾效應(yīng)傳感器和磁鐵。當(dāng)門(mén)打開(kāi)時(shí),磁鐵會(huì)遠(yuǎn)離霍爾傳感器,傳感器會(huì)檢測(cè)到它,這可以通過(guò) API 調(diào)用讀取,我們可以觸發(fā)蜂鳴器。我們將在硬件部分對(duì)此進(jìn)行更多討論。
電路原理圖
下圖給出了這個(gè)基于物聯(lián)網(wǎng)的門(mén)警報(bào)的完整電路圖。原理圖是使用 Fritzing 創(chuàng)建的
2
連接非常簡(jiǎn)單,如果您有疑問(wèn),可以參考下表。完整的設(shè)置由直接連接到螺栓開(kāi)發(fā)板的 Micro-USB 電纜供電。
1
霍爾傳感器充當(dāng)輸入引腳,它將告訴電路板門(mén)是關(guān)閉還是打開(kāi)。連接到引腳 2的LED用于指示系統(tǒng)狀態(tài)。如果它處于活動(dòng)狀態(tài),則 LED 將發(fā)光,如果未激活,則 LED 將關(guān)閉。當(dāng)檢測(cè)到入侵時(shí),蜂鳴器被激活。到目前為止一切順利,但電容器 1 和 2 的用途是什么?它是如何用作輸入和輸出的???嗯……現(xiàn)在您可以將這些電容器視為記憶存儲(chǔ)元件。但!!為什么我們這里需要一個(gè)??我現(xiàn)在想告訴你,但如果我在本文后面向你解釋這一點(diǎn)會(huì)更有意義,所以請(qǐng)堅(jiān)持下去。
設(shè)置 Bolt IoT 模塊
在我們從這里開(kāi)始之前,我們必須設(shè)置 Bolt 硬件。這很容易做到,只需在您的手機(jī)上安裝 bolt 應(yīng)用程序并輸入您的 Wi-Fi 憑據(jù),以便您的 bolt 可以連接到您的 Wi-Fi,從而連接到互聯(lián)網(wǎng)。然后您可以訪問(wèn)云頁(yè)面以從那里獲取您的設(shè)備 ID 和 API 密鑰,一切順利。您可以訪問(wèn)BoltIOT 文檔以了解更多信息。我還建議使用它一段時(shí)間,因?yàn)檫€有其他功能,例如繪制圖形創(chuàng)建您自己的應(yīng)用程序等,我們不會(huì)在本文中介紹。
使用 Bolt IoT 硬件的 GPIO 引腳
正如我之前所說(shuō),Bolt 硬件的所有 GPIO 引腳都連接到云端,并且只能通過(guò) API 來(lái)控制(讀/寫(xiě))它們。API 詳細(xì)信息可以在我之前分享的文檔中找到。但是,讓我們以一個(gè)為例。讀取引腳狀態(tài)的 API 在文檔中進(jìn)行了解釋,如下所示
這里,我們感興趣的是API URL
https://cloud.boltiot.com/remote/44b2de6b-7e68-40e7-a27f-814b58afe008/digitalRead?pin=0&deviceName=BOLT13819450
這里的 API 密鑰是 44b2de6b-7e68-40e7-a27f-814b58afe008,設(shè)備 ID 是 BOLT13819450。但這是一個(gè)示例密鑰和 ID,與您的設(shè)備不同。您必須訪問(wèn) cloud.boltiot.com 以獲取您設(shè)備的設(shè)備 ID 和 API 密鑰。下面的快照可以幫助你。
獲得 API 密鑰和設(shè)備 ID 后,您只需將默認(rèn)值替換為您的值并在瀏覽器中加載 URL。您的瀏覽器將使用 PIN 的狀態(tài)回復(fù)
{“成功”:“1”,“價(jià)值”:“1”}或{“成功”:“1”,“價(jià)值”:“0”}
如果值為 1,則為高,如果為 0,則為低。同樣,您可以嘗試所有命令的 API 鏈接,例如數(shù)字讀取、寫(xiě)入、模擬寫(xiě)入、PWM 甚至串行通信。一旦你玩完它,讓我們繼續(xù)這個(gè)項(xiàng)目的實(shí)際程序。
準(zhǔn)備 Python 環(huán)境
正如我之前所說(shuō),bolt 可以使用 JavaScript、HTML 或 Python 進(jìn)行編程。在這里,我們將只專注于如何使用 python 來(lái)完成。我們必須在已經(jīng)安裝了 python 的計(jì)算機(jī)上編寫(xiě) python 腳本。如果您對(duì)這一切不熟悉,我建議您閱讀本文以了解如何安裝 python 并開(kāi)始使用它。除此之外,我們還需要安裝兩個(gè)庫(kù)包才能使我們的程序正常工作。您可以使用 pip install 選項(xiàng)將包添加到 python,在 python 目錄中的終端上運(yùn)行以下命令來(lái)安裝包。打開(kāi) windows 終端并導(dǎo)航到主要位于C://Python 27中的 python 目錄
第 1 步:-如果您之前沒(méi)有安裝過(guò) pip,請(qǐng)安裝。使用以下命令安裝它
sudo easy_install pip
第 2 步:-在 C://Python/Scripts 目錄中安裝 requests 包
pip 安裝請(qǐng)求
第 3 步:-使用以下命令安裝 boltiot 包
點(diǎn)安裝boltiot
安裝成功完成后,您的 careen 應(yīng)該如下所示
就是這樣,現(xiàn)在我們已經(jīng)打開(kāi) Python IDLE 并開(kāi)始為我們的安全系統(tǒng)編寫(xiě)我們的實(shí)際程序。但在此之前,通過(guò)谷歌助手激活或關(guān)閉警報(bào)并發(fā)送電子郵件,我們使用谷歌助手服務(wù)和 IFTT 提供的網(wǎng)絡(luò)掛鉤服務(wù)。所以讓我們繼續(xù)設(shè)置它們。
使用 Google 助理激活和停用鬧鐘
我們必須為此創(chuàng)建兩個(gè)小程序(食譜),一個(gè)是激活警報(bào),另一個(gè)是取消激活警報(bào)。當(dāng)警報(bào)被激活時(shí),連接到引腳 3 的電容器應(yīng)該被充電,當(dāng)警報(bào)被禁用時(shí),連接到引腳 4 的電容器應(yīng)該被充電。
小程序?yàn)榇朔?wù)使用 Google 助手,并且網(wǎng)絡(luò)掛鉤獲取對(duì)該服務(wù)的請(qǐng)求。下面的屏幕截圖顯示了如何設(shè)置小程序以在激活警報(bào)時(shí)將引腳 3 設(shè)為高電平,并在通過(guò) Google 助手停用警報(bào)時(shí)將引腳 4 設(shè)為高電平。
電容器的用途是什么?
電容器 1 和 2 用作存儲(chǔ)元件。當(dāng)電路板收到來(lái)自 IFTTT 的命令時(shí),引腳 3 和 4 將用作輸出引腳。根據(jù)命令,電路板將為電容器 1 或電容器 2 充電。
現(xiàn)在,當(dāng) IFTTT 操作完成時(shí),Python 代碼將引腳 3 和 4 作為輸入引腳,通過(guò)讀取這些引腳的狀態(tài),Python 代碼將了解是否應(yīng)該根據(jù)哪個(gè)電容器充電來(lái)激活或停用警報(bào)。簡(jiǎn)而言之,將 IFTTT 與 Python 接口是一個(gè)小技巧。如果 Bolt 平臺(tái)提供了一個(gè)虛擬位,但這里說(shuō)這不是一個(gè)選項(xiàng),那會(huì)容易得多。
檢測(cè)到入侵者時(shí)發(fā)送電子郵件
第三個(gè)小程序是在檢測(cè)到入侵者時(shí)發(fā)送電子郵件。這可以通過(guò)使用 IFTTT 上的網(wǎng)絡(luò)掛鉤和 Gmail 服務(wù)來(lái)完成。Webhooks 服務(wù)將為我們提供一個(gè) URL,該 URL 在加載時(shí)將觸發(fā)該預(yù)定義的電子郵件。小程序的快照如下所示。您可以根據(jù)需要自定義接收者 ID 和文本。如果檢測(cè)到入侵者,該 URL 將在 python 腳本中使用 requests 庫(kù)觸發(fā)。
Python程序說(shuō)明
此物聯(lián)網(wǎng)安全警報(bào)的完整 Python 代碼可在本項(xiàng)目末尾找到。在本節(jié)中,讓我們將代碼分成小片段并嘗試?yán)斫馑鼈儭ython腳本的總體目標(biāo)是檢查警報(bào)是激活還是取消激活,如果激活,我們必須檢查門(mén)是否打開(kāi),如果打開(kāi),我們必須觸發(fā)電子郵件并打開(kāi)蜂鳴器。
我們已經(jīng)知道,如果我們必須激活安全系統(tǒng),引腳 3 上的電容會(huì)很高,如果我們必須停用安全系統(tǒng),引腳 4 上的電容會(huì)很高。所以我們只需要在我們的 python 腳本中讀取它們來(lái)激活或取消激活警報(bào)。
我們通過(guò)導(dǎo)入時(shí)間、請(qǐng)求和boliot庫(kù)來(lái)開(kāi)始程序。其中時(shí)間庫(kù)默認(rèn)添加到 python 中,但是您必須手動(dòng)安裝 requests 和 boltiot 包,正如我們之前討論的那樣,否則您將在這些行中收到錯(cuò)誤。
import time #導(dǎo)入延遲操作的時(shí)間
import requests #use requests 通過(guò) webhooks IFTTT 發(fā)送郵件
from boltiot import Bolt #導(dǎo)入 boliot 通過(guò) API 控制 GPIO 引腳
接下來(lái)我們輸入設(shè)備的憑據(jù),例如 API 密鑰和設(shè)備 ID。只有使用這兩個(gè)值,您才能訪問(wèn)設(shè)備上的任何 GPIO 引腳。如果任何人都可以使用它們來(lái)控制您的 GPIO 引腳,請(qǐng)不要與公眾分享這些。
api_key = “4749fe75-6c61-45f1-bee5-f9a6a1bd9103” #從 Blot 云網(wǎng)站獲取您的 API 密鑰
device_id = “BOLT11691968” #從 Bolt 云網(wǎng)站獲取您的 Bolt 設(shè)備 ID
mybolt = Bolt(api_key, device_id)
正如 API 部分所討論的,當(dāng)我們以字符串的形式執(zhí)行數(shù)字讀取時(shí),我們將得到響應(yīng),因此我將這些字符串值分配給了兩個(gè)變量,以便我們可以在程序中輕松使用它們。
HIGH = ‘{“value”: “1”, “success”: “1”}’ #如果數(shù)字讀取為高,bolt API 將返回
LOW = ‘{“value”: “0”, “success”: “1”}’#如果數(shù)字讀取低,這將由bolt API返回
在無(wú)限while循環(huán)中,我們還有另外兩個(gè)循環(huán)。如果從 Google 助手激活警報(bào),則將執(zhí)行一個(gè),如果取消激活警報(bào),則將執(zhí)行另一個(gè)。默認(rèn)情況下,如果沒(méi)有收到命令,將執(zhí)行去激活的循環(huán)。
在這里,必須通過(guò)讀取引腳 3 來(lái)檢查警報(bào)是否被激活,引腳 3 只不過(guò)是電容器。如果引腳為高電平,我們使橙色 LED 發(fā)光,然后退出此循環(huán)并進(jìn)入激活的while循環(huán)。我們每 5 秒檢查一次,以確保我們不超過(guò)bolt 提供的 API 速率限制,即每分鐘 30 次調(diào)用。
while alarm == 0: #If alarm is off
response = mybolt.digitalRead(‘3’) #check if
(response == HIGH):
print(“Security System isactivated”)
mybolt.digitalWrite(‘ 2’, ‘HIGH’) #打開(kāi) LED 指示警報(bào)已激活
alarm = 1
elif (response == LOW):
print (“Waiting for Security System to beactivated.。..”)
else:
print (“Problem in從 pin 3”)
time.sleep(5) #獲取值每 5 秒檢查一次,以避免超過(guò) API 速率限制
同樣,在激活的while循環(huán)中,我們必須檢查引腳 4 以了解警報(bào)是否被取消激活。如果停用,我們將關(guān)閉橙色循環(huán)并返回停用的while循環(huán)。否則,我們必須通過(guò)讀取引腳 0 來(lái)檢查磁鐵是否靠近霍爾傳感器。如果引腳為高電平,則意味著磁鐵遠(yuǎn)離傳感器,表明門(mén)已打開(kāi)。所以我們觸發(fā)了蜂鳴器并使用 requests 包觸發(fā)了郵件。否則,我們會(huì)每 5 秒監(jiān)測(cè)一次傳感器。執(zhí)行相同操作的代碼如下所示
while alarm == 1: #If alarm is on
response = mybolt.digitalRead(‘4’) #check 它是否被停用
if (response == HIGH):
print(“Security System is De-activated”)
mybolt .digitalWrite(‘2’, ‘LOW’)#關(guān)閉LED指示Alarm is De-activated
alarm = 0
time.sleep(5)
elif (response == LOW):
print (“Security System is current is active can be deactivate來(lái)自谷歌助手”)
其他:
打印(“從引腳 4 獲取值的問(wèn)題”)
response = mybolt.digitalRead(‘0’) #檢查霍爾傳感器是否被觸發(fā)
if (response == HIGH): #if 磁鐵不存在
print (”Alert! Security breach Buzzer ON“)
mybolt.digitalWrite(‘1’, ‘HIGH’)
requests.get #webhook 鏈接通過(guò) IFTTT 觸發(fā)郵件time.sleep
(5)
mybolt.digitalWrite(‘1 ’, ‘LOW’)
print (”Buzzer OFF“)
elif (response == LOW):
print (”沒(méi)問(wèn)題,一切都好!“)
else:
print (”讀取按鈕值的問(wèn)題“)
time.sleep(5)
是時(shí)候測(cè)試設(shè)備了
準(zhǔn)備好代碼后,我們就可以開(kāi)始測(cè)試我們的項(xiàng)目了。將板安裝在門(mén)框上,將磁鐵安裝在門(mén)本身上。確保磁鐵靠近霍爾傳感器。這個(gè)想法是傳感器應(yīng)該在門(mén)關(guān)閉時(shí)檢測(cè)到磁鐵,而在門(mén)打開(kāi)時(shí)不應(yīng)該能夠檢測(cè)到磁鐵。我使用雙面膠帶安裝我的設(shè)置,它看起來(lái)像下面這樣。
現(xiàn)在在您的計(jì)算機(jī)上運(yùn)行 python 腳本,您應(yīng)該能夠從 python 代碼中的打印行語(yǔ)句中看到設(shè)備的狀態(tài)。要激活警報(bào),只需向您在 IFTTT 中設(shè)置的 Google 助手說(shuō)出命令(啟用Office 安全系統(tǒng)),檢查上面的小程序設(shè)置快照。一旦激活,橙色燈將開(kāi)始發(fā)光,指示狀態(tài)。現(xiàn)在,無(wú)論何時(shí)打開(kāi)門(mén),警報(bào)都會(huì)響起并伴隨蜂鳴器響起,并且還會(huì)向您的 Gmail 收件箱發(fā)送一封包含違規(guī)日期和時(shí)間的郵件。您可以在此處使用 IFTT 小程序和代碼來(lái)做更多有趣的事情。但有了這個(gè),我結(jié)束了這篇文章。
#PYTHON 腳本,用于通過(guò) GOOGLE 助手控制的基于物聯(lián)網(wǎng)的安全系統(tǒng) - BOLT
#Program by B.Aswinth Raj
import time #導(dǎo)入延遲操作的時(shí)間
import requests #使用請(qǐng)求通過(guò) webhooks 發(fā)送郵件 IFTTT
from boltiot import Bolt #導(dǎo)入 boliot 以通過(guò) API 控制 GPIO 引腳
api_key = "4749fe75-6c61-45f1-bee5-f9a6a1bd9103" #從 Blot 云網(wǎng)站獲取您的 API 密鑰
device_id = "BOLT11691968" #從 Bolt 云網(wǎng)站獲取您的 Bolt 設(shè)備 ID
mybolt = Bolt(api_key, device_id)
HIGH = '{"value": "1", "success": "1"}' #如果數(shù)字讀取為高,bolt API 將返回
LOW = '{"value": "0", "success": "1"}'#如果數(shù)字讀取低,這將由bolt API返回
alarm = 0 #鬧鐘默認(rèn)關(guān)閉
while True: #無(wú)限循環(huán)
while alarm == 0: #If alarm is off
response = mybolt.digitalRead('3') #check if
(response == HIGH):
print("Security System isactivated")
mybolt.digitalWrite(' 2', 'HIGH') #打開(kāi) LED 指示 Aalarm 已激活
alarm = 1
elif (response == LOW):
print ("Waiting for Security System to beactivated....")
else:
print ("Probelm in從引腳 3") 獲取值
time.sleep(5) #每 5 秒檢查一次以避免超過(guò) API 速率限制
while alarm == 1: #If alarm is on
response = mybolt.digitalRead('4') #check 它是否被停用
if (response == HIGH):
print("Security System is De-activated")
mybolt .digitalWrite('2', 'LOW')#關(guān)閉 LED 指示 Aalarm is De-activated
alarm = 0 time.sleep
(5)
elif (response == LOW):
print ("Security System is current active can be deactivated來(lái)自谷歌助手”)
其他:
打印(“在獲取值表單 4 時(shí)出現(xiàn)問(wèn)題”)
response = mybolt.digitalRead('0') #檢查霍爾傳感器是否被觸發(fā)
if (response == HIGH): #if 磁鐵不存在
print ("Alert! Security breach Buzzer ON")
mybolt.digitalWrite('1', 'HIGH')
requests.get(' https ://maker.ifttt.com/trigger/Breach/with/key/i6nPcZ5ZlzaVdbYITw6VGcp... ') #webhook 鏈接通過(guò) IFTTT 觸發(fā)郵件time.sleep
(5)
mybolt.digitalWrite(' 1', 'LOW')
print ("Buzzer OFF")
elif (response == LOW):
print ("No probelm, all good!")
else:
print ("讀取按鈕值的問(wèn)題")
time.sleep(5)
評(píng)論