基于 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 对一个模块进行编程。您必须知道这一点才能完成项目。
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,请访问本教程末尾的视频,如果您熟悉,只需按照以下步骤作
-
登录您的 IFTTT 帐户
-
搜索"Maker Web Hooks"并点击"连接"
-
现在搜索"Gmail"并单击连接并按照步骤授予访问权限
-
然后,通过单击我的 Applet-> New Applet 创建一个 Applet。
-
在这里,"This"函数将用于 web makerhooks 服务,"that"函数将是 Gmail 服务
-
所以点击"这个",搜索并选择 Web maker hooks。它会询问事件名称,我已将我的事件命名为"123",您可以为您的事件命名任何东西
-
然后点击"那个",搜索并选择 Gmail 并输入邮件的主题和正文。
-
Once all the required details are entered your Apple should be ready and it should look something like this below


- 现在,再次搜索并进入 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> <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>