0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何在树莓派上使用DS18B20来获取温度读数

454398 来源:网络整理 作者:网络整理 2019-12-02 15:57 次阅读

概述

Raspbian发行版包括对DS18B20 1线温度传感器的支持。这些传感器采用晶体管等小的三引脚封装,是精确的数字设备。

在本课程中,您将学习如何在Raspberry Pi上使用DS18B20来获取温度读数。

从Raspberry开始Pi没有ADC模数转换器),它不能直接使用TMP36之类的模拟温度传感器,这使得DS18B20成为温度传感的理想选择。

硬件

DS18B20晶体管外形尺寸(TO-92)部件和防水有线型号的面包板布局如下所示。我们提供了较旧的20针和现代40针Raspberry Pi连接器的示例。此设置将适用于已发布的所有Raspberry Pi型号,但不包含突破接头的Pi计算模块除外。

DS18B20“ 1-wire”传感器可以并联连接-与出售的几乎所有其他传感器不同!所有传感器都应共享相同的引脚,但是所有它们只需要一个4.7K电阻器

电阻器用作数据线的“上拉”,并且需要保持数据传输的稳定和快乐

请注意正确选择DS18B20。弯曲的边缘应位于左侧,如下图所示。如果使用错误的方法,它将变热然后破裂。

DS18B20 +都是温度传感器,但与TMP36完全不同。您不能在本教程中使用TMP36!

40针(A,B,B +和零)Cobbler Plus原理图

-Pin(Raspberry Pi版本1和版本2)补鞋匠示意图

防水40针[黑色]

如果您使用的是DS18B20的防水版本,则该设备具有三根引线,红色,黑色和黄色。不需要连接的裸铜屏蔽线。

防水20针[黑色]

高温防水[白色]

如果使用我们出售的DS18B20的“高温”版本,将橙色条纹连接到3.3V,白色连接到地面,蓝色条纹是数据,引脚4。

您仍然需要〜4.7K-10K从数据到3.3V的电阻

DS18B20

尽管DS18B20看起来像普通的晶体管,但实际上内部有很多东西。

芯片包括特殊的1有线串行接口以及控制逻辑和温度传感器本身。

其输出引脚发送数字消息,而Raspbian包括读取这些消息的接口。一旦我们在Raspberry Pi上使用“ raspi-config”工具启用了1-Wire,将在随后的重启中加载正确的内核模块。

启用1-Wire

下载:文件

复制代码

sudo raspi-config sudo raspi-config

选择接口选项

选择 1-Wire 》

选择是是是

退出raspi-config并重新启动Pi,以便加载1-wire内核模块。

下载:文件

复制代码

sudo reboot sudo reboot

验证是否在下次启动时加载了1-Wire内核模块。运行 lsmod 命令时,您应该会看到类似下面的输出。

下载:文件

复制代码

lsmod | grep -i w1_ lsmod | grep -i w1_

软件

Python程序处理任何失败的消息,并每秒报告摄氏度和华氏温度。

下载:Project Zip 或 thermometer.py | 在Github上查看

复制代码

import glob

import time

base_dir = ‘/sys/bus/w1/devices/’

device_folder = glob.glob(base_dir + ‘28*’)[0]

device_file = device_folder + ‘/w1_slave’

def read_temp_raw():

f = open(device_file, ‘r’)

lines = f.readlines()

f.close()

return lines

def read_temp():

lines = read_temp_raw()

while lines[0].strip()[-3:] != ‘YES’:

time.sleep(0.2)

lines = read_temp_raw()

equals_pos = lines[1].find(‘t=’)

if equals_pos != -1:

temp_string = lines[1][equals_pos+2:]

temp_c = float(temp_string) / 1000.0

temp_f = temp_c * 9.0 / 5.0 + 32.0

return temp_c, temp_f

while True:

print(read_temp())

time.sleep(1)

import glob

import time

base_dir = ‘/sys/bus/w1/devices/’

device_folder = glob.glob(base_dir + ‘28*’)[0]

device_file = device_folder + ‘/w1_slave’

