跳至主要內容

温度传感器 DS18B20

大约 3 分钟

简介

本章介绍使用Air001开发板驱动 DS18B20。

提示

DS18B20 是数字温度传感器,使用1Wire(单总线)通信接口,只需要一条数据线 (和地线) 即可与处理器进行数据传输。
器件可以工作在-55°C至+125°C范围,在-10°C至+85°C范围内测量精度为±0.5°C。
每个DS18B20具有唯一的64位序列号,从而允许多个DS18B20挂接在同一条1-Wire总线。

硬件准备

  • ☁️ Air001开发板入门,将Air001DAPLink调试器使用排针排母连接。

  • DS18B20模块与Air001开发板,按如下表格进行相连:

DS18B20Air001
GNDGND
VCC3.3V
DQPA_5

注意

如果你是直接连接的DS18B20元器件,你需要为DQ进行上拉操作。
(比如在VCCDQ之间连接一颗4.7K电阻

软件部分

首先,安装DallasTemperature库,并选择全部安装以安装所需依赖。

打开Arduino管理库,进行安装

可以打开Arduino管理库,找到Adafruit DallasTemperature Library库,并选择全部安装以安装所需依赖。

库管理器中的 Adafruit DallasTemperature Library
库管理器中的 Adafruit DallasTemperature Library
全部安装
全部安装

为了保证单总线的时序保持正常,我们需要将芯片主频设置为最高的 48M。

在Arduino中设置芯片主频
设置芯片主频
设置芯片主频

开头引用OneWire包与DallasTemperature包,并实例化对象sensors,后续仅需调用sensors对象即可使用DS18B20。

// 引用必要的库
#include <OneWire.h>
#include <DallasTemperature.h>

// 初始化一个单总线对象,设置使用PA_5引脚进行通信
OneWire oneWire(PA_5);
// 初始化一个传感器对象,使用刚新建的单总线对象
DallasTemperature sensors(&oneWire);

setup()函数中初始化串口与sensors对象:

void setup() {
  //初始化串口
  Serial.begin(9600);
  //初始化传感器库
  sensors.begin();
}

loop()函数中添加如下代码:

void loop() {
  Serial.print("开始获取温度信息...");
  sensors.requestTemperatures();  //发出获取温度的请求
  Serial.println("获取完成");
  // 我们只取第一个传感器的温度信息
  float tempC = sensors.getTempCByIndex(0);

  //检查一下是不是真的获取成功了
  if (tempC != DEVICE_DISCONNECTED_C) {
    Serial.print("获取到的温度为:");
    Serial.print(tempC);
    Serial.println("℃");
  } else {
    Serial.println("数据读取失败!");
    delay(500);
  }
  Serial.println();
}
  • 使用sensors.requestTemperatures方法,尝试获取温度。
  • 使用sensors.getTempCByIndex方法,获取到第一个设备的温度值。
  • 如果成功获取,将温度值打印出来

输出结果

在串口监视器中将波特率调至9600,可观察到当前的信息,如下:

开始获取温度信息...获取完成
获取到的温度为:27.19℃

开始获取温度信息...获取完成
获取到的温度为:27.25℃

开始获取温度信息...获取完成
获取到的温度为:27.19℃

开始获取温度信息...获取完成
获取到的温度为:27.25℃

开始获取温度信息...获取完成
获取到的温度为:27.19℃

开始获取温度信息...