风筝
发表于: 2021-9-10 11:02:39 | 显示全部楼层

ESP32系列微控制器是一款低成本、低功耗的片上系统微控制器,集成Wi-Fi和双模蓝牙。 ESP32系列配备Tensilica Xtensa LX6微处理器(双核和单核),并内置天线开关、RF巴伦、功率放大器、低噪声接收放大器、滤波器和电源管理模块。


在本篇文章中,我们将基于ESP32制作构建一个网络服务器来显示DHT11传感器的温度和湿度值。 ESP32开发板从DHT11传感器读取温湿度数据,然后显示在网页上。本文IFTTT还用于在温度超过特定限制值时发送电子邮件通知。


所需的组件

●    ESP-32开发套件

●    DHT11传感器模块

●    跳线


电路图

DHT11温湿度传感器与ESP32连接电路图如下。

ESP32-interfacing-with-dht11.jpg


DHT11传感器与ESP32开发板的连接非常简单,因为它只有三个引脚。将传感器的VCC和GND引脚分别连接到ESP32的3.3V和GND引脚。然后将传感器的数据引脚连接到ESP32的D2引脚。建立连接后,硬件如下所示:

IoT-Based-Temperature-and-Humidity-Measurement-using-ESP32-and-DHT11-Sensor.jpg


IFTTT设置用于显示温度和湿度值

IFTTT是一项基于Web的免费服务,它允许用户创建一系列简单的条件语句,称为“recipes”,这些语句是根据Gmail、Facebook、Instagram 和Pinterest等其他Web服务的更改触发的。 IFTTT 是“If This Then That”的缩写。


在本篇文章中,IFTTT用于在温度或湿度超过预定义限制时发送电子邮件。首先使用您的账号登录IFTTT,如果您没有帐户,请先进行注册。


接下来搜索“Webhooks”,然后单击“Services”部分中的“Webhooks”。

Webhooks.png


在Webhooks窗口中,单击右上角的“Documentation”获取私钥。复制该密钥,后面将在程序中使用。

Webhooks-Key.png


获得私钥后,现在我们将使用Webhooks和电子邮件服务创建一个小程序。要创建小程序,请单击您的个人资料,然后单击“Create”。


在下一个窗口中,单击“This”图标。

IFTTT.png


现在在搜索框搜索Webhooks,然后单击“Webhooks”。


选择“Receive a Web Request”触发器,然后输入事件名称为temp_event,单击创建触发器。

Trigger-Field.png


在此之后,单击“Then That”,然后单击“Email”。

Action-Service.png


现在在电子邮件中,单击“‘send me an email’”并输入电子邮件主题和正文,然后单击创建操作。

Action-Field.png

在最后一步单击“Finish”完成小程序设置。

跳转到指定楼层
风筝
发表于: 2021-9-10 11:31:59 | 显示全部楼层

代码说明

本文我们将使用Arduino IDE对ESP32开发板进行编程,因此需要在Arduino IDE中下载并安装ESP32板文件。在本节中,我们将介绍该程序的一些重要部分。


首先在代码中包含所有必需的库。对于本文,我们需要三个库文件WiFi、DHT(用于 DHT 传感器)和Wire(用于 I2C)。

  1. #include <WiFi.h>
  2. #include <Wire.h>
  3. #include "DHT.h
复制代码

然后定义DHT传感器的型号和传感器连接的引脚。

  1. #define DHTTYPE DHT11 // DHT 11
  2. uint8_t DHTPin = D2;
  3. DHT dht(DHTPin, DHTTYPE);
复制代码

然后,为Wi-Fi名称、Wi-Fi密码、IFTTT主机名和私钥创建实例。

  1. const char* ssid = "Wi-Fi Name";
  2. const char* password = "Password";
  3. const char *host = "maker.ifttt.com";
  4. const char *privateKey = "Private key";
复制代码

之后,为了使用 WiFiServer函数,我们声明了一个WifiServer库的对象。80是HTTP连接的默认端口。

  1. WiFiServer server(80);
复制代码

