ESP32操作DS18B20

本文介绍了DS18B20温度传感器的电气特性、通信协议以及在ESP32平台上的应用,包括供电要求、测量精度、通信步骤和在ESP-IDF组件库中的使用示例。

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

DS18B20电气摘要

  • 供电电压3-5.5V
  • 待机电流750nA,活动电流1mA
  • 一线通信方式,信号引脚为开漏结构
  • 硬件供电方式有两种接法。常规供电或总线总线
    在这里插入图片描述

测量相关特性

  • 精度±0.5℃,大测量范围时精度±2℃

  • 最大测量范围-55℃ ~ +125℃

  • 分辨率四挡可调9-12bit。每档对应的增量是0.5°C、0.25°C、0.125°C和0.0625°C。

  • 虽然分辨率可以做到0.0625℃,但是还是会受制于物理精度0.5℃。只能说在高分辨率下,起对温度更敏感。但是测量误差依然是0.5℃

  • 上电默认是12bit精度,

  • 负温度的表示方法,在温度数据的2字节数据里的S位表示正负号,S=0表示正数,1表示负数。
    在这里插入图片描述

  • DS手册也举了结果对应的读到的数值例子,如下所示
    在这里插入图片描述

  • 不同测量分辨率下,转换时间是不同的,12bit精度下,转换时间为750ms。

不常用特性

  • 每个设备在板载ROM中存储有唯一的64位序列码。可以用这个序列号来唯一确定温度sensor。这64bit数据的含义如下:
    在这里插入图片描述

  • 报警设置的能力,通过报警搜索命令可识别温度超出编程限制的设备。

通信时序

通信步骤:
1.发送初始化脉冲
2.ROM指令
3.功能指令

  • 每次通信都必须按照这个发送顺序发送。否则IC不给回应。

  • ROM指令工5个,用于确定是给哪个设备发送命令。

  • 如果总线上只有一个设备,可以用0x33这个read ROM来简化ROM搜索的过程。

  • 关于ROM指令的详细,可以参考Application Note 937: Book of iButton® Standards.

  • 功能指令有如下这些
    在这里插入图片描述

  • 启动测量发送0x44指令

  • 读取温度等数据0xbe指令

发送初始化脉冲

在这里插入图片描述

  • 主机拉低信号线,最小拉低480μs。然后释放总线后,DS18B20就会也- 拉低总线回应主机。可以通过这个过程了解DS18B20是否通信正常。

抓时序

启动测量
在这里插入图片描述

读取数据
在这里插入图片描述

芯片数据存放位置

1.芯片的配置都是存放在内部的EEPROM里面。里面的数据存放规则是这样的。下面对里面的常用的几个字节做下笔记:
在这里插入图片描述

2.Byte4是配置字节,用于配置分辨率,里面的R0,R1决定了4个分辨率档位,其他bit是固定的,必须原样保留。
在这里插入图片描述

ESP32操作DS18B20

在esp-idf的组件库里面,已经有DS18B20的组件库。因此直接拿来主义,重点记录怎么使用这个组件库。

库的首页
https://components.espressif.com/components/espressif/ds18b20

1.先安装依赖
打开terminal输入命令idf.py add-dependency “espressif/ds18b20^0.1.1”
在这里插入图片描述

安装成功后会在工程目录下多一个目录espressif__ds18b20、espressif__onewire_bus,和一个文件idf_component.yml

### 使用ESP32连接并读取DS18B20温度传感器 为了实现ESP32DS18B20温度传感器之间的通信,需按照特定硬件配置和软件编程方法操作。 #### 硬件连接方式 对于ESP32而言,当采用安信可的ESP32C3-13-Kit以及来自某宝商家“优信电子”的DS18B20探头时,应确保红线接入3.3V电源端口,蓝线接地(GND),而黄线作为数据线则应当接到GPIO 8引脚位置。值得注意的是,在此情况下,由于IO8已内置了一个10kΩ的上拉电阻,因此无需额外添加外部上拉电阻[^2]。 #### 软件开发环境准备 在Arduino IDE或其他支持平台中安装OneWire库和DallasTemperature库来简化对DS18B20操作过程。这两个库提供了便捷的方法用于初始化设备、扫描总线上挂载的所有器件地址,并获取当前测量到的具体数值。 #### Arduino代码实例 下面给出一段基于上述说明编写的简单测试程序: ```cpp #include <OneWire.h> #include <DallasTemperature.h> // 定义单总线接口所使用的针脚编号 #define ONE_WIRE_BUS 8 // 创建 OneWire 对象实例 OneWire oneWire(ONE_WIRE_BUS); // 将 Dallas Temperature 设备绑定至该对象 DallasTemperature sensors(&oneWire); void setup(void) { Serial.begin(9600); // 启动传感器 sensors.begin(); } void loop(void) { float temperature; // 请求温度更新 sensors.requestTemperatures(); // 获取第一个找到的传感器的摄氏度数 temperature = sensors.getTempCByIndex(0); // 打印结果 Serial.print("Current temperature is: "); Serial.println(temperature); delay(1000); } ``` 这段代码实现了每秒钟打印一次由DS18B20测得的最新室温值的功能。通过串行监视器可以查看输出的结果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值