ds18b20如何如何和esp32进行数据交换
时间: 2024-05-12 10:15:46 浏览: 86
stm32通过8266发送18b20温度数据.rar
DS18B20是一种数字温度传感器,可以通过一根单独的数据线连接到ESP32上。ESP32使用OneWire协议与DS18B20进行通信,以下是一个简单的代码示例:
```
#include <OneWire.h>
//定义数据线引脚
#define ONE_WIRE_BUS 14
OneWire oneWire(ONE_WIRE_BUS);
void setup() {
Serial.begin(9600);
}
void loop() {
byte i;
byte present = 0;
byte type_s;
byte data[12];
byte addr[8];
if ( !oneWire.search(addr)) {
Serial.println("No more addresses.");
oneWire.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();
// 发送命令读取温度
oneWire.reset();
oneWire.select(addr);
oneWire.write(0x44,1);
// 等待转换完成
delay(1000);
// 读取结果
present = oneWire.reset();
oneWire.select(addr);
oneWire.write(0xBE);
// 读取数据
for ( i = 0; i < 9; i++) {
data[i] = oneWire.read();
}
// 转换温度值
int16_t raw = (data[1] << 8) | data[0];
float celsius = (float)raw / 16.0;
float fahrenheit = celsius * 1.8 + 32.0;
// 输出结果
Serial.print("Temperature = ");
Serial.print(celsius);
Serial.print(" Celsius, ");
Serial.print(fahrenheit);
Serial.println(" Fahrenheit");
}
```
在上面的示例中,我们使用OneWire库来与DS18B20进行通信。在setup()函数中,我们初始化串口并设置OneWire对象的引脚。在loop()函数中,我们使用oneWire.search()函数来搜索连接到引脚上的DS18B20设备。如果找到设备,我们将输出ROM代码,并使用OneWire协议发送读取温度的命令。然后等待1秒钟,以便转换完成,然后读取温度值并将其转换为摄氏度和华氏度,最后将结果打印到串口。
阅读全文