基于 IFTTT 的安全系统
通过这个项目,我们创建了一个安全设备,使用 PIR 传感器检测进入您家中的入侵者或流浪动物。如果发生入侵,您将收到一封电子邮件警报。
我们将使用 Webhooks 作为基础服务。从 UNO R4 向 IFTTT 的服务发送一个 POST 请求。
所需元件
在这个项目中,我们需要以下元件。
购买整套套件会更方便,以下是链接:
名称 |
套件所含项目 |
链接 |
|---|---|---|
Elite Explorer 套件 |
300+ |
您也可以从下面的链接单独购买。
元件介绍 |
购买链接 |
|---|---|
- |
|
接线
原理图
设置 IFTTT
IFTTT 是一项免费服务,提供多种方法将不同的数据服务链接在一起。
让我们创建一个 Applet,响应 webhook(自定义 URL)将数据发送到 IFTTT,然后 IFTTT 将向您发送一封电子邮件。
请按照以下步骤在 IFTTT 上进行操作。
访问 IFTTT 登录或创建帐户。
点击 Create 。
添加一个 If This 事件。
搜索 Webhooks 。
选择 Receive a web request 。
填写事件名称(例如 SecurityWarning),然后点击 Create trigger 。
添加一个 Then That 事件。
搜索 Email。
选择 Send me an email 。
输入 Subject ** 和 **Body ** ,然后点击 **Create action 。
点击 Continue 完成设置。
根据需要调整标题名称。
您将自动重定向到 Applet 详情页面,在该页面可以看到 Applet 当前已连接,您可以切换开关以启用/禁用它。
现在我们已经创建了 IFTTT Applet,我们还需要 webhooks 密钥,可以从 Webhooks Settings 获取,以便您的设备访问 IFTTT。
将 webhooks 密钥复制到 “arduino_secrets.h”,并填写您的 SSID 和密码。
#define SECRET_SSID "your_ssid" // your network SSID (name) #define SECRET_PASS "your_password" // your network password (used for WPA, or as a key for WEP) #define WEBHOOKS_KEY "your_key"
运行代码
备注
您可以直接打开路径
elite-explorer-kit-main\iot_project\03_ifttt_pir下的03_ifttt_pir.ino文件。或者将这段代码复制到 Arduino IDE 中。
备注
在代码中,SSID 和密码存储在 arduino_secrets.h 中。上传此示例之前,您需要使用自己的 WiFi 凭据修改它们。此外,出于安全目的,在共享或存储代码时请确保此信息保密。
警告
为了防止您的邮箱被大量邮件淹没,请在运行该项目的代码之前先调试好 PIR人体红外感应模块 。
工作原理
包含必要的库和头文件:
"WiFiS3.h":用于管理 Wi-Fi 连接。"arduino_secrets.h":包含 Wi-Fi 网络名称和密码,以保护敏感信息。
定义一些全局变量和常量:
ssid:Wi-Fi 网络的名称。pass:Wi-Fi 网络密码。status:Wi-Fi 连接的状态。client:用于与 Wi-Fi 服务器通信的客户端。server:IFTTT Webhook 服务器的地址。event:IFTTT Webhook 事件的名称。webRequestURL:构建的用于发送 HTTP 请求的 URL,包含 Webhook 事件名称和密钥。pirPin:连接到 PIR 传感器的数字引脚。motionDetected:用于跟踪运动检测的标志变量。
setup()函数:初始化串行通信。
检查 Wi-Fi 模块是否存在并输出其固件版本。
尝试连接到 Wi-Fi 网络,如果不成功则重试。
将连接到 PIR 传感器的引脚设置为输入模式。
readResponse()函数:从 IFTTT 服务器读取 HTTP 响应数据并将其打印到串行控制台。
loop()函数:调用
readResponse()函数读取 HTTP 响应数据。- 使用 PIR 传感器检查是否检测到运动。如果检测到运动且之前未检测到:
在控制台打印 “Motion detected!”。
调用
triggerIFTTTEvent()函数向 IFTTT 服务器发送 HTTP 请求,触发 Webhook 事件。将
motionDetected标志设置为true,表示已检测到运动。
如果未检测到运动,则将
motionDetected标志设置为false。
triggerIFTTTEvent()函数:与 IFTTT 服务器建立连接。
发送 HTTP GET 请求,包含 Webhook 事件的 URL 和其他 HTTP 头。
printWifiStatus()函数:将已连接 Wi-Fi 网络的信息(包括 SSID、IP 地址和信号强度 (RSSI))输出到串行控制台。