在这个项目中,我们将构建自己的安全系统,该系统可以检测门/窗是否打开。警报可以通过谷歌助手通过语音命令激活或关闭,当检测到入侵时,它还会向您和您的亲戚发送一封邮件,警告他们。很酷的是,整个东西都在云上运行,因此可以从世界任何地方进行控制。
所需材料
螺栓开发板
面包板
霍尔效应传感器 (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)
评论
查看更多