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

    文章

    765

    浏览量

    80089
  • 树莓派
    +关注

    关注

    113

    文章

    1638

    浏览量

    104727
收藏 人收藏

    评论

    相关推荐

    树莓派Pico上使用DS18B20温度传感器

    DS18B20 温度传感采用单总线的接口方式,与微处理器连接时仅需要一条口线即可实现微处理器与 DS18B20 的双向通讯。单总线具有经济性好,抗干扰能力强,适合于恶劣环境的现场温度
    的头像 发表于 11-21 14:21 606次阅读
    <b class='flag-5'>树莓</b>派Pico上使用<b class='flag-5'>DS18B20</b><b class='flag-5'>温度</b>传感器

    单片机如何将ds18b20测得的温度通过串口发送到电脑上边?

    单片机如何将ds18b20测得的温度通过串口发送到电脑上边,获取到的温度是十进制,但是串口只能发送16进制,请问怎么转换才能发送正确的温度
    发表于 11-03 06:58

    DS18B20采样温度的精度可以达到多少?

    DS18B20采样温度的精度可以达到多少
    发表于 10-12 08:14

    DS18B20 数字温度计特点

    一.DS18B20特点 DS18B20 数字温度计提供12位(二进制)温度读数的数字型传感器。传感器仅需要单总线接口与CPU连接,实现信号送
    的头像 发表于 09-11 11:19 1324次阅读
    <b class='flag-5'>DS18B20</b> 数字<b class='flag-5'>温度</b>计特点

    如何使用Nano100DS18B20

    应用: 本代码使用 Nano100 DS18B20 。 BSP 版本: Nano100B系列 BSP CMSIS v3.03.000 硬件
    发表于 08-30 08:07

    如何使用Mini51DS18B20

    应用程序: 本代码使用 Mini51 DS18B20 。 BSP 版本: Mini51DE系列 BSP CMSIS v3.02.000 硬件: NuTiny-EVB-Mini51 v3.0
    发表于 08-29 07:08

    如何使用Nano100DS18B20

    应用: 本代码使用 Nano100 DS18B20 。 BSP 版本: Nano100B系列 BSP CMSIS v3.03.000 硬件
    发表于 08-22 07:54

    使用Mini51DS18B20

    应用程序: 本代码使用 Mini51 DS18B20 。 BSP 版本: Mini51DE系列 BSP CMSIS v3.02.000 硬件: NuTiny-EVB-Mini51 v3.0
    发表于 08-22 06:08

    如何使用i2c接口获取温度传感器DS18B20数据?

    使用i2c接口获取ds18b20数据,并且进行数据处理
    发表于 08-16 07:45

    Proteus教程第四讲:DS18B20温度测量

    Proteus教程第四讲:DS18B20温度测量
    的头像 发表于 06-14 11:19 1125次阅读
    Proteus教程第四讲:<b class='flag-5'>DS18B20</b><b class='flag-5'>温度</b>测量

    ds18b20获取数据并使用mqtt通过互联网发送,未找到DS18b20是怎么回事?

    任务是从 ds18b20 获取数据并使用 mqtt 通过互联网发送。首先在 eclipse 中通过 C 尝试,ds18b20 被正确检测到,但我无法通过 te 互联网发布,只能在本地网络中发布。然后
    发表于 05-23 07:19

    【正点原子STM32精英V2开发板体验】DS18B20温度采集

    of \'XXX\'”。 本节主要分享基于DS18B20温度精准采集,我们知道DS18B20是美国DSLIAS公司推出的单总线数字温度传感器,具有微型化、低功耗、高性能、抗干扰能力
    发表于 05-03 19:31

    DS18b20传感器读数问题如何解决?

    read_DS18B20_Temp(pin) 并从返回的传感器中获取读数。 看来这一定是可能的,但由于缺乏经验,我遇到了一些障碍。 有人可以告诉我哪里出错了,或者我是否正在尝试做一些 ds1
    发表于 04-27 07:04

    DS18B20读数据但是一直显示28度

    _Write_Byte(0x44);// 启动温度转换操作           } //???DS18B20?IO? DQ ????DS??? //??1:??? //??0:??             u8
    发表于 04-26 12:11

    ds18b20模块未加载是怎么回事?

    嗨,我尝试使用 ds18b20 模块将我的软件更新到版本 3.0.0.0 中的新 lua 模块,但是它不会加载: 代码:全选NodeMCU 3.0.0.0 built
    发表于 04-26 08:10