ESP32-S3 控制 DS18B20温度传感器

ESP32-S3 控制 DS18B20 温度传感器实验

在物联网和智能家居项目中,温度采集是最常见的应用之一。

DS18B20 是一款数字温度传感器,精度高、使用方便,采用 1-Wire 总线与 MCU 通信,非常适合 ESP32-S3 等微控制器开发板使用。

本文将介绍如何在 ESP32-S3 上读取 DS18B20 温度数据。


一、实验名称

DS18B20 温度传感器实验


二、接线说明

DS18B20模块 ESP32-S3开发板
DS(数据) 13
VCC 3.3V 或 5V
GND GND

注意事项:DS18B20 模块数据线上建议使用 4.7kΩ 上拉电阻。


三、实验现象

程序下载成功后,打开串口监视器,每隔 2 秒输出一次 DS18B20 温度值(摄氏度)。

例如输出如下:

发起温度转换
温度转换完成
当前温度是: 27.50 ℃

发起温度转换
温度转换完成
当前温度是: 27.56 ℃
...

四、注意事项

  1. 在 Arduino IDE 中,需要安装以下库:

    • OneWire 库(用于 1-Wire 总线通信)
    • DallasTemperature 库(封装 DS18B20 的温度获取函数)
      安装方法:项目 → 导入库 → 添加 .ZIP 库… → 选择实验目录下的压缩包
  2. 两个库下载地址可参考:

  3. 如果使用多个 DS18B20 温度传感器,可通过 sensors.getDeviceCount() 获取总数,通过索引逐个读取温度。


五、核心代码

#include "public.h"
#include <DallasTemperature.h>
#include <OneWire.h>

#define ONE_WIRE_BUS    13 // 1-Wire数据总线连接

OneWire oneWire(ONE_WIRE_BUS);         // 声明1-Wire实例
DallasTemperature sensors(&oneWire);   // 声明温度传感器实例

void setup(){
  Serial.begin(115200);
  sensors.begin(); // 初始化DS18B20
}

void loop(){
  Serial.println("发起温度转换");
  sensors.requestTemperatures(); // 向总线上所有设备发送温度转换请求,阻塞式
  Serial.println("温度转换完成");

  float tempC = sensors.getTempCByIndex(0); // 获取索引0的传感器摄氏温度
  if (tempC != DEVICE_DISCONNECTED_C) // 如果温度正常
  {
    Serial.print("当前温度是: ");
    Serial.print(tempC);
    Serial.println(" ℃\n");
  }

  delay(2000); // 延时2秒
}

六、代码讲解

  1. 初始化 OneWire
OneWire oneWire(ONE_WIRE_BUS);

ONE_WIRE_BUS 是 DS18B20 数据线连接的 GPIO 引脚。OneWire 库提供对单总线通信的封装。

  1. 初始化 DallasTemperature
DallasTemperature sensors(&oneWire);

将 OneWire 对象传入 DallasTemperature 库,用于管理总线上所有 DS18B20 设备。

  1. 读取温度
sensors.requestTemperatures();
float tempC = sensors.getTempCByIndex(0);
  • requestTemperatures() 向传感器发送温度转换命令,传感器内部开始测量温度。
  • getTempCByIndex(0) 获取索引为 0 的传感器温度(摄氏度)。
  1. 错误检测
if (tempC != DEVICE_DISCONNECTED_C)

防止传感器未连接或读取失败导致错误数据。


七、实验效果

打开串口监视器,波特率 115200,输出温度信息:

发起温度转换
温度转换完成
当前温度是: 27.50 ℃

发起温度转换
温度转换完成
当前温度是: 27.56 ℃

通过调节 DS18B20 所在环境温度,串口输出会实时变化。


八、进阶扩展

  1. 多传感器读取
int sensorCount = sensors.getDeviceCount();
for (int i=0; i<sensorCount; i++) {
    float temp = sensors.getTempCByIndex(i);
}
  1. 显示到 OLED 或 Web 端
    可结合 OLED 显示屏或 ESP32 WebServer,将温度数据显示在屏幕或网页上,构建远程温控系统。

  2. 温度阈值报警
    当温度超过设定值时,触发 LED、蜂鸣器或发送通知,实现简单的智能温控。


九、总结

本实验通过 ESP32-S3 与 DS18B20 温度传感器实现了 温度采集与串口输出,学习了:

  • 1-Wire 总线通信原理
  • DallasTemperature 库使用方法
  • 温度数据读取、错误检测及定时输出

这是物联网温度监测系统的基础实验,可以为进一步的 远程监控、自动控制 提供硬件基础。

posted @ 2025-08-16 14:38  jeikerxiao  阅读(195)  评论(0)    收藏  举报