单片机如何读取DS18B20温度传感器数据?

2025-09发布4次浏览

DS18B20是一款常用的数字温度传感器,它通过1-Wire(单总线)接口与单片机进行通信。以下是如何使用单片机读取DS18B20温度传感器数据的详细步骤和代码示例。

硬件连接

  1. VCC:连接到单片机的+5V电源。
  2. GND:连接到单片机的地线。
  3. DQ:连接到单片机的一个GPIO引脚,用于数据通信。

软件步骤

  1. 初始化单总线:设置GPIO引脚为输出模式,用于发送和接收数据。
  2. 发送复位脉冲:通过拉低DQ引脚一段时间,然后释放,以唤醒所有DS18B20设备。
  3. 发送存在脉冲:通过发送一个存在脉冲来检查DS18B20设备是否响应。
  4. 发送温度读取命令:发送读取温度的命令。
  5. 读取温度数据:从DS18B20读取温度数据,并进行解析。
  6. 温度数据解析:将读取的16位数据解析为温度值。

代码示例(以Arduino为例)

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

// 数据线连接到数字引脚2
#define ONE_WIRE_BUS 2

// 设置oneWire实例来通信
OneWire oneWire(ONE_WIRE_BUS);

// 将oneWire实例传递给DallasTemperature库
DallasTemperature sensors(&oneWire);

void setup(void)
{
  // 启动串口通信
  Serial.begin(9600);
  // 启动传感器
  sensors.begin();
}

void loop(void)
{
  // 请求温度数据
  sensors.requestTemperatures(); 
  // 读取温度
  float temperatureC = sensors.getTempCByIndex(0);
  // 输出温度
  Serial.print("Temperature is: ");
  Serial.print(temperatureC);
  Serial.println("°C");
  // 延时1秒
  delay(1000);
}

关键点

  • 单总线通信:DS18B20使用单总线通信协议,只需要一根数据线即可连接多个传感器。
  • 温度数据解析:DS18B20返回的是16位数据,其中11位是温度值,剩下的5位是校验位。
  • 库的使用:使用现成的库(如OneWire和DallasTemperature)可以简化编程过程。

通过以上步骤和代码示例,你可以使用单片机读取DS18B20温度传感器的数据。这种方法不仅适用于Arduino,也适用于其他支持单总线通信的单片机。