DS18B20温度传感器串口读取
时间: 2023-09-18 12:11:34 浏览: 44
DS18B20温度传感器可以通过一根数据线(DQ)与单总线接口(One-Wire)通信。通过串口读取温度传感器的温度值需要先配置串口,并对DS18B20进行初始化,在读取温度值之前需要发送一些命令来获取温度值。下面是一个基本的DS18B20温度传感器串口读取的代码示例:
```c
#include <OneWire.h>
OneWire ds(2); // 数据线连接到 Pin 2
void setup() {
Serial.begin(9600);
}
void loop() {
byte i;
byte present = 0;
byte type_s;
byte data[12];
byte addr[8];
if ( !ds.search(addr)) {
Serial.println("No more addresses.");
Serial.println();
ds.reset_search();
delay(250);
return;
}
Serial.print("ROM =");
for( i = 0; i < 8; i++) {
Serial.write(' ');
Serial.print(addr[i], HEX);
}
if (OneWire::crc8(addr, 7) != addr[7]) {
Serial.println("CRC is not valid!");
return;
}
Serial.println();
ds.reset();
ds.select(addr);
ds.write(0x44, 1); // 开始转换温度值
delay(1000); // 等待转换完成
present = ds.reset();
ds.select(addr);
ds.write(0xBE); // 发送读取温度值命令
Serial.print("Temperature = ");
byte msb = ds.read(); // 读取温度值高位字节
byte lsb = ds.read(); // 读取温度值低位字节
float temp = ((msb << 8) | lsb) * 0.0625; // 计算温度值
Serial.print(temp); // 输出温度值
Serial.println(" Celsius");
delay(1000);
}
```
在这个例子中,我们首先创建了一个OneWire对象,将数据线连接到Pin 2。在setup()函数中,我们开始串口通信,设置波特率为9600。在loop()函数中,我们使用ds.search()函数来搜索连接到数据线的DS18B20传感器的地址。然后我们使用ds.reset()函数重置总线,并使用ds.select()函数选择传感器。接下来,我们向传感器发送0x44命令,以开始转换温度值。我们等待一秒钟,使传感器完成转换。然后我们使用ds.reset()函数重置总线,再次使用ds.select()函数选择传感器并发送0xBE命令,以读取温度值。最后我们计算温度值并使用Serial.print()函数输出到串口。