Arduino与ESP8266结合实现活动检测与推送通知

在这个项目中,将探索如何使用Arduino Mega 2560、ESP8266 WiFi模块和PIR传感器来构建一个活动检测系统。当检测到活动时,系统将通过Pushbullet应用发送通知到智能手机。

预备知识

在开始之前,需要具备以下知识:

  • Arduino基础知识和基本硬件操作。
  • 了解AT命令。
  • 了解PIR传感器的工作原理。

可以访问以下网站获取相关知识:

所需材料

以下是构建项目所需的材料:

  • Arduino Mega 2560
  • ESP8266 WiFi模块(ESP-01变种)
  • HC-SR501 PIR传感器
  • 1000µF电容器,不同电阻器
  • 单线0.5mm线材
  • 女性-女性跳线
  • Xperia Z1智能手机(用于Pushbullet应用,任何智能手机均可)
  • 笔记本电脑(用于Arduino编程)
  • ArduinoIDE(版本1.6.4)

操作步骤

如果还没有安装Arduino,请从Arduino官网下载并安装。

假设需要最大灵敏度和最短警报周期以获得更好的检测率。因此,请按照以下方式设置PIR传感器的电位器:

打开PIR传感器的白色外壳,将看到引脚描述:GND | OUT | VCC。使用女性跳线将GND、VCC和OUT连接起来。然后将另一端的跳线引脚(连接到PIR)连接到Arduino:

  • PIR GND -> Arduino GND
  • PIR VCC -> Arduino 5V
  • PIR OUT -> 数字引脚2

可以使用Arduino Playground中的以下代码测试PIR传感器:

// 测试PIR传感器的代码

在这个项目中,使用了ESP8266(ESP-01变种)串行WiFi模块,它非常便宜。除了ESP-01之外,还有其他变种可用。也有不同的固件可用。使用了默认的AT固件。以下是连接参考图片:

使用跳线将ESP8266连接到Arduino:

  • ESP8266 GND -> Arduino GND
  • ESP8266 UXTX(发送引脚)->ArduinoRX2
  • ESP8266 CH_PD(设为高电平)-> Arduino 5V
  • ESP8266 URXD(接收引脚)-> Arduino TX2
  • ESP8266 VCC -> Arduino 3.3V

ESP8266在数据传输时存在电源问题。它从Arduino获取的电源可能过多,导致Arduino在通过PC USB供电时可能会重启。即使通过电源插座提供5V电源也可能不够。因此,始终建议为ESP8266使用外部电源。然而,在实验中,使用了一种快速且便宜的解决方案。使用了一个1000µF的电解电容器为ESP8266提供足够的电源。

Pushbullet允许无缝地通过推送通知通知不同设备。将使用它的API来推送PIR传感器的通知。

首先,访问PushBullet网站,注册账户,下载Chrome应用和智能手机应用。登录到设备上的Pushbullet。现在看看它是如何工作的,通过应用或安装在PC上的Chrome扩展发送一些推送消息到设备。

接下来,访问API部分。在这里,所有的API链接和URL都是为https连接提供的,而Arduino不能使用https,因为它没有足够的能力来处理那个。因此,将使用HTTP版本的那些API,这在pushbullet文档中没有提到,但从GitHub项目中得到了这个参考。

在pushbullet文档中,对于推送,他们提到了URL,这是HTTPS,所以将使用HTTP URL和端口,这些在GitHub项目中提供。此外,还将添加/pushbullet和他们提到的REST路径。

例如:对于通知推送到所有设备,根据pushbullet文档,REST路径是:/v2/pushes,但将使用:/pushbullet/v2/pushes。

基本URL:173.17.168.19

端口:8181

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

需要认证密钥才能从Arduino推送。因此,请转到账户,查找访问令牌,复制并将其保存在PC的安全位置。

打开这个GitHub项目,转到Experiments文件夹。在那里,将找到MotionSense.ino,这是将推送通知到智能设备的代码。

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

现在更改这些参数:

#define SSID "YOURSSID" /* 用WiFi接入点名称替换YOURSSID */ #define PASS "YOURPASSWORD" /* 用WiFi接入点密码替换YOUR PASSWORD */ // 可能想要更改PIR OUT引脚为希望的引脚 #define PIRPIN 2 /* 更改为Arduino的所需数字引脚 */ #define AUTH_TOKEN "YOUR_TOKEN_FROM_YOUR_ACCOUNT"; /* 用访问令牌替换YOUR_TOKEN_FROM_YOUR_ACCOUNT */

现在编译并运行。传感器校准、WiFi模块初始化和连接到接入点需要一些时间。可以在串行监视器中看到这些事情。

一切完成后,它将开始循环通过主循环,将在串行监视器中看到“一切正常 | 无入侵”。

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

#define是一组预定义的参数,需要相应地更改它们。在设置中,可以看到初始化arduino Serial()。Serial2用于WiFi串行访问。

理解函数:

  • sensor_calibration();
  • check_WiFi_radio();
  • reset_wifi();
  • set_wifi_mode();
  • check_wifi_stat();
  • connect_ssid();

到目前为止,WiFi模块已初始化并连接。现在需要检查PIR读取是否感应到运动。它将在主循环下进行。

  • pirRead();

如果检测到某物,那么首先需要连接到Pushbullet服务器:

  • server_connect();

现在推送通知:

  • post();

断开连接:

  • server_disconnect();
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485