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 的 3V3,GND 与 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)的温度变量。