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