我们提供各种最佳的 1-Wire DS18B20 传感器连接器, 包括 Nanoflex, 显示端口, USB, 太阳的, SATA, HDMI, 这就是主意, SAS & 还有更多. 所有电缆均按照最高行业标准制造. 使用传感器电路组件进行整机组装可让您专注于设计和营销, 降低成本, 并从我们的装配线中获益, 质量保证流程, 和制造专业知识.
DS18B20 传感器使用以下方式进行通信 “1-金属丝” 协议, 这意味着它使用一条数据线与微控制器进行所有通信, 允许多个传感器连接在同一条线上并通过其唯一的 64 位串行代码进行识别; 该单条数据线通过电阻器拉高,传感器通过在特定时隙期间拉低线来发送信息位来传输数据.
DS18B20温度传感器: DS18B20防水探头专为水下使用而设计, 能够在潮湿的环境中运行而不会被水或湿气损坏.
温度传感器供电电压: 3.0电压~5.25V;
工作温度范围:-55 ℃ 至 +125 ℃ (-67 华氏度 至 +257 华氏度);
提供 9 位至 12 位摄氏度温度测量;
适配器模块配有上拉电阻, 直接连接树莓派的GPIO,无需外接电阻;
使用此适配器模块套件可以简化防水温度传感器与您的项目的连接.
1. 有关 1-Wire 协议的要点:
单数据线:
传感器和微控制器之间的通信只需要一根线.
半双工通信:
数据可以双向发送, 但一次只有一个方向.
寄生力量:
DS18B20在通信过程中可以直接由数据线供电, 在某些情况下无需单独的电源.
唯一的设备地址:
每个 DS18B20 传感器都有一个独特的 64 位串行代码,允许微控制器识别和寻址总线上的各个传感器.
与 DS18B20 的通信步骤:
1.1 复位脉冲:
微控制器通过将数据线拉低一段特定的持续时间来启动通信 (复位脉冲).
1.2 存在脉冲:
如果总线上存在 DS18B20, 它将以短脉冲响应, 表明它的存在.
1.3 ROM命令:
微控制器发送 ROM 命令来读取特定传感器的唯一 64 位代码 (“匹配ROM”) 或寻址总线上的所有传感器 (“跳过ROM”).
1.4 功能命令:
取决于所需的操作 (比如读取温度), 微控制器向传感器发送特定功能命令.
1.5 数据传输:
数据是逐位传输的, 传感器将数据线拉低以发送 ‘0’ 并让线路变高以发送“1”.
2. DS18B20的1-Wire通信协议详解
DS18B20传感器之所以被广泛应用,很大程度上得益于其独特的通信协议 – 1-有线通讯协议. 该协议简化了对硬件连接的要求,提供了一种有效的数据传输方式. 本章将深入剖析1线通信协议的工作机制和数据交换过程,为后续的编程实践打下坚实的基础.
2.1 1-Wire 通信协议基础知识
2.1.1 1-Wire 通信协议的特性:
DS18B20 1-Wire 通信协议也称为 “单总线” 技术. 它具有以下特点: – 单总线通讯: 仅使用一根数据线进行双向数据传输, 与传统的多线传感器通信方式相比,大大降低了布线的复杂性. – 多设备连接: 支持在一根数据总线上连接多个设备, 并通过设备识别码进行识别和通信. – 低功耗: 沟通过程中, 设备在不参与通信时可以处于低功耗待机状态. – 高精度: 数据传输时间更短, 减少外界干扰,提高数据准确性.
2.1.2 1-wire通信的数据格式和时序分析
1-wire通信协议的数据格式遵循特定的时序规则. 它包括初始化时序, 写时序和读时序:
初始化时序: 主机首先启动存在检测计时 (存在脉冲) 通过将总线拉下来一段时间, 然后传感器发送存在脉冲作为响应.
写入时序: 当主机发送写时序时, 它首先将总线拉下来大约 1-15 微秒, 然后释放总线, 并且传感器拉低总线 60-120 微秒响应.
读取时序: 主机通过拉低总线并释放来通知传感器发送数据, 传感器会在一定的延迟后将数据位输出到总线上.
2.2 数据通信的软件实现
2.2.1 1线通讯的初始化和复位
在软件层面, 1-Wire通信的初始化和复位是通信的第一步. 下面是实现这个过程的伪代码:
// OneWire通讯初始化函数
无效 OneWire_Init() {
// 将总线设置为输入模式并启用上拉电阻
设置引脚模式(DS18B20_PIN, 输入上拉);
// 等待公交车空闲
延迟微秒(1);
// 发送复位脉冲
OneWire_重置();
}
// OneWire通讯复位功能
无效 OneWire_Reset() {
// 把公交车拉下来
设置引脚模式(DS18B20_PIN, 输出低电平);
延迟微秒(480);
// 释放总线
设置引脚模式(DS18B20_PIN, 输入上拉);
延迟微秒(70);
// 等待脉冲的出现
如果 (!等待OneWire存在())
// 未检测到脉搏, 可能是传感器没有连接或者初始化失败
处理错误();
延迟微秒(410);
}
// 等待脉冲的出现
布尔 WaitForOneWirePresence() {
返回读取密码(DS18B20_PIN) == 0; // 假设低电平是信号存在
}
2.2.2 数据读写操作
数据读写操作是传感器通信的核心部分. 下面的代码展示了如何将一个字节写入单线总线:
// 将一个字节写入单线总线
无效 OneWire_WriteByte(字节数据) {
为了 (整数我 = 0; 我 < 8; 我++) {
OneWire_WriteBit(数据 & 0x01);
数据 >>= 1;
}
}
// 向单线总线写入一位
无效 OneWire_WriteBit(位数据) {
设置引脚模式(DS18B20_PIN, 输出低电平);
如果 (数据) {
// 写入时释放总线 1
设置引脚模式(DS18B20_PIN, 输入上拉);
延迟微秒(1);
} 别的 {
// 写入时继续将总线拉低 0
延迟微秒(60);
}
设置引脚模式(DS18B20_PIN, 输入上拉);
延迟微秒(1);
}
接下来是读取一个字节的函数:
// 从单线总线读取一个字节
字节 OneWire_ReadByte() {
字节数据= 0;
为了 (整数我 = 0; 我 < 8; 我++) {
数据 >>= 1;
如果 (OneWire_ReadBit())
数据 |= 0x80;
}
返回数据;
}
// 从单线总线读取一位
位 OneWire_ReadBit() {
设置引脚模式(DS18B20_PIN, 输出低电平);
设置引脚模式(DS18B20_PIN, 输入上拉);
延迟微秒(3);
布尔结果 = ReadPin(DS18B20_PIN);
延迟微秒(57);
返回结果;
}
2.2.3 OneWire通信的验证机制
OneWire通信协议在数据交换过程中采用简单的验证机制, 通常通过读回写入的数据来验证数据的正确性. 以下是验证写入数据的示例代码:
字节数据 = 0x55; // 假设要发送的数据
OneWire_WriteByte(数据); // 将数据写入 OneWire 总线
字节读取数据 = OneWire_ReadByte(); // 从 OneWire 总线读回数据
如果 (读取数据 != 数据) {
处理错误(); // 如果读回的数据与写入的数据不匹配, 处理错误
English
Afrikaans
العربية
বাংলা
bosanski jezik
Български
Català
粤语
中文(简体)
中文(漢字)
Hrvatski
Čeština
Nederlands
Eesti keel
Suomi
Français
Deutsch
Ελληνικά
हिन्दी; हिंदी
Magyar
Bahasa Indonesia
Italiano
日本語
한국어
Latviešu valoda
Lietuvių kalba
македонски јазик
Bahasa Melayu
Norsk
پارسی
Polski
Português
Română
Русский
Cрпски језик
Slovenčina
Slovenščina
Español
Svenska
ภาษาไทย
Türkçe
Українська
اردو
Tiếng Việt





