家里的安全非常重要。该项目展示了一个原型智能门锁安全系统,可用于增强门的安全性。除了使用钥匙的传统方法门外,未经授权的人或窃贼只要拥有正确的钥匙,就可以轻松打开门。这将使他们能够偷走房子里所有有价值的东西。
该项目的核心理念是实现基于智能多警报智能物联网的门锁安全系统,尽可能减少用户交互。因此,在这个项目中,我们将构建自己的安全系统,该系统可以检测门/窗是否打开。警报可以通过谷歌助手通过语音命令激活或取消激活,当检测到入侵时,它还会在电报频道上向您和您的亲属发送一封邮件,向他们发出警告。很酷的是,整个东西都在云上运行,因此可以从世界任何地方进行控制。
基于物联网的项目可以引领我们对自动化锁定安全系统进行另一场革命。安全可以通过普通保安来实现,但数字化比其他所有方式都更有效。其非凡的特点是通过一点点使用物联网和云计算,让您的家庭、工业、学校、学院、服务器机房等变得智能和智能,从而节省时间、节省人力资源并获得良好的效果。该安全系统将为所有关注安全的人提供帮助。
您可以使用您的项目或模型的区域。
在以下领域,您可以使用我们的项目提供智能门锁安全。
写字楼、购物中心、银行、服务器机房、酒店和公寓
办公室/仓库、工业产权、存储单元/车库、数据
中心、发电厂
机场航站楼、火车、地铁和巴士站、停车场、配送中心
学校、大学、寄宿学校、图书馆、幼儿园
餐厅、体育馆、体育场
基于物联网门锁的系统使用基于乐鑫半导体著名的 ESP8266 Wi-Fi 模块的 Bolt 开发板。但是这里它内部运行着自己的 Bolt 固件,这有助于我们通过 Bolt 提供的 API 访问 GPIO 引脚(数字读/写、模拟读、PWM 写)等。
在我们的硬件中,我们将在门上安装一个霍尔效应传感器和磁铁。当门打开时,磁铁会远离霍尔传感器,传感器会检测到它,这可以通过 API 调用读取,我们可以触发蜂鸣器,并通过男性和电报向用户发出警报。要激活警报,只需说在 IFTTT 中设置的 Google 助手的命令(激活安全警报)。一旦激活,橙色灯将开始发光,指示状态。现在,只要门打开,警报就会响起,蜂鸣器响起,并且一封邮件将与 Telegram Channel 上的消息一起发送到您的 Gmail 收件箱,其中包含违规日期和时间。
设置 Bolt IoT 模块
在我们从这里开始之前,我们必须设置 Bolt 硬件。这很容易做到,只需在您的手机上安装 bolt 应用程序并输入您的 Wi-Fi 凭据,以便您的 bolt 可以连接到您的 Wi-Fi,从而连接到互联网。然后您可以访问云页面以从那里获取您的设备 ID 和 API 密钥,一切顺利。您可以访问BoltIOT 文档以了解更多信息。
使用 Bolt IoT 硬件的 GPIO 引脚
正如我之前所说,Bolt 硬件的所有 GPIO 引脚都连接到云端,它们只能通过 API 进行控制(读/写)。API 详细信息可以在我之前分享的文档中找到。但是,让我们以一个为例。读取引脚状态的 API 在文档中进行了解释,如下所示
这里,我们感兴趣的是API URL
这里的 API 密钥是 44b2de6b-7e68-40e7-a27f-814b58afe008,设备 ID 是 BOLT13819450。但这是一个示例密钥和 ID,与您的设备不同。您必须访问 cloud.boltiot.com 以获取您设备的设备 ID 和 API 密钥。下面的快照可以帮助您。
获得 API 密钥和设备 ID 后,您只需将默认值替换为您的值并在浏览器中加载 URL。您的浏览器将使用 PIN 的状态回复
{"success": "1", "value": "1"} or {"success": "1", "value": "0"}
如果值为 1,则为高,如果为 0,则为低。同样,您可以尝试所有命令的 API 链接,例如数字读取、写入、模拟写入、PWM 甚至串行通信。一旦你玩完它,让我们继续这个项目的实际程序。
正如我之前所说,bolt 可以使用 JavaScript、HTML 或 Python 进行编程。在这里,我们将只专注于如何使用 python 来完成。我们必须在已经安装了 python 的计算机上编写 python 脚本。如果您对这一切不熟悉,我建议您阅读本文以了解如何安装 python 并开始使用它。除此之外,我们还需要安装两个库包才能使我们的程序正常工作。您可以使用 pip install 选项将包添加到 python,在 python 目录中的终端上运行以下命令来安装包。打开 Windows 终端并导航到主要位于C://Python 3中的 python 目录
第 1 步:-如果您之前没有安装过 pip,请安装。使用以下命令安装它
sudo easy_install pip
第 2 步:-在 C://Python/Scripts 目录中安装 requests 包
pip install requests
第 3 步:-使用以下命令安装 boltiot 包
pip install boltiot
安装成功完成后,您的 careen 应该如下所示
就是这样,现在我们打开了 Python IDLE 并开始为我们的安全系统编写我们的实际程序。但在此之前,通过谷歌助手激活或关闭警报以及向我们的电报频道发送电子邮件和发送消息,我们使用谷歌助手服务和 IFTTT 提供的网络挂钩服务。所以让我们继续设置它们。如果您不熟悉使用 IFTTT 小程序,那么建议您在继续之前阅读本文。
我们必须为此创建两个小程序(食谱),一个是激活警报,另一个是取消激活警报。当警报被激活时,连接到引脚 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 库触发。
当检测到入侵者时向电报频道发送警报。
1. 当检测到任何入侵者时,我们将利用电报频道广播警报。
2. 首先,在电报中创建一个新频道并提供合适的名称和描述,如下所示。
3. 在下一个屏幕中,将频道设置为公开,并根据您的意愿输入频道永久链接。将此频道链接保存为“telegram_chat_id” ,其中下图为“smart_door_lock_alarm”。
4. 现在让我们为我们的频道创建一个机器人。机器人是在电报中运行的第三方应用程序,我们将使用此机器人向我们的频道发送警报。
5. 在电报首页,点击右上角的搜索图标,搜索botfather。
6. 在搜索结果中,选择旁边有蓝色勾号的botfather。
7.聊天显示几个可能的命令,输入“/newbot”来创建一个新的机器人。
8. 为您的机器人提供正确的名称和用户名。
9. 成功创建机器人后,它会生成一个令牌。此令牌用于通过 python 发送和接收消息。
10. 请将此便笺另存为“telegram_bot_id” ,其中保存为“bot”,后跟bot token。
11. 现在让我们将机器人添加到我们的频道,转到频道描述并从 3 点菜单中选择添加管理员。从搜索字段中选择机器人并赋予机器人适当的权限。
选择添加管理员
12.恭喜!您已成功创建频道和机器人。
此物联网安全警报的完整 Python 代码可在本项目末尾找到。在本节中,让我们将代码分成小片段并尝试理解它们。python脚本的总体目标是检查警报是激活还是取消激活,如果激活,我们必须检查门是否打开,如果打开,我们必须触发电子邮件并打开蜂鸣器。
我们已经知道,如果我们必须激活安全系统,引脚 3 上的电容会很高,如果我们必须停用安全系统,引脚 4 上的电容会很高。所以我们只需要在我们的 python 脚本中读取它们来激活或取消激活警报。
我们通过导入时间、json、请求和boliot库来开始程序。其中时间库默认添加到 python 中,但是您必须手动安装 requests 和 boltiot 包,正如我们之前讨论的那样,否则您将在这些行中收到错误。
import time #导入延迟操作的时间
import requests #use requests 通过 webhooks IFTTT 发送邮件
from boltiot import Bolt #导入boliot 通过 API 控制 GPIO 引脚
import json # 处理 JSON 数据的库
接下来我们输入设备的凭据,例如 API 密钥和设备 ID 。只有使用这两个值,您才能访问设备上的任何 GPIO 引脚。如果任何人都可以使用它们来控制您的 GPIO 引脚,请不要与公众分享这些。
api_key = "4749fe75-6c61-45f1-bee5-f9a6a1bd9103" #Get your API key from Blot Cloud Web
site
device_id = "BOLT11691968" #Get your Bolt device ID form Bolt Cloud Website
mybolt = Bolt(api_key, device_id)
telegram_chat_id = "@XXXX" # This is the channel ID of the created Telegram channel.
Paste after @ symbol.
telegram_bot_id = "botXXXX" # This is the bot ID of the created Telegram Bot. Paste
after bot text.
正如 API 部分所讨论的,当我们以字符串的形式执行数字读取时,我们将得到响应,因此我将这些字符串值分配给了两个变量,以便我们可以在程序中轻松使用它们。
HIGH = '{"value": "1", "success": "1"}' #This will be returned by bolt API if digital read is high
LOW = '{"value": "0", "success": "1"}'#This will be returned by bolt API if digital read is low
现在我们创建一个名为send_telegram_message()的函数,它将消息作为参数。
在第一行中,我们正在构建 URL,以便 Telegram 知道它必须将消息发送到哪个机器人。telegram_bot_id 为此目的是必需的。数据变量是一个包含聊天 ID(频道 ID)的字典,以便 Bot 知道它必须将消息发布到哪个频道。它还包含要作为消息发送的文本消息。
在下一步中,我们需要使用我们之前构建的 URL 向 Telegram 服务器发出 HTTP 请求。该请求是一个“POST”请求,其中包含所有相关数据,如 URL 和要包含在请求中的数据。
` telegram_data = json.loads(response.text) ` 行将文本响应转换为 JSON 对象并将其存储在 telegram_data 中。请求的状态存储在 telegram_data 变量的“ok”字段中,我们将其返回. “ok”字段将始终包含一个布尔值,即 True/False,如果消息已发送,则为 True。
该函数被封装在一个 try-except 块中,以便捕获任何错误,如果 try 块中存在任何错误,它将返回 False。
def send_telegram_message(message):
"""Sends message via Telegram"""
url = "https://api.telegram.org/" + telegram_bot_id + "/sendMessage"
data = {
"chat_id": telegram_chat_id,
"text": message
}
try:
response = requests.request("POST",url,params=data)
telegram_data = json.loads(response.text)
return telegram_data["ok"]
except Exception as e:
print("An error occurred in sending the alert message via Telegram")
print(e)
return False
在无限while循环中,我们还有另外两个循环。如果从 Google 助手激活警报,则将执行一个,如果取消激活警报,则将执行另一个。默认情况下,如果没有收到命令,将执行去激活的循环。
在这里,必须通过读取引脚 3 来检查警报是否被激活,引脚 3 只不过是电容器。如果引脚为高电平,我们使橙色 LED 发光,然后退出此循环并进入激活的while循环。我们每 5 秒检查一次,以确保我们不超过bolt 提供的 API 速率限制,即每分钟 30 次调用。
while alarm == 0: #If alarm is off
response = mybolt.digitalRead('3') #check if it is being activated
if (response == HIGH):
print("Security System is activated")
mybolt.digitalWrite('2', 'HIGH') #Turn on LED to indicate Alarm is
activated
mybolt.digitalWrite('4','LOW') #Turn off the capacitor of the 4 pin
alarm = 1
elif (response == LOW):
print ("Waiting for Security System to be activated....")
else:
print ("Problem in getting value form pin 3")
time.sleep(2) #check once in every 2 seconds to avoid exceeding API rate limit
同样,在激活的while循环中,我们必须检查引脚 4 以了解警报是否被取消激活。如果停用,我们将关闭橙色循环并返回停用的while循环。否则,我们必须通过读取引脚 0 来检查磁铁是否靠近霍尔传感器。如果引脚为高电平,则意味着磁铁远离传感器,表明门已打开。所以我们触发了蜂鸣器,并使用 requests 包触发了邮件和消息到 Telegram 频道。否则,我们会每 5 秒监测一次传感器。执行相同操作的代码如下所示
while alarm == 1: #If alarm is on
response = mybolt.digitalRead('4') #check is it is being de-activated
if (response == HIGH):
print("Security System is De-activated")
mybolt.digitalWrite('2', 'LOW')#Turn off LED to indicate Alarm is
De-activated
mybolt.digitalWrite('3', 'LOW')#Turn off the 3 GPIO pin.
alarm = 0
break
elif (response == LOW):
print ("Security System is currently active can be deactivated from google
assistant")
else:
print ("Problem in getting value form pin 4")
response = mybolt.digitalRead('0') #check if hall sensor is triggered
if (response == HIGH): #if magnet is not present
print ("Alert! Security breach Buzzer ON")
mybolt.digitalWrite('1', 'HIGH')
requests.get('https://maker.ifttt.com/trigger/Breach/with/key/i6nPcZ5ZlzaV
dbYITw6VGcpMkrVO5GqAX049cHEBDt') # webhook link to trigger mail through IFTTT
telegram_status=send_telegram_message("Alert!Someone opens your secret
door")
print("This is the telegram status: ",telegram_status)
time.sleep(5)
mybolt.digitalWrite('1', 'LOW')
print ("Buzzer OFF")
elif (response == LOW):
print ("No problem, all good!")
else:
print ("Problem in reading the value of button")
time.sleep(5)
准备好代码后,我们就可以开始测试我们的项目了。将板安装在门框上,将磁铁安装在门本身上。确保磁铁靠近霍尔传感器。这个想法是传感器应该在门关闭时检测到磁铁,而在门打开时不应该能够检测到磁铁。
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
全部0条评论
快来发表一下你的评论吧 !