65.9K
CodeProject 正在变化。 阅读更多。
Home

[物联网] MotionSense Not-e-FYI

starIconstarIconstarIconstarIconstarIcon

5.00/5 (1投票)

2015 年 6 月 22 日

CPOL

6分钟阅读

viewsIcon

33321

从您的Arduino向智能设备发送运动激活的Pushbullet通知。

引言

在本教程中,我将讨论如何创建一个系统来通知任何未经授权的活动或入侵。我使用了 Arduino 和 PIR 进行活动检测,并使用 ESP8266 进行 WiFi 连接。我的 Xperia Z1 用于接收通知。我使用了流行的通知应用 Pushbullet 来接收通知,并使用 Pushbullet API 从 Arduino 发送通知。

先决知识

  • Arduino 知识和基本硬件知识 [ 访问 : www.arduino.cc]
  • AT 命令概念 [ 阅读 : https://codeproject.org.cn/Articles/85636/Introduction-to-AT-commands-and-its-uses ]
  • PIR,它的工作原理 [ 关于 : https://en.wikipedia.org/wiki/Passive_infrared_sensor ]

使用的“东西”

Arduino Mega 2560

ESP8266 串行 WiFi ESP-01 型号

HC-SR501 PIR 传感器

1000 µF 电容,各种电阻 [ 用于 WiFi 电源的电容,用于稳压的电阻 ]

单股 0.5mm 电线 [ 连接线 ]

母对母跳线 [ 连接器 ]

Xperia Z1 [ 用于 Pushbullet 应用,任何智能手机均可 ]

我的笔记本电脑 [ 使用 Arduino 编程 ]

Arduino IDE [ v1.6.4 ]

要做什么

环境设置: 如果您没有安装 Arduino,请从 Arduino 网站安装。

Setting up PIR :

假设您需要最大的灵敏度和最小的警报周期以获得更好的检测率。因此,请这样设置 PIR 传感器上的电位器。

现在打开 PIR 传感器的白色球体,您将看到引脚说明:GND | OUT | VCC

连接 GND、VCC 和 OUT 的公对母连接线。

现在将(连接到 PIR 的)跳线另一端连接到 Arduino

PIR GND -> Arduino GND

PIR VCC -> Arduino 5V

PIR OUT -> 数字引脚 2 [ 您可以选择其他引脚,并在 Arduino 代码中进行相应更改 ]

要测试您的 PIR,您可以使用 Arduino Playground 中的这个代码

因此,您的 PIR 传感器已 准备好 工作

 

Enabling Arduino to connect to internet via WiFi :

我在项目中使用了 ESP8266(ESP-01 型号)串行 WiFi 模块,它价格非常便宜。除了 ESP-01 之外,还有其他型号可供选择。也有不同的固件。我使用了默认的 AT 固件。请参考以下两张图片了解连接方法。

现在用跳线连接 ESP8266 和 Arduino

ESP8266 GND -> Arduino GND

ESP8266 UXTX(发送引脚) -> Arduino RX2(Arduino Mega 接收引脚,即代码中的 Serial2)

ESP8266 CH_PD(设置为高电平) -> Arduino 5V(添加一个 3.3V 的稳压器,因为 ESP8266 只能承受 3.3V。我用了一个电阻,因为我没有稳压器。但稳压器是首选)

RST、GPIO2 和 GPIO0 不连接

ESP8266 URXD(接收引脚) -> Arduino TX2(Arduino 接收引脚,即代码中的 Serial2)

ESP8266 VCC -> Arduino 的 3.3V

ESP8266 在数据传输时存在电源问题。它从 Arduino 消耗大量电力,以至于如果 Arduino 通过 PC USB 供电,Arduino 可能会重启。即使通过电源插头供电 5V 可能也不够。因此,始终建议为 ESP8266 使用外部电源。但在我的实验中,我为这个问题使用了快速且廉价的解决方案。我使用了一个 1000µF 的电解电容器为 ESP8266 提供足够的电力。

长引脚 -> ESP8266 VCC 连接到 3.3V

短引脚 -> ESP8266 GND 连接到 Arduino GND

 

因此,您的 ESP8266 WiFi 模块已 准备好 工作

 

Pushbullet Notifier :

Pushbullet 可以让您通过推送通知无缝地通知您的不同设备。我们将使用它的 API 来推送我们 PIR 传感器的通知。了解更多关于 Pushbullet 的信息

让我们开始吧。

访问 PushBullet

注册,下载 Chrome 应用和智能手机应用。

在您的设备上登录 Pushbullet

现在,通过您 PC 上安装的应用程序或 Chrome 扩展程序,发送一些推送消息到您的设备,看看它是如何工作的。

访问 API 部分


注意:这里所有的 API 链接和 URL 都用于 https 连接,而 Arduino 由于其性能不足以处理 https。因此,我们将使用这些 API 的 HTTP 版本,这在 Pushbullet 文档中没有提及,但我从 github 获得了此参考。.
 
在 Pushbullet 文档中,对于推送,他们提到了一个 HTTPS URL,所以我们将使用该 GitHub 项目中提供的 HTTP URL 和端口。此外,我们将在 REST 路径之前添加 /pushbullet
 
示例
根据Pushbullet 文档,向所有设备推送通知的 REST 路径是 /v2/pushes
但我们将使用:/pushbullet/v2/pushes
基础 URL:173.17.168.19
端口:8181

现在检查不同的 API 并阅读描述以了解它们。您以后可以在本教程的增强版中使用它们。

您需要您的身份验证密钥才能从 Arduino 推送。所以,请访问您的账户

查找 访问令牌,将其复制并保存在安全的地方。

因此,Pushbullet 现在已 准备好 进行发送和接收推送通知。

是时候编写代码了

打开这个GitHub 项目

进入 Experiments 文件夹。在那里您会找到 MotionSense.ino,您的代码,它会将通知推送到您的智能设备。

将此代码复制到 Arduino IDE,并连接您的 Arduino(已设置好 WiFi 和 PIR 传感器)。

现在更改这些参数

#define SSID "YOURSSID" /* replace YOURSSID with your WiFi access point name */
#define PASS "YOURPASSWORD" /* replace YOUR PASSWORD with your WiFi access point password */

您可能想将 PIR OUT 引脚更改为您想要的引脚。

#define PIRPIN 2 /* change to your desired digital pin of your arduino */
#define AUTH_TOKEN "YOUR_TOKEN_FROM_YOUR_ACCOUNT";
/* replace  YOUR_TOKEN_FROM_YOUR_ACCOUNT with your Access Token*/

另外,使用您在上面代码片段中提到的访问令牌。

现在编译并运行。

传感器校准、WiFi 模块初始化和连接到您的接入点需要一些时间。

您可以在串行监视器中看到这些内容。

一切完成后,它将开始进入主循环,您将看到

"一切正常 | 没有入侵"

在您的串行监视器中持续显示。

当您走到 PIR 传感器前方时,它将检测到移动并向您的设备推送通知。

 

简要了解代码

#defines 是预定义参数的集合,您需要相应地更改它们。

在 setup() 中,您可以看到初始化 Arduino Serial()。Serial2 用于 WiFi 串行访问。


了解函数 :

sensor_calibration (); 
/* It calibrates sensor for proper output. We need to power down PIRPIN before that */
check_WiFi_radio (); /* Checks whether WiFi module is OK or not */
reset_wifi (); /* resets WiFi module to clear any problem */
set_wifi_mode (); /* Set WiFi module as client for connecting to Access Point */

设置 WiFi 模式后,您需要重置 WiFi 来进行设置。

check_wifi_stat (); /* Checks whether your WiFi module is connected to AP or not */
connect_ssid (); /* if not connected, then will connect with your connection parameter */

到此为止,您的 WiFi 模块已初始化并连接。现在您需要检查 PIR 读取是否感应到运动。这将在主循环中。

pirRead ();
/* reads PIR value, either 0 or 1. If 1, then Motion Sensed, if 0, then nothing is there */

如果检测到任何东西,那么您首先需要连接到 Pushbullet 服务器。

server_connect (); /* connecting to server */

现在推送通知

post (); /* pushing notification to all devices */

disconnect

server_disconnect (); /* close server connectioon */

然后循环执行


 

特别说明

您可以使用这个 post() 函数结构将任何数据流式传输到任何 RESTful API。

相关知识库

ESP8266 AT 命令:https://room-15.github.io/blog/2015/03/26/esp8266-at-command-reference/

通过 Adafruit WiFi 的 Pushbullet:https://github.com/klinker41/pushbullet-arduino/tree/master

ESP8266 Maker:http://espressif.com/en/products/esp8266/

不同的 ESP8266 模块:http://l0l.org.uk/2014/12/esp8266-modules-hardware-guide-gotta-catch-em-all/

ESP8266 Wiki:https://nurdspace.nl/ESP8266

PIR 传感器:http://arduinobasics.blogspot.in/search/label/HC-SR501

关于 HC-SR501:http://www.mpja.com/download/31227sc.pdf

PIR 数据表:http://www.datasheetspdf.com/datasheet/HC-SR501.html

更多关于 PIR 的信息:https://arduinodiy.wordpress.com/2014/09/18/1093/

© . All rights reserved.