基于 IOT 的安全系统,带有使用 ESP8266 的语音消息


基于 IOT 的安全系统,带有使用 ESP8266 的语音消息
这是另一个有趣的 IOT 项目,我们将在其中构建一个安全系统,当它检测到某人时可以触发电子邮件。该项目融合了 ESP8266、PIR 传感器和 ISD1820 Voice 模块的强大功能。在本文的最后,您将构建一个功能齐全的安全系统,该系统可以通过互联网远程布防/撤防(激活/停用)。您可以录制自己的音频剪辑,该音频剪辑将在检测到移动时播放,还可以向特定电子邮件 ID 发送带有日期和时间的邮件,说明入侵情况。够酷的.....!!!??

所以让我们构建它..

所需材料:

构建此项目所需的材料如下

  • ESP8266
  • PIR 传感器
  • ISD1820 语音模块
  • LM317、LM7805
  • BC547 (2 个)
  • 1K、200ohm、330ohm 电阻器
  • 10uf 和 0.1uf 电容器
  • 12V 适配器 / 9V 电池为设置供电

模块说明:

该项目包含三个重要组件,即 ESP8266 模块、PIR 传感器和 ISD1820 Voice 模块。如果您熟悉这些模块,那么您可以跳过这部分,继续阅读原理图,但如果您想了解它们的工作原理,请继续阅读。

ESP8266模块:

我相信您迟早会遇到这个模块。它是一个非常著名且功能强大的 WiFi 模块,主要用于物联网项目

本项目假设您知道如何对 ESP8266 模块进行编程,如果不是,请访问以下两个教程,我在其中向您解释了如何开始使用 ESP8266 以及如何使用 Arduino IDE 对一个模块进行编程。您必须知道这一点才能完成项目。

  1. ESP8266 入门
  2. 使用 Arduino IDE 进行编程ESP8266

PIR 传感器:

PIR 传感器代表被动红外传感器。它是一种低成本的传感器,可以检测人类或动物的存在。传感器中存在两种重要材料,一种是可以检测生物体(人类/动物)的热信号的热释电晶体,另一种是菲涅尔透镜,可以扩大传感器的范围。此外,PIR 传感器模块还为我们提供了一些选项来调整传感器的工作,如下图所示。

两个电位计(橙色)用于控制传感器的灵敏度和触发时间。基本上,传感器的 Dout 引脚位于 Vcc 和 Gnd 引脚之间。该模块在 3.3V 下工作,但也可以用 5V 供电。在左上角,它还有一个触发引脚设置,可用于使模块在两种不同的模式下工作。一种是"H"模式,另一种是"I"模式。

在"H"模式下,当在范围内检测到人时,输出引脚 Dout 将变为高电平 (3.3V),并在特定时间后变为低电平(时间由电位计设置)。在此模式下,无论该人是否仍在范围内或已离开该区域,输出引脚都将变为高电平。我们在项目中以 "H" 模式使用我们的模块。

在"I"模式下,当在范围内检测到人时,输出引脚 Dout 将变为高电平 (3.3V),只要他/她保持在传感器范围内的限制内,输出引脚 Dout 就会保持高电平。一旦人离开该区域,引脚将在特定时间后变为低电平,这可以使用电位计进行设置。

**注意:**电位计或引脚的位置可能因 PIR 传感器供应商而异。按照 Silk Screen 确定您的引脚布局

ISD1820 语音模块:

ISD 1820 语音模块确实是一个很酷的模块,可以通过语音公告为您的项目增添趣味。该模块能够录制 Audio Clip 10 秒,然后在需要时播放。模块本身带有一个麦克风和一个扬声器(8 欧姆 0.5 瓦),它应该看起来像下面所示。

该模块在 +5V 下工作,可以使用左侧的 berg sticks 供电。它的底部还有三个按钮,分别是 Rec. 按钮、PlayE。按钮和 PlayL 的 Play 键。按钮。您可以通过按下 Rec. 按钮来录制您的声音,然后使用 PlayE 按钮播放它。只要您按住按钮,PlayL 就会播放语音。与 MCU 或 ESP 连接时,我们可以使用左侧的引脚。这些引脚可容忍 3V-5V,因此可以直接由 Arduino/ESP8266 驱动。在我们的项目中,我们使用 ESP8266 模块的 GPIO 0 引脚来控制 PLAYE 引脚。这样我们就可以在检测到入侵者时播放录制的语音。

原理图和硬件

IoT 安全系统项目的完整示意图如下所示:

该电路由两个稳压器组成。一个是使用 LM317 设计的 3.3V 稳压器,另一个是使用 7805 稳压器 IC 完成的 5V 稳压器。LM317 是一款可变稳压器,其输出通过使用 200 欧姆和 330 欧姆电阻器设置为 3.3V。两个稳压器都使用 12V 适配器供电。该电路的功耗非常小,因此也可以使用 9V 电池代替 12V 适配器。

通过将 GPIO 2 引脚设为高电平来打开 PIR 传感器和语音模块。该引脚将通过 1k 限流电阻器驱动 BC547,并完成两个模块的电源电路。该引脚GPIO_0 用于 Input 引脚。它通过 BC547 晶体管连接到 PIR 传感器的 Dout 引脚。当此引脚变为高电平时,我们将触发一封电子邮件,说明通过我们的 Arduino 程序进行入侵。

