ESP8266+DS18B20实现远距离温度监控系统

2025-06发布3次浏览

ESP8266是一款功能强大的WiFi模块,结合DS18B20温度传感器可以实现一个简单而高效的远距离温度监控系统。这种系统可以用于家庭自动化、温室控制、工业设备监控等领域。下面我们将详细介绍如何使用ESP8266和DS18B20构建一个温度监控系统。

硬件准备

  • ESP8266开发板:如NodeMCU或Wemos D1 Mini。
  • DS18B20数字温度传感器:支持单总线通信。
  • 电阻:4.7kΩ上拉电阻(用于DS18B20数据线)。
  • 面包板与连接线
  • 电源:5V直流电源适配器或USB供电。

软件环境

  • Arduino IDE:用于编写和上传代码到ESP8266。
  • OneWire库:用于处理DS18B20的单总线协议。
  • DallasTemperature库:简化DS18B20的操作。

步骤一:硬件连接

将DS18B20的三根引脚分别连接到ESP8266:

  1. VDD:连接到3.3V。
  2. GND:连接到GND。
  3. DQ:连接到ESP8266的GPIO4(D2),并加上一个4.7kΩ的上拉电阻到3.3V。

步骤二:配置Arduino IDE

  1. 安装ESP8266支持包:

    • 打开Arduino IDE,进入文件 -> 首选项,在“附加开发板管理器网址”中添加http://arduino.esp8266.com/stable/package_esp8266com_index.json
    • 进入工具 -> 开发板 -> 开发板管理器,搜索并安装esp8266
  2. 安装所需库:

    • 在Arduino IDE中,进入工具 -> 库管理,搜索并安装OneWireDallasTemperature库。

步骤三:编写代码

#include <OneWire.h>
#include <DallasTemperature.h>
#include <ESP8266WiFi.h>

// Replace with your network credentials
const char* ssid = "your_SSID";
const char* password = "your_PASSWORD";

// Data wire is plugged into pin 4 on the ESP8266
#define ONE_WIRE_BUS 4

// Setup a oneWire instance to communicate with any OneWire devices
OneWire oneWire(ONE_WIRE_BUS);

// Pass our oneWire reference to Dallas Temperature sensor 
DallasTemperature sensors(&oneWire);

void setup() {
  Serial.begin(115200);
  WiFi.begin(ssid, password);

  while (WiFi.status() != WL_CONNECTED) {
    delay(1000);
    Serial.println("Connecting to WiFi...");
  }

  Serial.println("Connected to WiFi");

  // Start up the library
  sensors.begin();
}

void loop() {
  // Call sensors.requestTemperatures() to issue a global temperature 
  // request to all devices on the bus
  sensors.requestTemperatures(); 
  float temperatureC = sensors.getTempCByIndex(0);

  Serial.print("Temperature: ");
  Serial.print(temperatureC);
  Serial.println(" C");

  delay(2000);
}

步骤四:测试与调试

上传代码后,打开串口监视器查看温度读数。确保温度值合理,并检查网络连接状态。

数据可视化扩展

为了实现更直观的数据展示,可以将温度数据上传至云平台如ThingSpeak或通过Web服务器实时显示。

流程图表示

graph TD;
    A[启动] --> B[连接WiFi];
    B --> C[初始化DS18B20];
    C --> D[请求温度数据];
    D --> E[打印温度];
    E --> F[延迟];
    F --> D;