void setup()函数中,初始化波特率,使用begin()函数DHT传感器,然后使用Wi-Fi用户名和密码将模块与Wi-Fi连接。 ESP32开发板连接到Wi-Fi后,它将打印ESP3 的IP 地址。

  1. Serial.begin(115200);
  2. pinMode(DHTPin, INPUT);
  3. dht.begin();
  4. Serial.print("Connecting to Wifi Network");
  5. Serial.println(ssid);
  6. WiFi.begin(ssid, password);
  7. while (WiFi.status() != WL_CONNECTED) {
  8. delay(500);
  9. Serial.print(".");
  10. }
  11. Serial.println("");
  12. Serial.println("Connected to WiFi.");
  13. Serial.println("IP address of ESP32 is : ");
  14. ………………………………..
  15. ………………………………….
复制代码

void loop()函数中,使用DHTdht.read()函数读取温度和湿度数据,并将该数据存储在不同的变量中。

  1. Temperature = dht.readTemperature();
  2. Humidity = dht.readHumidity();
复制代码

之后,使用client.println()函数设计HTML网页并打印脚本。

  1. WiFiClient client = server.available();
  2. if (client)
  3. {
  4. Serial.println("Web Client connected ");
  5. String request = client.readStringUntil('\r');
  6. client.println("HTTP/1.1 200 OK");
  7. client.println("Content-Type: text/html");
  8. client.println("Connection: close");  // the connection will be closed after completion of the response
  9. client.println("Refresh: 10");  // update the page after 10 sec
  10. client.println();
复制代码

这里CSS用于设置文本和背景的样式。您可以更改CSS代码以根据需要更改网页的外观。

  1. client.println("<style>html { font-family: Cairo; display: block; margin: 0px auto; text-align: center;color: #333333; background-color: ##f3ffee;}");
  2. client.println("body{margin-top: 50px;}");
  3. client.println("h1 {margin: 50px auto 30px; font-size: 50px;  text-align: center;}");
  4. client.println(".side_adjust{display: inline-block;vertical-align: middle;position: relative;}");
  5. client.println(".text1{font-weight: 180; padding-left: 15px; font-size: 50px; width: 170px; text-align: left; color: #3498db;}");
  6. ………….
  7. ………….
复制代码

在HTML代码中,<div> 标签用于显示两个参数,即温度和湿度。

  1. client.println("<div class="side_adjust text1">Humidity:</div>");
  2. client.println("<div class="side_adjust data1">");
  3. client.print(Humidity);
  4. client.println("<div class="side_adjust text1">%</div>");
  5. client.println("</div>");
  6. client.println("<div class="data">");
  7. client.println("<div class="side_adjust text2">Temperature:</div>");
  8. client.println("<div class="side_adjust data2">");
  9. client.print(Temperature);
  10. client.println("<div class="side_adjust text2">*C</div>");
  11. ………..
  12. ………..
复制代码

之后,使用if条件来触发事件。当温度超过20度时,它就会向IFTT发送一个触发器。

  1. if ( Temperature >= 20) {
  2.         send_event("temp_event");
  3.         }
复制代码

测试ESP32与DHT11的连接

现在将ESP32与笔记本电脑连接,并正确选择开发板和端口,然后单击上传按钮。


确保笔记本电脑和ESP32连接到同一个 Wi-Fi 网络。上传代码后,打开串口监视器,将波特率更改为115200。之后,您的串口监视器应如下所示:

Serial-Monitor.png


现在要访问网页,请复制ESP32的IP地址并将其粘贴到浏览器中。网页如下所示:

ESP32-Interfacing-with DHT11.png


现在,每当温度值超过20时,它将触发IFTTT事件发送电子邮件通知温度已超过临界值。

IoT-Based-Temperature-and-Humidity-Measurement.png


以上就是使用DHT11传感器与ESP32连接以制作基于物联网的温湿度测量系统的全部内容。如果有疑问,请随时在本帖下面进行回复。


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题 54 | 回复: 107



手机版|

GMT+8, 2024-3-29 06:22 , Processed in 0.092616 second(s), 6 queries , Gzip On, MemCache On. Powered by Discuz! X3.5

YiBoard一板网 © 2015-2022 地址:河北省石家庄市长安区高营大街 ( 冀ICP备18020117号 )

快速回复 返回顶部 返回列表