输出引脚(Dout、GPIO_2 和 GPIO2)的源电流要小得多,因此我使用晶体管来驱动它们。此外,当模块上电时,ESP8266的 GPIO 引脚不得加载,否则模块将进入无限复位循环。为避免这种情况,我放置了两个开关,以便在通电时暂时断开它们。

您可以将上述电路焊接到 Perf 板上,或者简单地使用试验板。我使用了母/公 berg 棒,这样我就可以避免在模块上焊接。完成后,您的看板应如下所示

使用 IFTTT 创建发送电子邮件的 API:

硬件准备就绪后,让我们创建一个 API(应用程序接口),它可以将电子邮件发送到特定的电子邮件 ID。这可以在名为 IFTTT.com 的网站的帮助下轻松完成。我还介绍了一个项目,该项目可以使用 ESP8266 发送 SMS,并使用 PIC 微控制器发送电子邮件,PIC 微控制器使用相同的 IFTTT 服务。

如果您尚未使用 IFTTT,请访问本教程末尾的视频,如果您熟悉,只需按照以下步骤作

  1. 登录您的 IFTTT 帐户

  2. 搜索"Maker Web Hooks"并点击"连接"

  3. 现在搜索"Gmail"并单击连接并按照步骤授予访问权限

  4. 然后,通过单击我的 Applet-> New Applet 创建一个 Applet。

  5. 在这里,"This"函数将用于 web makerhooks 服务,"that"函数将是 Gmail 服务

  6. 所以点击"这个",搜索并选择 Web maker hooks。它会询问事件名称,我已将我的事件命名为"123",您可以为您的事件命名任何东西

  7. 然后点击"那个",搜索并选择 Gmail 并输入邮件的主题和正文。

  8. Once all the required details are entered your Apple should be ready and it should look something like this below

  1. 现在,再次搜索并进入 Web Maker Hooks,然后单击"文档"。然后在 event name (事件名称) 下,输入我们在 Applet 中使用的事件名称。在我的情况下,它是 "123" 并复制 URL,因为我们在 Arduino 程序中需要它。URL 应如下所示。

10.您可以点击"测试"按钮来检查您的链接是否正常工作,这样做您应该已经收到了一封测试邮件。

Arduino 程序

该项目的 Arduino 程序简单易行。我们只需让 ESP 充当 AP 和 STA。然后使用 HTML 代码创建一个网页,我们可以在其中 ARM/DISARM 警报系统。本教程末尾给出了完整的代码,还使用注释行对代码进行了解释。下面将进一步解释重要的行。

rtejustify 复制代码
<span style="color:#121212"><span style="background-color:#ffffff"><span style="color:#e4e4e4"><span style="background-color:#1e1e1e">const char* ssid = "BPAS home";  //Enter you Wifi SSID here

const char* password = "cracksen"; //Enter your password here</span></span></span></span>

在上面的代码行中,将 SSID 名称和密码更改为您的路由器 SSID 名称及其相应的密码。

如果您想找到您的 ESP8266 连接到哪个 IP,您可以通过打开串行监视器来找到它,以下代码行将在 Arduino IDE 串行监视器上打印您的 IP。

rtejustify 复制代码
<span style="color:#121212"><span style="background-color:#ffffff"><span style="color:#e4e4e4"><span style="background-color:#1e1e1e">Serial.println("");

  Serial.print("Connected to ");

  Serial.println(ssid);

  Serial.print("IP address: ");

  Serial.println(WiFi.localIP()); //Serial monitor will give the IP addrss of your ESP module</span></span></span></span>

下面给出了负责创建网页的 HTML 代码。您可以使用自己的代码自定义网页。我修改了反馈部分,以便在页面加载成功时确认用户。

rtejustify 复制代码
<span style="color:#121212"><span style="background-color:#ffffff"><span style="color:#e4e4e4"><span style="background-color:#1e1e1e"><strong>­</strong>//HTML code for webpage//

  mainPage += "<h1 align=\"center\">IOT based security System</h1><h2 align=\"center\">-CircuitDigest</h2><h1 align=\"center\"><p>Alarm Status: <a href=\"switch2On\"><button>ARM</button></a>&nbsp;<a href=\"switch2Off\"><button>DISARM</button>  </a></p>";

  feedback = "<h3 align=\"center\">Click on ARM to enable the security system</h3>";

  //End of HTML code//</span></span></span></span>

以下代码行确定当 Alarm 处于 Armed (布防) 或 Disarm (撤防) 状态时应执行的作。在我的程序中,我更改了 HTML 代码的反馈部分,并根据按钮将 GPIO 2 引脚设为 HIGH/LOW,如下所示

rtejustify 复制代码
<span style="color:#121212"><span style="background-color:#ffffff"><span style="color:#e4e4e4"><span style="background-color:#1e1e1e">  server.on("/switch2On", [](){

    feedback = "<h3 align=\"center\">Alarm is up and running </h3>"; //HTML code modification

    currentPage=mainPage+feedback;

    server.send(200, "text/html", currentPage);

    currentPage="";

    digitalWrite(GPIO_2, HIGH); //Turn on PIR and Voice module

    power_module=true;

    delay(1000);

  });

  server.on("/switch2Off", [](){

    feedback = "<h3 align=\"center\">Alarm is down</h3>"; //HTML code modification

    currentPage=mainPage+feedback;

    server.send(200, "text/html", currentPage);

    currentPage="";

    digitalWrite(GPIO_2, LOW); //Turn off PIT and Voice Module

    power_module=false;

    delay(1000);

  });

