24小时联系电话:18217114652、13661815404

中文

您当前的位置:
首页>
电子资讯>
行业资讯>
带有 ESP8266 和 DS18...

行业资讯

带有 ESP8266 和 DS18B20 的 WIFI 温度监控器


带有 ESP8266 DS18B20 WIFI 温度监控器

今天,我们将创建一个wifi温度监控系统。对于读数,我们将使用 DS18B20 传感器。对于数据处理和网页创建,我们将使用我们已知的 ESP8266

该项目将建设如下:

电路组装

读取 DS18B20 传感器的代码(我们将使用串行进行测试)。

创建网页(我们将使用 SPIFFS 存储在 FLASH 中)。

但首先,让我们了解一下传感器及其使用的通信模型。

DS18B20

DS18B20是一款精度好、定制性好、实用、可靠、成本低的数字温度传感器。组合好?

传感器监测范围内的温度:-55°C +125°C-67°F +257°F),在 -10°C +85°C 的范围内精度为 +-0.5°C (在该范围之外,这种不准确性会增加,但没什么可笑的)。

它使用三个引脚进行操作:

VDD(电源)

GND(接地)

DQ(数字通信)

VDD 3V 5.5V 的值工作,甚至可以省略。传感器具有寄生模式,仅使用 DQ GND 引脚,其电源来自通信引脚。这种模式效果很好,但更容易受到噪音的影响。

数据通信使用 DQ 引脚通过 1-Wire (OneWire) 协议进行。我们稍后将讨论该协议,但现在重要的是要知道,尽管只有一根电线,但它允许双向通信。

读取是主动执行的,微控制器发送命令并接收回包含信息的数据包。

除了读取请求,传感器还可以接收报警配置和数据格式命令。DallasTemperature 库已经为我们处理了大部分。包括为我们提供一些附加功能,例如在法拉第接收读数。

市场上最常见的型号是TO-92封装(看起来像晶体管)和防水封装。由于其实际应用,这第二种更常见,1m 长的带不锈钢尖端的电缆。例如,它可用于控制水温。读取是主动执行的,微控制器发送命令并接收回包含信息的数据包。

除了读取请求,传感器还可以接收报警配置和数据格式命令。DallasTemperature 库已经为我们处理了大部分。包括为我们提供一些附加功能,例如在法拉第接收读数。

市场上最常见的型号是TO-92封装(看起来像晶体管)和防水封装。由于其实际应用,这第二种更常见,1m 长的带不锈钢尖端的电缆。例如,它可用于控制水温。

单线

OneWire(或 1-Wire)是由 Dallas Semiconductor 设计的一种通信方法,它仅使用一条线路传输数据,并带有发送谁和何时发送的信号系统。

该方法与 i2C 非常相似,但它的数据传输速度要有限得多。另一个区别是在 1-wire 的情况下,可以省略电源引脚,在寄生模式下使用数据引脚(现在,您可能已经注意到,尽管名称如此,该方法至少需要两条线:数据和地)。

通信在主从模式下完成,其中微控制器发送所有请求,其他设备仅在名义上请求时发送数据。

每个设备都有一个唯一的地址/名称。这允许我们在同一条数据线上连接多个设备。请求以广播方式发送,在其中识别自身的设备会做出响应。

电路

我们应用的电路很简单。我们将传感器的 VDD 引脚连接到 NodeMCU 3V3GND GND,我们将使用 D4 引脚作为传感器数据。它可以是任何其他数字引脚。

此外,必须在数据引脚和 3V3 之间放置一个 4k7 欧姆电阻以增加稳定性。

查找 DS18B20 地址

正如我们之前看到的,每个传感器都有一个唯一的地址,这个地址对于通信至关重要。我们可以将其理解为制造序列号。但是如何识别这个数字呢?

我们将创建一个帮助程序代码来查找此地址。在这种情况下,代码会扫描连接到引脚 D4 的任何设备。我们将使用串行监视器来可视化结果。

我们从导入 OneWire DallasTemperature 库开始(不要忘记维护顺序)。如果出现任何导入错误,您可以将它们添加到 Arduino IDE 的库管理器中。

接下来,我们在引脚 D4 上启动一个 OneWire 对象,并使用该对象创建一个传感器。从那一刻起,传感器对象具有 DallasTemperature 库提供的所有属性和功能。

我们将使用两个函数 Search(),它执行 OneWire 中的设备搜索,以及 reset_search() 重新开始搜索。

我们的代码所做的是开始搜索,将结果保存在 addr 变量中,如果变量不为空,则将其写入串行中。

我们在串行监视器上找到了结果。如果有其他设备,它们也会出现在这里。留下地址,我们会需要的。

串行监视器读取传感器

现在我们知道了传感器的地址。让我们开始读取温度的主要代码。这里的目标是启动传感器并每 10 秒读取一次读数。

我们以同样的方式开始,但这次我们使用收集到的地址创建了 sensor1 变量。

readDs18b20() 函数中,我们将使用两个函数:

requestTemperatures() – 此函数不专门与任何传感器通信,而是与所有传感器通信。就像它说的:如果你是 ds18b20,现在运行一个新的读取并等待我的以及传感器的作用。

getTempC(address) – 在这里,我们将信息定向到每个感兴趣的传感器,这些传感器以最后的读数响应我们

Setup() 函数中,我们使用 begin() 函数启动传感器,它会自动执行读数,如果您没有发出新请求,传感器仍会响应 getTemp() 函数,但会使用过时的值。

在循环中,我们有一个带有 millis() 函数的计时器,以便每 10 秒读取一次。

在串行监视器上,我们应该得到以下结果:

请注意,在第 15 行,我们向 Serial.println() 函数添加了另一个参数。有了这个,我们定义了小数位数。

创建监控页面

准备好阅读后,让我们创建一个网页以在浏览器中查看此信息。请记住,稍后我们会将这些文件放在带有 SPIFFS FLASH ESP8266 中。

我们将构建以下屏幕:

为此,我们将使用两个文件:

索引.html

样式文件

页面结构不是本文的重点,但基本上,我们有 index.html 文件创建页面本身并触发一个 javascript 函数来更新阅读。

style.css 文件改进了页面的外观,但不影响其功能。

两个文件都必须在项目文件夹内的数据文件夹中,并使用 ESP8266 Sketch Data Upload 传输。

完整代码

将页面保存到 FLASH 后,我们需要创建为页面提供服务的结构。

wifi 上连接

创建一个网络服务器

为对此的请求创建回调

这一步对我们来说并不新鲜,但有几点值得注意。

现在 readDs18b20() 函数也更新了一个 String 类型的变量。我们这样做是因为服务器回调函数不接受整数或浮点变量。

对于服务器,我们有三个路由:

“/”将发送带有最新传感器读数的 html 文件。

“/styled.css” 将发送 css 文件

“/state”将返回要更新的温度变量。

请输入搜索关键字

确定