读取ds18b20温度--- arduino

该博客介绍了如何在Arduino项目中利用OneWire和DallasTemperature库与18B20温度传感器进行交互。通过在开发板的数字引脚2上连接传感器,代码实现了定期读取并打印设备的温度值。用户可以将库文件下载并放入Arduino的库目录以使用此功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

// 数据输出脚接开发板数字引脚2
#define ONE_WIRE_BUS 2

OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);

void setup(void)
{
  Serial.begin(9600);
  sensors.begin();
}

void loop(void)
{ 
  sensors.requestTemperatures(); // 发送命令获取温度
  Serial.print("Temperature for the device 1 (index 0) is: ");
  Serial.println(sensors.getTempCByIndex(0)); 
  delay(500); 
}

补充用库函数,其中包含onewire.h和dallastemperature.h,在lcd和18b20的程序编写中会使用到,可将解压出的两个文件夹直接放入arduino安装位置的libraries里即可。

下载链接:onewire.h和dallastemperature.h-C++文档类资源-优快云下载

### 解决DS18B20温度传感器在Arduino上显示-127的问题 当使用DS18B20温度传感器时,如果读取到的温度值为`-127`,这通常表示设备未能成功通信或未检测到任何有效的DS18B20器件[^3]。以下是可能的原因及其解决方案: #### 可能原因及解决方法 1. **硬件连接错误** 如果DS18B20Arduino之间的连线不正确或者不稳定,则可能导致无法正常识别传感器。确保数据线(通常是DQ引脚)已正确连接至指定的GPIO引脚,并且电源和接地也已经正确连接。此外,在数据线上应加入一个4.7kΩ的上拉电阻来稳定信号传输[^4]。 2. **库文件配置不当** 使用`OneWire`和`DallasTemperature`库时,需确认它们已被正确定义并初始化。例如,定义宏`ONE_WIRE_BUS`指向实际使用的数字I/O端口编号;创建`OneWire`对象实例化该总线接口;再利用这个实例去构建`DallasTemperature`类的对象完成进一步操作[^1]。 3. **多个传感器冲突** 当存在多于一个DS18B20挂在同一条单总线上而没有适当区分各个单元地址的情况下也可能引发此类现象。可以通过调用`sensors.getAddress()`函数逐一获取各装置唯一序列号加以辨别处理[^3]。 4. **损坏或不良接触的探头** 探针本身可能存在物理损伤或是内部电路失效等问题造成返回异常数值(-127°C),建议更换新的传感器测试看是否依旧存在问题[^4]。 下面给出修正后的代码片段作为参考: ```cpp #include <OneWire.h> #include <DallasTemperature.h> #define ONE_WIRE_BUS 2 // 更改为你的具体接线位置 // Setup a oneWire instance to communicate with any OneWire devices (not just Maxim/Dallas temperature ICs) OneWire oneWire(ONE_WIRE_BUS); DallasTemperature sensors(&oneWire); void setup() { Serial.begin(9600); sensors.begin(); } void loop() { sensors.requestTemperatures(); DeviceAddress deviceAddress; int count=sensors.getDeviceCount(); for(int i=0;i<count;i++) { if(!sensors.getAddress(deviceAddress,i)) continue; float tempC = sensors.getTempC(deviceAddress); if(tempC != DEVICE_DISCONNECTED_C){ Serial.print("Sensor "); Serial.print(i+1); Serial.print(": Temp="); Serial.println(tempC); } } delay(1000); } ``` 以上程序会遍历所有找到的DS18B20设备,并分别打印其对应的温度值[^2]。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值