</span></span></span></span>

为使系统正常工作,必须更改的另一个 重要 行是 URL 字符串行。您将从 IFTTT 网站复制的 line(after"/trigger") 粘贴到此处。我在下面展示了我的密钥,但没有使用我的 API 密钥,请在此处使用您自己的密钥

rtejustify 复制代码
<span style="color:#121212"><span style="background-color:#ffffff"><span style="color:#e4e4e4"><span style="background-color:#1e1e1e"> String url = "/trigger/123/with/key/mDsoOV_EERS3xRfrh3_UQBhbcx0qlRHns-z2qXXXXX"; //Must change it to your API URL</span></span></span></span>

代码的其余部分是不言自明的,如果您有任何疑问,可以使用评论部分,我会帮助您。

加工

准备好硬件和代码后,您可以使用 FTDI 板将程序上传到 ESP8266 模块。如果您不确定如何使用 Arduino IDE 将程序上传到 ESP8266,请访问本教程

上传程序后,单击 Serial monitor,您应该会在下面看到类似这样的内容。如果没有,请重置 ESP8266 模块,然后重试

.

在这里,您还可以记下分配给 ESP8266 模块的 IP 地址。然后您可以使用 IP 在浏览器上加载网页并从那里布防/撤防您的 IoT 安全系统,如下图所示。

验证完所有这些后,您现在可以将 ESP8266 转移到 Perf 板并打开电源,然后短接开关,如视频所示。

开机后,您可以使用 IP 进入上面显示的网页并启用 Securtiy 系统。启用后,等待 50-60 秒,让 PIR 传感器校准。

现在您的项目已准备好采取行动,您可以将其留在您希望的地方,如果有人越过该位置并落入 PIR 传感器的范围内,将触发语音消息,并将向您的电子邮件地址 ID 发送一封电子邮件,其中包含他/她穿越的日期和时间。电子邮件如下所示。

所以,就这样..我希望您喜欢这个项目,并会喜欢制作自己的项目。下面的视频显示了该项目的完整工作。如果您有任何疑问或建议,可以在下面的评论部分写下来,我会尽可能地回复。

完成项目代码

复制代码

language-arduino 复制代码
<span style="color:#121212"><span style="background-color:#ffffff"><span style="background-color:#1e1e1e"><span style="color:#f8f8f2"><code class="language-arduino">
<span style="color:#8292a2">/*Program for : IOT based Security system system with Voice warning
 * Program by :Aswinth Raj
 * Published on : circuitdigest.com
 * Dated:17-05-2017
 */</span>
