
1、介绍
18b20数字温度传感器是常用的数字温度传感器,其输出的是数字信号,具有体积小,抗干扰能力强,精度高的特点。数字温度传感器接线方便, 封装后的可用于电缆沟测温,高炉水循环测温,锅炉测温,机房测温,农业大棚测温,洁净室测温,弹药库测温等各种非极限温度场合。耐磨耐碰,体积小,使用方便,封装形式多样,适用于各种狭小空间设备数字测温和控制领域。
2、原理图

3、模块参数
引脚名称 | 描述 |
|---|---|
G | GND(电源输入负极) |
V | VCC(电源输入正极) |
S | 数字信号引脚 |
供电电压:3.3V / 5V
连接方式:PH2.0端子线
安装方式:乐高积木固定
4、电路板尺寸

5、Arduino IDE示例程序
Arduino UNO 示例(适用于Mixly IDE、Arduino IDE):点击下载
/***********************************************************
文件名:06_DS18B20Temperature sensor.ino
描述:获取温度值,串口打印数据。
作者:陈志强
日期:2022.11.2
***********************************************************/
#include <OneWire.h>
#include <DallasTemperature.h>
OneWire oneWire_9(9);//18B20数字温度传感器接 Arduino 上的数字引脚9口
DallasTemperature sensors_9(&oneWire_9);//将 oneWire 引用传递给DallasTemperature库
DeviceAddress insideThermometer;
float ds18b20_9_getTemp(int w) {
sensors_9.requestTemperatures();//发送命令以获取温度
if(w==0) {
return sensors_9.getTempC(insideThermometer);
}
else {
return sensors_9.getTempF(insideThermometer);
}
}
void setup(){
Serial.begin(9600);
sensors_9.getAddress(insideThermometer, 0);
sensors_9.setResolution(insideThermometer, 9);
}
void loop(){
Serial.println(String("温度:") + String(ds18b20_9_getTemp(0)) + String("℃"));//以摄氏度为单位打印温度
Serial.println(String("温度:") + String(ds18b20_9_getTemp(1)) + String("℉"));//以华氏度为单位打印温度
Serial.println("");
delay(1000);
}示例程序(ESP32开发板—基于Python语言,不能用Arduino IDE上传代码):
from machine import Pin
import time
class OneWire:
def __init__(self, pin):
self.pin = pin
self.pin.init(Pin.OPEN_DRAIN, Pin.PULL_UP)
self.pin.value(1)
def reset(self):
self.pin.value(0)
time.sleep_us(480)
self.pin.value(1)
time.sleep_us(60)
present = not self.pin.value()
time.sleep_us(420)
return present
def writebit(self, value):
self.pin.value(0)
if value:
time.sleep_us(10)
self.pin.value(1)
time.sleep_us(55)
else:
time.sleep_us(65)
self.pin.value(1)
time.sleep_us(5)
def readbit(self):
self.pin.value(0)
time.sleep_us(2)
self.pin.value(1)
time.sleep_us(15)
value = self.pin.value()
time.sleep_us(45)
return value
def writebyte(self, value):
for i in range(8):
self.writebit((value >> i) & 1)
def readbyte(self):
value = 0
for i in range(8):
value |= self.readbit() << i
return value
def readinto(self, buf):
for i in range(len(buf)):
buf[i] = self.readbyte()
class DS18B20:
def __init__(self, onewire):
self.ow = onewire
self.buf = bytearray(9)
def convert_temp(self):
self.ow.reset()
self.ow.writebyte(0xCC)
self.ow.writebyte(0x44)
time.sleep_ms(750)
def read_temp(self):
self.ow.reset()
self.ow.writebyte(0xCC)
self.ow.writebyte(0xBE)
self.ow.readinto(self.buf)
temp = self.buf[0] | (self.buf[1] << 8)
if temp & 0x8000:
temp = -((temp ^ 0xffff) + 1)
return temp / 16
def ds18b20_get_temp(w=0):
sensor.convert_temp()
t = sensor.read_temp()
if w == 1:
t = t * 9 / 5 + 32
return t
ds_pin = Pin(12)
ow = OneWire(ds_pin)
sensor = DS18B20(ow)
while True:
print(ds18b20_get_temp(1))
6、米思齐 Mixly 示例程序(图形化语言)
Arduino UNO 图形化示例程序:点击下载

ESP32 Python图形化示例程序:点击下载

7、测试环境搭建
Arduino UNO 测试环境搭建
准备配件:
HELLO STEM UNO R3 开发板 *1
HELLO STEM UNO R3 P 扩展板 *1
USB type-c 数据线 *1
数字温度传感器(HS-S24A-L)*1
PH2.0 3P双头端子线 *1
电路接线图:

ESP32 Python 测试环境搭建
8、视频教程
Arduino UNO视频教程:点击查看
ESP32 Python视频教程:
9、测试结论
Arduino UNO测试结论:


器件连接好线之后,将上述程序烧录到 开发板之后,打开串口监视器,波特率设置为9600,可以看到串口打印当前环境温度。