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 ℃
...
四、注意事项
-
在 Arduino IDE 中,需要安装以下库:
OneWire库(用于 1-Wire 总线通信)DallasTemperature库(封装 DS18B20 的温度获取函数)
安装方法:项目 → 导入库 → 添加 .ZIP 库… → 选择实验目录下的压缩包
-
两个库下载地址可参考:
-
如果使用多个 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秒
}
六、代码讲解
- 初始化 OneWire
OneWire oneWire(ONE_WIRE_BUS);
ONE_WIRE_BUS 是 DS18B20 数据线连接的 GPIO 引脚。OneWire 库提供对单总线通信的封装。
- 初始化 DallasTemperature
DallasTemperature sensors(&oneWire);
将 OneWire 对象传入 DallasTemperature 库,用于管理总线上所有 DS18B20 设备。
- 读取温度
sensors.requestTemperatures();
float tempC = sensors.getTempCByIndex(0);
requestTemperatures()向传感器发送温度转换命令,传感器内部开始测量温度。getTempCByIndex(0)获取索引为 0 的传感器温度(摄氏度)。
- 错误检测
if (tempC != DEVICE_DISCONNECTED_C)
防止传感器未连接或读取失败导致错误数据。
七、实验效果
打开串口监视器,波特率 115200,输出温度信息:
发起温度转换
温度转换完成
当前温度是: 27.50 ℃
发起温度转换
温度转换完成
当前温度是: 27.56 ℃
通过调节 DS18B20 所在环境温度,串口输出会实时变化。
八、进阶扩展
- 多传感器读取
int sensorCount = sensors.getDeviceCount();
for (int i=0; i<sensorCount; i++) {
float temp = sensors.getTempCByIndex(i);
}
-
显示到 OLED 或 Web 端
可结合 OLED 显示屏或 ESP32 WebServer,将温度数据显示在屏幕或网页上,构建远程温控系统。 -
温度阈值报警
当温度超过设定值时,触发 LED、蜂鸣器或发送通知,实现简单的智能温控。
九、总结
本实验通过 ESP32-S3 与 DS18B20 温度传感器实现了 温度采集与串口输出,学习了:
- 1-Wire 总线通信原理
- DallasTemperature 库使用方法
- 温度数据读取、错误检测及定时输出
这是物联网温度监测系统的基础实验,可以为进一步的 远程监控、自动控制 提供硬件基础。

浙公网安备 33010602011771号