<span style="color:#f92672">#<span style="color:#66d9ef">include</span> <span style="color:#a6e22e"><ESP8266WiFi.h></span></span>
<span style="color:#f92672">#<span style="color:#66d9ef">include</span> <span style="color:#a6e22e"><WiFiClient.h></span></span>
<span style="color:#f92672">#<span style="color:#66d9ef">include</span> <span style="color:#a6e22e"><WiFiClientSecure.h></span></span>
<span style="color:#f92672">#<span style="color:#66d9ef">include</span> <span style="color:#a6e22e"><ESP8266WebServer.h></span></span>
<span style="color:#f92672">#<span style="color:#66d9ef">include</span> <span style="color:#a6e22e"><ESP8266mDNS.h></span></span>
MDNSResponder mdns<span style="color:#f8f8f2">;</span>
<span style="color:#66d9ef">boolean</span> trigger_sms <span style="color:#f8f8f2">=</span> <span style="color:#ae81ff">false</span><span style="color:#f8f8f2">;</span>
<span style="color:#66d9ef">boolean</span> power_module <span style="color:#f8f8f2">=</span> <span style="color:#ae81ff">false</span><span style="color:#f8f8f2">;</span>
const char<span style="color:#f8f8f2">*</span> ssid <span style="color:#f8f8f2">=</span> <span style="color:#a6e22e">"BPAS home"</span><span style="color:#f8f8f2">;</span>  <span style="color:#8292a2">//Enter you Wifi SSID here</span>
const char<span style="color:#f8f8f2">*</span> password <span style="color:#f8f8f2">=</span> <span style="color:#a6e22e">"cracksen"</span><span style="color:#f8f8f2">;</span> <span style="color:#8292a2">//Enter your password here</span>
ESP8266WebServer <span style="color:#e6db74">server</span><span style="color:#f8f8f2">(</span><span style="color:#ae81ff">80</span><span style="color:#f8f8f2">)</span><span style="color:#f8f8f2">;</span>
<span style="color:#66d9ef">String</span> mainPage <span style="color:#f8f8f2">=</span> <span style="color:#a6e22e">""</span><span style="color:#f8f8f2">;</span> <span style="color:#8292a2">//The default page</span>
<span style="color:#66d9ef">String</span> feedback <span style="color:#f8f8f2">=</span> <span style="color:#a6e22e">""</span><span style="color:#f8f8f2">;</span> <span style="color:#8292a2">//Gives staus of the switch</span>
<span style="color:#66d9ef">String</span> currentPage <span style="color:#f8f8f2">=</span> <span style="color:#a6e22e">""</span><span style="color:#f8f8f2">;</span> <span style="color:#8292a2">//Combines main and feedback page</span>
<span style="color:#66d9ef">int</span> GPIO_0 <span style="color:#f8f8f2">=</span> <span style="color:#ae81ff">0</span><span style="color:#f8f8f2">;</span> <span style="color:#8292a2">//Pin defanition</span>
<span style="color:#66d9ef">int</span> GPIO_2 <span style="color:#f8f8f2">=</span> <span style="color:#ae81ff">2</span><span style="color:#f8f8f2">;</span> <span style="color:#8292a2">//Pin defanition</span>
<span style="color:#66d9ef">void</span> <span style="color:#66d9ef">setup</span><span style="color:#f8f8f2">(</span><span style="color:#66d9ef">void</span><span style="color:#f8f8f2">)</span><span style="color:#f8f8f2">{</span>
  <span style="color:#8292a2">//HTML code for webpage//</span>
  mainPage <span style="color:#f8f8f2">+=</span> <span style="color:#a6e22e">"<h1 align=\"center\">IOT based security System</h1><h2 align=\"center\">-CircuitDigest</h2><h1 align=\"center\"><p>Alarm Status: <a href=\"switch2On\"><button>ARM</button></a> <a href=\"switch2Off\"><button>DISARM</button>  </a></p>"</span><span style="color:#f8f8f2">;</span>
  feedback <span style="color:#f8f8f2">=</span> <span style="color:#a6e22e">"<h3 align=\"center\">Click on ARM to enable the security system</h3>"</span><span style="color:#f8f8f2">;</span>
  <span style="color:#8292a2">//End of HTML code//</span>
  currentPage <span style="color:#f8f8f2">=</span> mainPage<span style="color:#f8f8f2">+</span>feedback<span style="color:#f8f8f2">;</span>
  <span style="color:#8292a2">// preparing GPIOs</span>
  <span style="color:#e6db74">pinMode</span><span style="color:#f8f8f2">(</span>GPIO_0<span style="color:#f8f8f2">,</span> <span style="color:#f92672">INPUT</span><span style="color:#f8f8f2">)</span><span style="color:#f8f8f2">;</span> <span style="color:#8292a2">//feeded by PIR sensor</span>
  <span style="color:#e6db74">pinMode</span><span style="color:#f8f8f2">(</span>GPIO_2<span style="color:#f8f8f2">,</span> <span style="color:#f92672">OUTPUT</span><span style="color:#f8f8f2">)</span><span style="color:#f8f8f2">;</span> <span style="color:#8292a2">//used to turn on PIR and Voice module</span>
  digitalWrite<span style="color:#f8f8f2">(</span>GPIO_2<span style="color:#f8f8f2">,</span> <span style="color:#f92672">LOW</span><span style="color:#f8f8f2">)</span><span style="color:#f8f8f2">;</span>
  <span style="color:#e6db74">delay</span><span style="color:#f8f8f2">(</span><span style="color:#ae81ff">1000</span><span style="color:#f8f8f2">)</span><span style="color:#f8f8f2">;</span>
  <span style="color:#a6e22e">Serial</span><span style="color:#f8f8f2">.</span><span style="color:#e6db74">begin</span><span style="color:#f8f8f2">(</span><span style="color:#ae81ff">115200</span><span style="color:#f8f8f2">)</span><span style="color:#f8f8f2">;</span>
  <span style="color:#a6e22e">WiFi</span><span style="color:#f8f8f2">.</span><span style="color:#e6db74">begin</span><span style="color:#f8f8f2">(</span>ssid<span style="color:#f8f8f2">,</span> password<span style="color:#f8f8f2">)</span><span style="color:#f8f8f2">;</span>
  <span style="color:#a6e22e">Serial</span><span style="color:#f8f8f2">.</span><span style="color:#e6db74">println</span><span style="color:#f8f8f2">(</span><span style="color:#a6e22e">""</span><span style="color:#f8f8f2">)</span><span style="color:#f8f8f2">;</span>
  <span style="color:#8292a2">// Wait for connection</span>
  <span style="color:#66d9ef">while</span> <span style="color:#f8f8f2">(</span><span style="color:#a6e22e">WiFi</span><span style="color:#f8f8f2">.</span><span style="color:#e6db74">status</span><span style="color:#f8f8f2">(</span><span style="color:#f8f8f2">)</span> <span style="color:#f8f8f2">!=</span> WL_CONNECTED<span style="color:#f8f8f2">)</span> <span style="color:#f8f8f2">{</span>
    <span style="color:#e6db74">delay</span><span style="color:#f8f8f2">(</span><span style="color:#ae81ff">500</span><span style="color:#f8f8f2">)</span><span style="color:#f8f8f2">;</span>
    <span style="color:#a6e22e">Serial</span><span style="color:#f8f8f2">.</span><span style="color:#e6db74">print</span><span style="color:#f8f8f2">(</span><span style="color:#a6e22e">"."</span><span style="color:#f8f8f2">)</span><span style="color:#f8f8f2">;</span>
  <span style="color:#f8f8f2">}</span>
  <span style="color:#8292a2">// config static IP</span>
  <span style="color:#a6e22e">Serial</span><span style="color:#f8f8f2">.</span><span style="color:#e6db74">println</span><span style="color:#f8f8f2">(</span><span style="color:#a6e22e">""</span><span style="color:#f8f8f2">)</span><span style="color:#f8f8f2">;</span>
  <span style="color:#a6e22e">Serial</span><span style="color:#f8f8f2">.</span><span style="color:#e6db74">print</span><span style="color:#f8f8f2">(</span><span style="color:#a6e22e">"Connected to "</span><span style="color:#f8f8f2">)</span><span style="color:#f8f8f2">;</span>
  <span style="color:#a6e22e">Serial</span><span style="color:#f8f8f2">.</span><span style="color:#e6db74">println</span><span style="color:#f8f8f2">(</span>ssid<span style="color:#f8f8f2">)</span><span style="color:#f8f8f2">;</span>
  <span style="color:#a6e22e">Serial</span><span style="color:#f8f8f2">.</span><span style="color:#e6db74">print</span><span style="color:#f8f8f2">(</span><span style="color:#a6e22e">"IP address: "</span><span style="color:#f8f8f2">)</span><span style="color:#f8f8f2">;</span>
  <span style="color:#a6e22e">Serial</span><span style="color:#f8f8f2">.</span><span style="color:#e6db74">println</span><span style="color:#f8f8f2">(</span><span style="color:#a6e22e">WiFi</span><span style="color:#f8f8f2">.</span><span style="color:#e6db74">localIP</span><span style="color:#f8f8f2">(</span><span style="color:#f8f8f2">)</span><span style="color:#f8f8f2">)</span><span style="color:#f8f8f2">;</span> <span style="color:#8292a2">//Serial monitor will give the IP addrss of your ESP module</span>
  <span style="color:#66d9ef">if</span> <span style="color:#f8f8f2">(</span>mdns<span style="color:#f8f8f2">.</span><span style="color:#e6db74">begin</span><span style="color:#f8f8f2">(</span><span style="color:#a6e22e">"esp8266"</span><span style="color:#f8f8f2">,</span> <span style="color:#a6e22e">WiFi</span><span style="color:#f8f8f2">.</span><span style="color:#e6db74">localIP</span><span style="color:#f8f8f2">(</span><span style="color:#f8f8f2">)</span><span style="color:#f8f8f2">)</span><span style="color:#f8f8f2">)</span> <span style="color:#f8f8f2">{</span>
    <span style="color:#a6e22e">Serial</span><span style="color:#f8f8f2">.</span><span style="color:#e6db74">println</span><span style="color:#f8f8f2">(</span><span style="color:#a6e22e">"MDNS responder started"</span><span style="color:#f8f8f2">)</span><span style="color:#f8f8f2">;</span>
  <span style="color:#f8f8f2">}</span>
  server<span style="color:#f8f8f2">.</span><span style="color:#e6db74">on</span><span style="color:#f8f8f2">(</span><span style="color:#a6e22e">"/"</span><span style="color:#f8f8f2">,</span> <span style="color:#f8f8f2">[</span><span style="color:#f8f8f2">]</span><span style="color:#f8f8f2">(</span><span style="color:#f8f8f2">)</span><span style="color:#f8f8f2">{</span>
    currentPage <span style="color:#f8f8f2">=</span> mainPage<span style="color:#f8f8f2">+</span>feedback<span style="color:#f8f8f2">;</span>
    server<span style="color:#f8f8f2">.</span><span style="color:#e6db74">send</span><span style="color:#f8f8f2">(</span><span style="color:#ae81ff">200</span><span style="color:#f8f8f2">,</span> <span style="color:#a6e22e">"text/html"</span><span style="color:#f8f8f2">,</span> currentPage<span style="color:#f8f8f2">)</span><span style="color:#f8f8f2">;</span>
    currentPage <span style="color:#f8f8f2">=</span> <span style="color:#a6e22e">""</span><span style="color:#f8f8f2">;</span>
  <span style="color:#f8f8f2">}</span><span style="color:#f8f8f2">)</span><span style="color:#f8f8f2">;</span>
  server<span style="color:#f8f8f2">.</span><span style="color:#e6db74">on</span><span style="color:#f8f8f2">(</span><span style="color:#a6e22e">"/switch2On"</span><span style="color:#f8f8f2">,</span> <span style="color:#f8f8f2">[</span><span style="color:#f8f8f2">]</span><span style="color:#f8f8f2">(</span><span style="color:#f8f8f2">)</span><span style="color:#f8f8f2">{</span>
    feedback <span style="color:#f8f8f2">=</span> <span style="color:#a6e22e">"<h3 align=\"center\">Alarm is up and running </h3>"</span><span style="color:#f8f8f2">;</span> <span style="color:#8292a2">//HTML code modification</span>
    currentPage<span style="color:#f8f8f2">=</span>mainPage<span style="color:#f8f8f2">+</span>feedback<span style="color:#f8f8f2">;</span>
    server<span style="color:#f8f8f2">.</span><span style="color:#e6db74">send</span><span style="color:#f8f8f2">(</span><span style="color:#ae81ff">200</span><span style="color:#f8f8f2">,</span> <span style="color:#a6e22e">"text/html"</span><span style="color:#f8f8f2">,</span> currentPage<span style="color:#f8f8f2">)</span><span style="color:#f8f8f2">;</span>
    currentPage<span style="color:#f8f8f2">=</span><span style="color:#a6e22e">""</span><span style="color:#f8f8f2">;</span>
    <span style="color:#e6db74">digitalWrite</span><span style="color:#f8f8f2">(</span>GPIO_2<span style="color:#f8f8f2">,</span> <span style="color:#f92672">HIGH</span><span style="color:#f8f8f2">)</span><span style="color:#f8f8f2">;</span> <span style="color:#8292a2">//Turn on PIR and Voice module</span>
    power_module<span style="color:#f8f8f2">=</span><span style="color:#ae81ff">true</span><span style="color:#f8f8f2">;</span>
    <span style="color:#e6db74">delay</span><span style="color:#f8f8f2">(</span><span style="color:#ae81ff">1000</span><span style="color:#f8f8f2">)</span><span style="color:#f8f8f2">;</span>
  <span style="color:#f8f8f2">}</span><span style="color:#f8f8f2">)</span><span style="color:#f8f8f2">;</span>
  server<span style="color:#f8f8f2">.</span><span style="color:#e6db74">on</span><span style="color:#f8f8f2">(</span><span style="color:#a6e22e">"/switch2Off"</span><span style="color:#f8f8f2">,</span> <span style="color:#f8f8f2">[</span><span style="color:#f8f8f2">]</span><span style="color:#f8f8f2">(</span><span style="color:#f8f8f2">)</span><span style="color:#f8f8f2">{</span>
    feedback <span style="color:#f8f8f2">=</span> <span style="color:#a6e22e">"<h3 align=\"center\">Alarm is down</h3>"</span><span style="color:#f8f8f2">;</span> <span style="color:#8292a2">//HTML code modification </span>
    currentPage<span style="color:#f8f8f2">=</span>mainPage<span style="color:#f8f8f2">+</span>feedback<span style="color:#f8f8f2">;</span>
    server<span style="color:#f8f8f2">.</span><span style="color:#e6db74">send</span><span style="color:#f8f8f2">(</span><span style="color:#ae81ff">200</span><span style="color:#f8f8f2">,</span> <span style="color:#a6e22e">"text/html"</span><span style="color:#f8f8f2">,</span> currentPage<span style="color:#f8f8f2">)</span><span style="color:#f8f8f2">;</span>
    currentPage<span style="color:#f8f8f2">=</span><span style="color:#a6e22e">""</span><span style="color:#f8f8f2">;</span>
    <span style="color:#e6db74">digitalWrite</span><span style="color:#f8f8f2">(</span>GPIO_2<span style="color:#f8f8f2">,</span> <span style="color:#f92672">LOW</span><span style="color:#f8f8f2">)</span><span style="color:#f8f8f2">;</span> <span style="color:#8292a2">//Turn off PIT and Voice Module</span>
    power_module<span style="color:#f8f8f2">=</span><span style="color:#ae81ff">false</span><span style="color:#f8f8f2">;</span>
    <span style="color:#e6db74">delay</span><span style="color:#f8f8f2">(</span><span style="color:#ae81ff">1000</span><span style="color:#f8f8f2">)</span><span style="color:#f8f8f2">;</span> 
  <span style="color:#f8f8f2">}</span><span style="color:#f8f8f2">)</span><span style="color:#f8f8f2">;</span>
  server<span style="color:#f8f8f2">.</span><span style="color:#e6db74">begin</span><span style="color:#f8f8f2">(</span><span style="color:#f8f8f2">)</span><span style="color:#f8f8f2">;</span>
  <span style="color:#a6e22e">Serial</span><span style="color:#f8f8f2">.</span><span style="color:#e6db74">println</span><span style="color:#f8f8f2">(</span><span style="color:#a6e22e">"IOT security system is up and running"</span><span style="color:#f8f8f2">)</span><span style="color:#f8f8f2">;</span>
<span style="color:#f8f8f2">}</span>
<span style="color:#8292a2">//Function to send an E-mail//</span>
<span style="color:#66d9ef">void</span> <span style="color:#e6db74">send_Email</span><span style="color:#f8f8f2">(</span><span style="color:#f8f8f2">)</span>
<span style="color:#f8f8f2">{</span>
const char<span style="color:#f8f8f2">*</span> host <span style="color:#f8f8f2">=</span> <span style="color:#a6e22e">"maker.ifttt.com"</span><span style="color:#f8f8f2">;</span> <span style="color:#8292a2">//The host of API URL will be the same for all</span>
const <span style="color:#66d9ef">int</span> httpsPort <span style="color:#f8f8f2">=</span> <span style="color:#ae81ff">443</span><span style="color:#f8f8f2">;</span>
   WiFiClientSecure client<span style="color:#f8f8f2">;</span>
  <span style="color:#a6e22e">Serial</span><span style="color:#f8f8f2">.</span><span style="color:#e6db74">print</span><span style="color:#f8f8f2">(</span><span style="color:#a6e22e">"connecting to "</span><span style="color:#f8f8f2">)</span><span style="color:#f8f8f2">;</span>
  <span style="color:#a6e22e">Serial</span><span style="color:#f8f8f2">.</span><span style="color:#e6db74">println</span><span style="color:#f8f8f2">(</span>host<span style="color:#f8f8f2">)</span><span style="color:#f8f8f2">;</span>
  <span style="color:#66d9ef">if</span> <span style="color:#f8f8f2">(</span><span style="color:#f8f8f2">!</span>client<span style="color:#f8f8f2">.</span><span style="color:#e6db74">connect</span><span style="color:#f8f8f2">(</span>host<span style="color:#f8f8f2">,</span> httpsPort<span style="color:#f8f8f2">)</span><span style="color:#f8f8f2">)</span> <span style="color:#f8f8f2">{</span>
    <span style="color:#a6e22e">Serial</span><span style="color:#f8f8f2">.</span><span style="color:#e6db74">println</span><span style="color:#f8f8f2">(</span><span style="color:#a6e22e">"connection failed"</span><span style="color:#f8f8f2">)</span><span style="color:#f8f8f2">;</span>
    <span style="color:#66d9ef">return</span><span style="color:#f8f8f2">;</span>
  <span style="color:#f8f8f2">}</span>
  <span style="color:#66d9ef">String</span> url <span style="color:#f8f8f2">=</span> <span style="color:#a6e22e">"/trigger/123/with/key/mDsoOV_EERS3xRfrh3_UQBhbcx0qlRHns-z2qXXXXX"</span><span style="color:#f8f8f2">;</span> <span style="color:#8292a2">//Must change it to your API URL</span>
  <span style="color:#a6e22e">Serial</span><span style="color:#f8f8f2">.</span><span style="color:#e6db74">print</span><span style="color:#f8f8f2">(</span><span style="color:#a6e22e">"requesting URL: "</span><span style="color:#f8f8f2">)</span><span style="color:#f8f8f2">;</span>
  <span style="color:#a6e22e">Serial</span><span style="color:#f8f8f2">.</span><span style="color:#e6db74">println</span><span style="color:#f8f8f2">(</span>url<span style="color:#f8f8f2">)</span><span style="color:#f8f8f2">;</span>
  client<span style="color:#f8f8f2">.</span><span style="color:#e6db74">print</span><span style="color:#f8f8f2">(</span><span style="color:#66d9ef">String</span><span style="color:#f8f8f2">(</span><span style="color:#a6e22e">"GET "</span><span style="color:#f8f8f2">)</span> <span style="color:#f8f8f2">+</span> url <span style="color:#f8f8f2">+</span> <span style="color:#a6e22e">" HTTP/1.1\r\n"</span> <span style="color:#f8f8f2">+</span>
               <span style="color:#a6e22e">"Host: "</span> <span style="color:#f8f8f2">+</span> host <span style="color:#f8f8f2">+</span> <span style="color:#a6e22e">"\r\n"</span> <span style="color:#f8f8f2">+</span>
               <span style="color:#a6e22e">"User-Agent: BuildFailureDetectorESP8266\r\n"</span> <span style="color:#f8f8f2">+</span>
               <span style="color:#a6e22e">"Connection: close\r\n\r\n"</span><span style="color:#f8f8f2">)</span><span style="color:#f8f8f2">;</span>
  <span style="color:#a6e22e">Serial</span><span style="color:#f8f8f2">.</span><span style="color:#e6db74">println</span><span style="color:#f8f8f2">(</span><span style="color:#a6e22e">"request sent"</span><span style="color:#f8f8f2">)</span><span style="color:#f8f8f2">;</span>
  <span style="color:#66d9ef">while</span> <span style="color:#f8f8f2">(</span>client<span style="color:#f8f8f2">.</span><span style="color:#e6db74">connected</span><span style="color:#f8f8f2">(</span><span style="color:#f8f8f2">)</span><span style="color:#f8f8f2">)</span> <span style="color:#f8f8f2">{</span>
    <span style="color:#66d9ef">String</span> <span style="color:#a6e22e">line</span> <span style="color:#f8f8f2">=</span> client<span style="color:#f8f8f2">.</span><span style="color:#e6db74">readStringUntil</span><span style="color:#f8f8f2">(</span><span style="color:#a6e22e">'\n'</span><span style="color:#f8f8f2">)</span><span style="color:#f8f8f2">;</span>
    <span style="color:#66d9ef">if</span> <span style="color:#f8f8f2">(</span><span style="color:#a6e22e">line</span> <span style="color:#f8f8f2">==</span> <span style="color:#a6e22e">"\r"</span><span style="color:#f8f8f2">)</span> <span style="color:#f8f8f2">{</span>
      <span style="color:#a6e22e">Serial</span><span style="color:#f8f8f2">.</span><span style="color:#e6db74">println</span><span style="color:#f8f8f2">(</span><span style="color:#a6e22e">"headers received"</span><span style="color:#f8f8f2">)</span><span style="color:#f8f8f2">;</span>
      <span style="color:#66d9ef">break</span><span style="color:#f8f8f2">;</span>
    <span style="color:#f8f8f2">}</span>
  <span style="color:#f8f8f2">}</span>
  <span style="color:#66d9ef">String</span> <span style="color:#a6e22e">line</span> <span style="color:#f8f8f2">=</span> client<span style="color:#f8f8f2">.</span><span style="color:#e6db74">readStringUntil</span><span style="color:#f8f8f2">(</span><span style="color:#a6e22e">'\n'</span><span style="color:#f8f8f2">)</span><span style="color:#f8f8f2">;</span>
  <span style="color:#a6e22e">Serial</span><span style="color:#f8f8f2">.</span><span style="color:#e6db74">println</span><span style="color:#f8f8f2">(</span><span style="color:#a6e22e">"reply was:"</span><span style="color:#f8f8f2">)</span><span style="color:#f8f8f2">;</span>
  <span style="color:#a6e22e">Serial</span><span style="color:#f8f8f2">.</span><span style="color:#e6db74">println</span><span style="color:#f8f8f2">(</span><span style="color:#a6e22e">"=========="</span><span style="color:#f8f8f2">)</span><span style="color:#f8f8f2">;</span>
  <span style="color:#a6e22e">Serial</span><span style="color:#f8f8f2">.</span><span style="color:#e6db74">println</span><span style="color:#f8f8f2">(</span><span style="color:#a6e22e">line</span><span style="color:#f8f8f2">)</span><span style="color:#f8f8f2">;</span>
  <span style="color:#a6e22e">Serial</span><span style="color:#f8f8f2">.</span><span style="color:#e6db74">println</span><span style="color:#f8f8f2">(</span><span style="color:#a6e22e">"=========="</span><span style="color:#f8f8f2">)</span><span style="color:#f8f8f2">;</span>
  <span style="color:#a6e22e">Serial</span><span style="color:#f8f8f2">.</span><span style="color:#e6db74">println</span><span style="color:#f8f8f2">(</span><span style="color:#a6e22e">"closing connection"</span><span style="color:#f8f8f2">)</span><span style="color:#f8f8f2">;</span>
<span style="color:#f8f8f2">}</span>
<span style="color:#8292a2">//Function to send an E-mail</span>
<span style="color:#66d9ef">void</span> <span style="color:#66d9ef">loop</span><span style="color:#f8f8f2">(</span><span style="color:#66d9ef">void</span><span style="color:#f8f8f2">)</span><span style="color:#f8f8f2">{</span>
  server<span style="color:#f8f8f2">.</span><span style="color:#e6db74">handleClient</span><span style="color:#f8f8f2">(</span><span style="color:#f8f8f2">)</span><span style="color:#f8f8f2">;</span>
  <span style="color:#66d9ef">if</span> <span style="color:#f8f8f2">(</span><span style="color:#e6db74">digitalRead</span><span style="color:#f8f8f2">(</span>GPIO_0<span style="color:#f8f8f2">==</span><span style="color:#f92672">HIGH</span><span style="color:#f8f8f2">)</span> <span style="color:#f8f8f2">&&</span> power_module<span style="color:#f8f8f2">==</span><span style="color:#ae81ff">true</span><span style="color:#f8f8f2">)</span>
  trigger_sms<span style="color:#f8f8f2">=</span><span style="color:#ae81ff">true</span><span style="color:#f8f8f2">;</span>
  <span style="color:#66d9ef">else</span>
  trigger_sms<span style="color:#f8f8f2">=</span><span style="color:#ae81ff">false</span><span style="color:#f8f8f2">;</span>
  <span style="color:#66d9ef">if</span> <span style="color:#f8f8f2">(</span>trigger_sms<span style="color:#f8f8f2">==</span><span style="color:#ae81ff">true</span><span style="color:#f8f8f2">)</span>
  <span style="color:#f8f8f2">{</span>
    <span style="color:#e6db74">send_Email</span><span style="color:#f8f8f2">(</span><span style="color:#f8f8f2">)</span><span style="color:#f8f8f2">;</span> <span style="color:#8292a2">//If the PIR module is powered and if a person is detected send a E-mail</span>
    trigger_sms<span style="color:#f8f8f2">=</span><span style="color:#ae81ff">false</span><span style="color:#f8f8f2">;</span>
    <span style="color:#e6db74">delay</span><span style="color:#f8f8f2">(</span><span style="color:#ae81ff">2000</span><span style="color:#f8f8f2">)</span><span style="color:#f8f8f2">;</span>
  <span style="color:#f8f8f2">}</span>
<span style="color:#f8f8f2">}</span></code></span></span></span></span>
相关推荐
合作小小程序员小小店3 小时前
SDN安全开发环境中常见的框架,工具,第三方库,mininet常见指令介绍
python·安全·生成对抗网络·网络安全·网络攻击模型
数据智能老司机4 小时前
实现逆向工程——汇编指令演练
安全·逆向·汇编语言
网络研究院6 小时前
新的“MadeYouReset”方法利用 HTTP/2 进行隐秘的 DoS 攻击
网络·网络协议·安全·http·攻击·漏洞
guts°7 小时前
6-服务安全检测和防御技术
安全
sinat_2869451916 小时前
AI应用安全 - Prompt注入攻击
人工智能·安全·prompt
AI精钢19 小时前
H20芯片与中国的科技自立:一场隐形的博弈
人工智能·科技·stm32·单片机·物联网
胡耀超20 小时前
DataOceanAI Dolphin(ffmpeg音频转化教程) 多语言(中国方言)语音识别系统部署与应用指南
python·深度学习·ffmpeg·音视频·语音识别·多模态·asr
数据智能老司机1 天前
实现逆向工程——理解 x86 机器架构
安全·逆向
数据智能老司机1 天前
实现逆向工程——逆向工程的影响
安全·逆向