def read_temp_raw():

f = open(device_file, ‘r’)

lines = f.readlines()

f.close()

return lines

def read_temp():

lines = read_temp_raw()

while lines[0].strip()[-3:] != ‘YES’:

time.sleep(0.2)

lines = read_temp_raw()

equals_pos = lines[1].find(‘t=’)

if equals_pos != -1:

temp_string = lines[1][equals_pos+2:]

temp_c = float(temp_string) / 1000.0

temp_f = temp_c * 9.0 / 5.0 + 32.0

return temp_c, temp_f

while True:

print(read_temp())

time.sleep(1)

接下来的三行,从中找到文件

下载:文件

复制代码

def read_temp_raw():

catdata = subprocess.Popen([‘cat’,device_file], stdout=subprocess.PIPE, stderr=subprocess.PIPE)

out,err = catdata.communicate()

out_decode = out.decode(‘utf-8’)

lines = out_decode.split(‘ ’)

return lines def read_temp_raw():

catdata = subprocess.Popen([‘cat’,device_file], stdout=subprocess.PIPE, stderr=subprocess.PIPE)

out,err = catdata.communicate()

out_decode = out.decode(‘utf-8’)

lines = out_decode.split(‘ ’)

return lines

读取温度是通过两个函数进行的,read_temp_raw只是从接口获取消息的两行。 read_temp函数会对此进行总结,以检查是否有错误消息,然后重试直到收到第一行末尾带有“ YES”的消息。该函数返回两个值,第一个为摄氏度,第二个为华氏。

如果希望将这两个值分开,如下例所示:

下载:文件

复制代码

deg_c, deg_f = read_temp() deg_c, deg_f = read_temp()

程序的主循环只是循环,读取温度并打印,然后睡眠一秒钟。

要将程序上传到Raspberry Pi上,可以使用 SSH连接到Pi ,使用以下行启动编辑器窗口:

下载:文件

复制代码

nano thermometer.py nano thermometer.py

,然后粘贴上面的代码,然后使用CTRL-保存文件x和Y。

配置和测试

该程序必须以超级用户身份运行,因此在终端中键入以下命令以启动该程序:

下载:文件

复制代码

sudo python thermometer.py sudo python thermometer.py

如果一切顺利,您将看到一系列读数,如下所示:

尝试将手指放在传感器上进行加热。

添加更多传感器

您可以并行添加其他DS18B20传感器-将所有传感器的VCC,数据和接地引脚连接在一起。使用一个4.7K电阻。您将看到多个 /sys/bus/w1/ devices/28-nnnnn 目录,每个目录都有唯一的序列号作为目录名。 python示例代码现在仅适用于一个传感器,因此如果您希望一次从不同的传感器读取它,则必须对其进行修改
责任编辑:wv

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • DS18B20
    +关注

    关注

    10

    文章

    780

    浏览量

    81090
  • 树莓派
    +关注

    关注

    117

    文章

    1710

    浏览量

    105853
