首页 > 其他分享 >基于Arduino UNO的DS18B20多点组网测温

基于Arduino UNO的DS18B20多点组网测温

时间:2023-07-17 14:55:52浏览次数:47  
标签:Arduino DS18B20 device print Serial sensors UNO

https://blog.csdn.net/PHILICS7/article/details/129588728

写在前面
DS18B20基于单总线协议,多个DS18B20可以连接在同一个引脚上,通过单总线扫描可以得到地址,并分别对某个地址上的DS18B20进行通信(发命令开启温度转换)完成测温。

设备地址(64位)

每个传感器都有一个唯一的64位序列号,其中包含一个8位的家族代码,一个48位的序列号和一个8位的CRC校验码2。您可以使用相应的函数来扫描总线上所有连接的传感器,并打印出它们的地址.

 

引入

Arduino UNO 为例 ,先在库中添加 Ooe Wire 和DallasTemperature的库。

两个传感器连接在同一引脚上,如Arduino的数字引脚2.这种直插的DS18B20需要接上拉电阻,在DQ和VCC之间接4.7K-10K电阻。

// Include the required Arduino libraries:
#include <OneWire.h>
#include <DallasTemperature.h>
 
// Define to which pin of the Arduino the 1-Wire bus is connected:
#define ONE_WIRE_BUS 2
 
// Create a new instance of the oneWire class to communicate with any OneWire device:
OneWire oneWire(ONE_WIRE_BUS);
 
// Pass oneWire reference to Dallas Temperature library:
DallasTemperature sensors(&oneWire);
 
void setup() {
  // Start serial communication for debugging purposes:
  Serial.begin(9600);
  // Start up the library:
  sensors.begin();
}
 
void loop() {
  // Send command to get temperatures from all devices on bus:
  sensors.requestTemperatures();
  
  // Get number of devices on bus:
  int numberOfDevices = sensors.getDeviceCount();
 
  // Print number of devices on bus:
  Serial.print("Number of devices: ");
  Serial.println(numberOfDevices);
 
  // Loop through each device and print out address and temperature:
 
  for (int i = 0; i < numberOfDevices; i++) {
    // Use a variable to store a found device address
    DeviceAddress tempDeviceAddress;
 
    // Search for devices on bus and assign based on an index. 
    if (sensors.getAddress(tempDeviceAddress, i)) {
      Serial.print("Found '1-Wire' device with address:\n\r");
      printAddress(tempDeviceAddress);
      Serial.print("\n\r");
 
      // Print temperature for found device
      float tempC = sensors.getTempC(tempDeviceAddress);
      Serial.print("Temperature: ");
      Serial.print(tempC);
      Serial.println(" °C");
    }
    else {
      Serial.print("Found ghost device at ");
      Serial.print(i);
      Serial.println(" but could not detect address. Check power and cabling");
    }
    
    delay(1000); 
   }
}
 
// Function that prints a device address
void printAddress(DeviceAddress deviceAddress) {
   for (uint8_t i = 0; i < 8; i++) {
     if (deviceAddress[i] < 16) 
       Serial.print("0");
     Serial.print(deviceAddress[i], HEX);
   }
}

  

效果

立杆见影。DS18B20比DHT11更精准。又因为是单总线的通信协议,省IO口,以此实现多点组网.

 

 

 

参考

标签:Arduino,DS18B20,device,print,Serial,sensors,UNO
From: https://www.cnblogs.com/gooutlook/p/17560108.html

相关文章

  • 【雕爷学编程】Arduino动手做(164)---Futaba S3003舵机模块
    37款传感器与模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里准备逐一动手试试多做实验,不管成功与否,都会记录下来——小小的进步或是搞不掂的问题......
  • 【雕爷学编程】Arduino动手做(163)---大尺寸8x8LED方格屏模块2
    37款传感器与模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里准备逐一动手试试多做实验,不管成功与否,都会记录下来——小小的进步或是搞不掂的问题......
  • 【雕爷学编程】Arduino动手做(163)---大尺寸8x8LED方格屏模块
    37款传感器与模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里准备逐一动手试试多做实验,不管成功与否,都会记录下来——小小的进步或是搞不掂的问题......
  • 【雕爷学编程】Arduino动手做(02)---光敏电阻模块3
    37款传感器与执行器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里准备逐一动手尝试系列实验,不管成功(程序走通)与否,都会记录下来—小小的进步或是搞......
  • 【雕爷学编程】Arduino动手做(02)---光敏电阻模块2
    37款传感器与执行器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里准备逐一动手尝试系列实验,不管成功(程序走通)与否,都会记录下来—小小的进步或是搞......
  • 【雕爷学编程】Arduino动手做(06)---KY-038声音传感器模块4
    37款传感器与执行器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里准备逐一动手尝试系列实验,不管成功(程序走通)与否,都会记录下来—小小的进步或是搞......
  • 【雕爷学编程】Arduino动手做(06)---KY-038声音传感器模块2
    37款传感器与执行器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里准备逐一动手尝试系列实验,不管成功(程序走通)与否,都会记录下来—小小的进步或是搞......
  • 【雕爷学编程】Arduino动手做(152)---BMI160 六轴陀螺仪模块2
    37款传感器与执行器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里准备逐一动手尝试系列实验,不管成功(程序走通)与否,都会记录下来—小小的进步或是搞......
  • 【雕爷学编程】Arduino动手做(162)---OPT101模拟光照传感器模块3
    37款传感器与执行器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里准备逐一动手尝试系列实验,不管成功(程序走通)与否,都会记录下来—小小的进步或是......
  • 【雕爷学编程】Arduino动手做(162)---OPT101模拟光照传感器模块2
    37款传感器与执行器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里准备逐一动手尝试系列实验,不管成功(程序走通)与否,都会记录下来—小小的进步或是搞......