24小(xiǎo)时联系電(diàn)话:18217114652、13661815404

中文(wén)

您当前的位置:
首页>
電(diàn)子资讯>
行业资讯>
带有(yǒu) ESP8266 和 DS18...

行业资讯

带有(yǒu) ESP8266 和 DS18B20 的 WIFI 温度监控器


带有(yǒu) ESP8266 DS18B20 WIFI 温度监控器

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

该项目将建设如下:

電(diàn)路组装

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

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

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

DS18B20

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

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

它使用(yòng)三个引脚进行操作:

VDD(電(diàn)源)

GND(接地)

DQ(数字通信)

VDD 3V 5.5V 的值工作,甚至可(kě)以省略。传感器具有(yǒu)寄生模式,仅使用(yòng) DQ GND 引脚,其電(diàn)源来自通信引脚。这种模式效果很(hěn)好,但更容易受到噪音的影响。

数据通信使用(yòng) DQ 引脚通过 1-Wire (OneWire) 协议进行。我们稍后将讨论该协议,但现在重要的是要知道,尽管只有(yǒu)一根電(diàn)線(xiàn),但它允许双向通信。

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

除了读取请求,传感器还可(kě)以接收报警配置和数据格式命令。DallasTemperature 库已经為(wèi)我们处理(lǐ)了大部分(fēn)。包括為(wèi)我们提供一些附加功能(néng),例如在法拉第接收读数。

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

除了读取请求,传感器还可(kě)以接收报警配置和数据格式命令。DallasTemperature 库已经為(wèi)我们处理(lǐ)了大部分(fēn)。包括為(wèi)我们提供一些附加功能(néng),例如在法拉第接收读数。

市场上最常见的型号是TO-92封装(看起来像晶體(tǐ)管)和防水封装。由于其实际应用(yòng),这第二种更常见,1m 長(cháng)的带不锈钢尖端的電(diàn)缆。例如,它可(kě)用(yòng)于控制水温。

单線(xiàn)

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

该方法与 i2C 非常相似,但它的数据传输速度要有(yǒu)限得多(duō)。另一个區(qū)别是在 1-wire 的情况下,可(kě)以省略電(diàn)源引脚,在寄生模式下使用(yòng)数据引脚(现在,您可(kě)能(néng)已经注意到,尽管名称如此,该方法至少需要两条線(xiàn):数据和地)。

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

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

電(diàn)路

我们应用(yòng)的電(diàn)路很(hěn)简单。我们将传感器的 VDD 引脚连接到 NodeMCU 3V3GND GND,我们将使用(yòng) D4 引脚作為(wèi)传感器数据。它可(kě)以是任何其他(tā)数字引脚。

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

查找 DS18B20 地址

正如我们之前看到的,每个传感器都有(yǒu)一个唯一的地址,这个地址对于通信至关重要。我们可(kě)以将其理(lǐ)解為(wèi)制造序列号。但是如何识别这个数字呢(ne)?

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

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

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

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

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

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

串行监视器读取传感器

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

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

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

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

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

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

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

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

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

创建监控页面

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

我们将构建以下屏幕:

為(wèi)此,我们将使用(yòng)两个文(wén)件:

索引.html

样式文(wén)件

页面结构不是本文(wén)的重点,但基本上,我们有(yǒu) index.html 文(wén)件创建页面本身并触发一个 javascript 函数来更新(xīn)阅读。

style.css 文(wén)件改进了页面的外观,但不影响其功能(néng)。

两个文(wén)件都必须在项目文(wén)件夹内的数据文(wén)件夹中,并使用(yòng) ESP8266 Sketch Data Upload 传输。

完整代码

将页面保存到 FLASH 后,我们需要创建為(wèi)页面提供服務(wù)的结构。

wifi 上连接

创建一个网络服務(wù)器

為(wèi)对此的请求创建回调

这一步对我们来说并不新(xīn)鲜,但有(yǒu)几点值得注意。

现在 readDs18b20() 函数也更新(xīn)了一个 String 类型的变量。我们这样做是因為(wèi)服務(wù)器回调函数不接受整数或浮点变量。

对于服務(wù)器,我们有(yǒu)三个路由:

“/”将发送带有(yǒu)最新(xīn)传感器读数的 html 文(wén)件。

“/styled.css” 将发送 css 文(wén)件

“/state”将返回要更新(xīn)的温度变量。

请输入搜索关键字

确定