收藏 人收藏

    评论

    相关推荐

    基于FPGA的温度传感器(ds18b20)驱动设计

    本篇主要讨论基于FPGA的温度传感器(ds18b20)驱动设计---第一版 设计实现:利用FPGA驱动DS18b20,读取到温度数值显示到数码管上。 首先介绍
    的头像 发表于 01-16 14:08 161次阅读
    基于FPGA的<b class='flag-5'>温度</b>传感器(<b class='flag-5'>ds18b20</b>)驱动设计

    《DNESP32S3使用指南-IDF版_V1.6》第二十九章 DS18B20实验

    第二十九章 DS18B20实验 本章,我们将介绍ESP32-S3如何读取外部温度传感器的温度,来得到较为准确的环境温度。我们将学习单总线技术,通过它
    发表于 12-25 09:43

    CW32模块使用 DS18B20温度传感器

    DS18B20数字温度传感器提供9位至12位精度的温度测量,并具有非易失性用户可编程上下触发点报警功能。DS18B20通过单总线通信,根据定义,只需要一条数据线(和地线)即可与单片机通
    的头像 发表于 11-26 17:47 318次阅读
    CW32模块使用 <b class='flag-5'>DS18B20</b><b class='flag-5'>温度</b>传感器

    DS18B20温度传感器的工作原理和硬件设计

    通过本文可以了解DS18B20温度传感器工作原理、硬件设计、DS18B20单总线接口驱动编写。
    的头像 发表于 10-24 14:38 3416次阅读
    <b class='flag-5'>DS18B20</b><b class='flag-5'>温度</b>传感器的工作原理和硬件设计

    ds18b20传感器的使用方法

    DS18B20是一种广泛使用的数字温度传感器,它基于1-Wire(单总线)通信协议。这种传感器因其高精度、易用性和低成本而受到欢迎。 DS18B20传感器简介 DS18B20是由Max
    的头像 发表于 10-18 14:52 1157次阅读

    ds18b20温度传感器怎么接线

    DS18B20是一种广泛使用的数字温度传感器,它基于1-Wire(一线)通信协议工作。这种传感器因其高精度、易用性和低成本而受到欢迎。 DS18B20传感器引脚介绍 DS18B20有三
    的头像 发表于 10-18 14:50 1859次阅读

    ds18b20温度传感器如何使用

    DS18B20是一款广泛使用的数字温度传感器,它具有高精度、低功耗和易于使用的特点。 DS18B20温度传感器简介 DS18B20是由Max
    的头像 发表于 09-03 16:51 826次阅读

    ds18b20温度传感器是什么类型

    DS18B20温度传感器是一种数字温度传感器,它属于单总线(One-Wire)数字温度传感器类型。这意味着它仅需要一根数据线(加上电源线和地线,共三根线)就能与微处理器或其他数字电路进
    的头像 发表于 09-03 16:46 1240次阅读

    ds18b20温度传感器和dht11的区别

    进行通信。这种传感器可以提供9位到12位的数字温度读数,精度非常高。DS18B20的工作原理是通过测量其内部温度传感器的电压变化计算
    的头像 发表于 09-03 16:44 2032次阅读

    STC32和STC8H驱动DS18B20测温串口发送数据

    STC32G12K128 和 STC8H8K64U 驱动 DS18B20 模块,采集环境温度并通过串口发送数据至电脑
    的头像 发表于 06-27 16:27 1048次阅读
    STC32和STC8H驱动<b class='flag-5'>DS18B20</b>测温串口发送数据

    基于51单片机烟雾及DS18B20温度检测设计

    本资源内容概要:       这是基于51单片机烟雾及DS18B20温度检测设计包含了电路图源文件(Altiumdesigner软件打开)、C语言程序源代码(keil软件打开)、元件清单(excel
    发表于 06-27 11:33 0次下载

    DS18B20温度传感器工作原理

    DS18B20以其独特的工作原理、卓越的技术参数和广泛的应用场景,成为了市场的明星产品。 深入了解DS18B20的工作原理 DS18B20温度传感器的工作原理基于热敏电阻的特性和数字
    的头像 发表于 06-19 16:01 1492次阅读

    基于STC8H8K64U和DS18B20温度采集和LabVIEW上位机显示

    ,该项目可以实现 LabVIEW 上位机对 MCU 发送指令,MCU 通过 DS18B20 温度传感器获取环境温度,并通过串口将数据反馈给上位机,上位机实时记录数据,并将日期和各个时刻
    发表于 04-08 12:28

    DS18B20温度传感器的优缺点

    可编程寄存器:DS18B20内部具有可编程寄存器,允许用户对其进行配置和控制,以满足不同的应用需求。
    发表于 04-04 11:39 4797次阅读

    基于51单片机的多点温度检测网络,DS18B20传感器,代码,仿真,原理图等资料

    设计概述 基于DS18B20的多点温度测量监控系统设计,以AT89C52单片机作为主控制器,不断循环读取4组DS18B20(T1、T2、T3和T4)温度数据,同时使用LCD1602液晶
    发表于 03-24 22:08