快捷搜索: 王者荣耀 脱发

ESP8266基础开发(一)---读DHT11温湿度传感器

这篇文章的目的是展示如何将DHT11传感器连接到ESP8266并编写一个简单的程序来测量温度和湿度。我们假设使用Arduino IDE对ESP8266进行编程。

硬件

在这种情况下,我们假设使用DHT11板,如图1所示。就个人而言,当我开始一个新的概念验证项目时,我喜欢准备上一些可用的模块。在证明了这个概念后,如果需要,我就开始进行硬件优化。

图1 - DHT11板。

DHT11可以测量温度和湿度,是简单环境监测项目的理想选择。它的温度分辨率为1ºC,相对湿度为1%。它的温度范围在0ºC到50ºC之间,湿度的测量范围取决于温度(您可以查看的详细信息)。

与ESP8266的连接非常简单,如图2所示。在这种情况下,我们假设使用GPIO2(这是使用时可用的少数几种)。不过,您可以将其连接到其他GPIO引脚。如果使用NodeMCU板,请考虑到电路板中的引脚顺序与ESP8266引脚不匹配,这可能导致错误结果(您可以在检查引脚映射)。

图2 - DHT11和ESP8266之间的连接图。

另外,考虑到不同的DHT11板可能具有不同的信号引脚名称,例如“数据”或简称为“S”。

安装库

如前所述,我们假设使用Arduino IDE对ESP8266进行编程。如果您尚未将其配置为支持ESP8266板,请查看前面的博文。如所料,Arduino有一些库可以简化我们与DHT11交互的任务。一个非常简单易用且与ESP8266配合使用的是。可以通过Arduino IDE Library Manager轻松安装该库,如图3所示。

图3 - 通过库管理器安装简单的DHT传感器库。

代码

要导入新安装的库,请在代码顶部添加以下include:

1 #include <SimpleDHT.h>

同时使用GPIO引脚的编号声明一个全局变量,以便于更改。在这种情况下,我们将使用GPIO2:

1 int DHTpin = 2;

要允许将数据发送到计算机,请在设置功能中启动串行连接:

1 Serial.begin(115200);

在你的主循环中声明两个字节变量,一个用于温度,另一个用于湿度:

1 2 byte temperature; byte humidity;

我们使用字节变量,因为DHT11在温度和湿度方面只有8位分辨率。

最后,同样在主循环函数中,读取值并通过串口发送它们:

1 2 3 4 五 6 7 8 9 10 11 12 if (simple_dht11_read(DHTpin, &temperature, &humidity, NULL)) { Serial.print("Failed."); }else { Serial.print("temperature: "); Serial.print(temperature); Serial.println("ºC"); Serial.print("Humidity: "); Serial.print(humidity); Serial.println("%"); } delay(2000);

在尝试使用或将数据发送到其他实体之前,请务必检查读取功能是否返回错误。此外,如前所述,请仔细检查接线,尤其是在使用nodeMCU时。例如,在这种情况下,我使用精确的NodeMCU板测试代码,并且电路板的引脚编号4(“D4”)是与ESP8266的GPIO2相对应的编号。

另外,不要忘记在读数之间加一些延迟。

如果您打开Arduino IDE的串行监视器,您应该会看到类似于图4的内容。

图4 - DHT读数。

重要的是,DHT11仅在连接到它的微控制器请求时执行测量。因此,传感器保持低功率模式,直到接收到启动信号,以测量温度和湿度。完成测量后,它将返回低功耗模式,直到收到新的启动信号[2]。

最后

可以看出,将DHT11连接到ESP8266非常简单。虽然本教程仅解释了如何使用串行连接将数据发送到计算机,但使用ESP8266功能可以很容易地调整用于将测量结果发送到远程服务器的代码。您可以查看 使用ESP8266和DHT11将数据发送到云的温度记录器示例。

我将留下 所用库的github页面的链接。

经验分享 程序员 微信小程序 职场和发展