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

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

3天内不再提示

如何将温度传感器DS18B20与树莓派连接

科技观察员 来源:circuitdigest 作者:阿斯文斯·拉吉 2022-11-08 16:44 次阅读

树莓派以其计算能力及其在物联网、家庭自动化等领域的广泛应用而闻名。然而,对于任何电子系统与现实世界进行交互并获取有关它的信息,系统必须使用传感器。该过程使用多种类型的传感器,并根据要测量的参数及其应用选择所需的传感器。在本教程中,我们将学习将温度传感器DS18B20与树莓派连接。

DS18B20是广泛使用的温度传感器,主要用于化工、矿山等恶劣工作环境的场所。本文将介绍该传感器以及它如何超越其他温度传感器,最后将其与Raspberry Pi连接并查看16x2 LCD上的温度值。

所需材料

DS18B20 温度传感器

树莓派

16*2液晶显示屏

10k修剪锅

10k 上拉电阻

面包板

连接线

DS18B20温度传感器简介

DS18B20是一款三端子温度传感器,采用TO-92(晶体管型)封装。它非常易于使用,只需要一个外部组件即可开始工作。此外,它只需要MCU / MPU的一个GPIO引脚即可与之通信。典型的DS18B20温度传感器及其引脚名称如下所示。

poYBAGNqFvKAf8GVAABfI7UAdpo227.png

该传感器也可作为防水版本提供,其中传感器由圆柱形金属管覆盖。在本教程中,我们将使用上面显示的普通晶体管型传感器。DS18B20为1线可编程温度传感器,只需数据引脚即可将信息发送到微控制器微处理器板(如Raspberry Pi)。每个传感器都有一个唯一的 64 位地址,因此也可以将多个传感器连接到同一个 MCU/MPU,因为每个传感器可以在同一数据总线上单独寻址。传感器的规格如下所示。

工作电压:3-5V

测量范围:-55°C 至 +125°C

精度:±0.5°C

分辨率:9 位至 12 位

现在我们对传感器有了足够的了解,让我们统计它与树莓派的接口

先决条件

假设您的树莓派已经使用操作系统刷新并能够连接到互联网。如果没有,请先按照树莓派入门教程进行操作,然后再继续。这里我们使用Rasbian Jessie安装的Raspberry Pi 3。

还假设您可以通过终端窗口或其他应用程序访问您的 pi,通过这些应用程序您可以编写和执行 python 程序并使用终端窗口。

电路图

正如我们在本教程前面所说,我们将DS18B20传感器与Pi连接,并在16*2 LCD屏幕上显示温度值。因此,传感器和LCD应与树莓派连接,如下所示。

pYYBAGNqFvWAObK3AADmW2C4_iM007.png

按照电路图进行相应的连接。LCD和DS18B20传感器均在+5V的帮助下工作,+5V由树莓派上的5V引脚提供。LCD使用Raspberry Pi在4位模式下工作,GPIO引脚18,23,24和25用于数据线,GPIO引脚7和8用于控制线。电位计也用于控制LCD的对比度水平。DS18B20的数据线连接到GPIO引脚4。另请注意,必须使用10K电阻器拉动电路图中所示的高电平数据。

您可以按照上面的电路图进行连接,也可以使用引脚表跟进 GPIO 引脚编号。

poYBAGNqFviAFzXmAACdZFT2UWU031.png

我使用单股线和公对母线在面包板上构建电路以进行连接。如您所见,传感器只需要一根电线即可连接,因此占用的空间和引脚更少。建立所有连接后,我的硬件如下所示。现在是时候启动 pi 并开始编程了。

pYYBAGNqFvqACjiuAACrk0YQhHc554.jpg

在树莓P上安装Adafruit LCD库

温度值将显示在 16*2 LCD 显示屏上。Adafruit 为我们提供了一个库,可以在 4 位模式下轻松操作此 LCD,因此让我们通过打开终端窗口 Pi 并按照以下步骤将其添加到我们的树莓派中。

第 1 步:使用以下行在树莓派上安装 git。Git允许您克隆 Github 上的任何项目文件,并在 Raspberry pi 上使用它。我们的库在 Github 上,所以我们必须安装 git 才能将该库下载到 pi 中。

apt-get install git

第 2 步:以下行链接到存在库的 GitHub 页面,只需执行该行即可克隆 Pi 主目录上的项目文件

git clone git://github.com/adafruit/Adafruit_Python_CharLCD

第 3 步:使用以下命令更改目录行,进入我们刚刚下载的项目文件。命令行如下

cd Adafruit_Python_CharLCD

第 4 步:目录中会有一个名为 setup.py 的文件,我们必须安装它,以安装库。使用以下代码安装库

sudo python setup.py install

也就是说,库应该已成功安装。现在同样,让我们继续安装同样来自Adafruit的DHT库。

在 Pi 中启用单线接口

由于DS18B20传感器通过单线方式通信,因此必须按照以下步骤在Pi上启用单线通信。

第 1 步:-打开命令提示符并使用以下命令打开配置文件

sudo nano /boot/config.txt

第 2 步:-在配置文件中添加行“dtoverlay=w1-gpio”(在下图中包围)并保存文件,如下所示

pYYBAGNqFvyAaEAdAABwlZmAr8Q413.png

第 3 步:-使用 Ctrl+X 退出文件并通过按“Y”保存它,然后按 Enter 键。最后使用命令重新启动 Pi

sudo reboot

第 4 步:-重新启动后,再次打开终端并输入以下命令。

sudo modprobe w1–gpio sudo modprobe w1-therm. cd /sys/bus/w1/devices ls

您的终端窗口将显示如下内容

poYBAGNqFv2ANivQAAAxrncnN8s872.png

第 5 步:-在步骤 4 结束时,当您输入 ls 时,您的 pi 将显示一个唯一的数字,该数字对于每个用户来说都是不同的,具体取决于传感器,但始终以 28- 开头。就我而言,号码是28-03172337caff。

第 6 步:-现在我们可以通过输入以下命令来检查传感器是否正常工作

cd 28-XXXXXXXXXXXX [use the name of your directory or use Tab key for auto complete)

cat w1_slave

这两个命令将从传感器读取数据并将其显示在终端上,如下所示。下图中的温度值用红色包围。在我的情况下,温度值为37 * C。

poYBAGNqFv-Afz1AAAA_IO27ybM322.png

为 DS18B20 传感器编程树莓派

现在,我们的Pi已准备好针对LCD进行编程并使用单线协议。因此,我们可以编写最终程序,从DS18B20传感器读取温度值并将其显示在LCD屏幕上。本页末尾给出了执行相同操作的完整 python 程序。但是,下面我将代码分成有意义的小片段来解释它们。

与往常一样,我们通过导入程序所需的头文件来开始程序。这里我们导入时间处理延时功能,LCD接头使用LCD与Pi。操作系统标头用于处理操作系统中的文件。

import time #import time for creating delay

import Adafruit_CharLCD as LCD #Import LCD library

import os #Import for file handling

import glob #Import for global

接下来我们必须提到连接到树莓派引脚的LCD引脚。使用上面提供的 GPIO 引脚图了解各个 GPIO 引脚的引脚号。一旦我们声明了LCD连接到哪些PI引脚,我们就可以指定行数和列数,最后使用以下代码行对其进行初始化。

lcd_rs = 7 #RS of LCD is connected to GPIO 7 on PI

lcd_en = 8 #EN of LCD is connected to GPIO 8 on PI

lcd_d4 = 25 #D4 of LCD is connected to GPIO 25 on PI

lcd_d5 = 24 #D5 of LCD is connected to GPIO 24 on PI

lcd_d6 = 23 #D6 of LCD is connected to GPIO 23 on PI

lcd_d7 = 18 #D7 of LCD is connected to GPIO 18 on PI

lcd_backlight = 0 #LED is not connected so we assign to 0

lcd_columns = 16 #for 16*2 LCD

lcd_rows = 2 #for 16*2 LCD

lcd = LCD.Adafruit_CharLCD(lcd_rs, lcd_en, lcd_d4, lcd_d5, lcd_d6, lcd_d7,

lcd_columns, lcd_rows, lcd_backlight) #Send all the pin details to library

初始化LCD后,我们在LCD上打印示例文本消息。字符“n”用于提及换行符。显示介绍后,我们引入了 2 秒的延迟,供用户阅读介绍消息。

lcd.message('DS18B20 with Pi n -CircuitDigest') #Give a intro message

time.sleep(2) #wait for 2 secs

现在,如果您能回忆起使用 Pi 启用单线接口的步骤 4。我们必须重复相同的代码行,因此我们使用 os.system 函数来执行相同的行。然后我们指定必须从中读取温度值的文件位置。device_folder变量指向以“28-”开头的文件夹,因为我们不知道文件夹的确切名称,我们使用 * 符号打开以 28 开头的任何内容。最后,在该文件夹中,我们使用另一个名为device_file的变量,该变量实际上指向内部具有温度值的文件。

然后我们使用名为 get_temp 的函数,在其中我们定义从我们在上述步骤中刚刚链接的文件中读取温度的过程。正如我们之前与终端检查的那样,该文件内部将包含温度值,但它将采用以下格式

pYYBAGNqFwCAM372AAAmXGMvzqE517.png

由此我们只需要 37000 的值,即温度值。这里的实际温度值是37.00*C。因此,从这种文本格式中,我们必须修剪所有无用的数据并得到整数值 37000,最后将其除以 1000以获得实际数据。下面显示的函数完全相同

def get_temp(): #Fundtion to read the value of Temperature

file = open(device_file, 'r') #opent the file

lines = file.readlines() #read the lines in the file

file.close() #close the file

trimmed_data = lines[1].find('t=') #find the "t=" in the line

if trimmed_data != -1:

temp_string = lines[1][trimmed_data+2:] #trim the strig only to the temoerature value

temp_c = float(temp_string) / 1000.0 #divide the value of 1000 to get actual value

return temp_c #return the value to print on LCD

变量行用于读取文件内的行。然后比较这些行,搜索字母“t=”,并将该字母后面的值保存在变量temp_string中。最后,为了获得温度值,我们使用变量temp_c将字符串值除以 1000。最后返回函数的结果temp_c变量。

在无限 while 循环中,我们只需要调用上面定义的函数即可获取温度值并将其显示在 LCD 屏幕上。我们还每 1 秒清除一次 LCD 以显示更新的值。

while 1: #Infinite Loop

lcd.clear() #Clear the LCD screen

lcd.message ('Temp = %.1f C' % get_temp()) # Display the value of temperature

time.sleep(1) #Wait for 1 sec then update the values

输出/工作

与往常一样,完整的python代码在页面末尾给出,请使用代码并在Raspberry Pi上编译它。按照电路图中所示进行连接,在执行程序之前,请确保已按照上述步骤安装LCD头文件并在pi上启用单线通信。完成后,只需执行程序,如果一切按预期工作,您应该能够注意到介绍文本。如果没有,请调整对比度电位器,直到看到一些东西。最终结果如下所示。

poYBAGNqFwKAdP5rAACoK93UO3E476.jpg

#Program to read the values of Temp from the DS18B20 sensor and display them on the LCD


import time #import time for creating delay

import Adafruit_CharLCD as LCD #Import LCD library

import os #Import for file handling

import glob #Import for global





lcd_rs = 7 #RS of LCD is connected to GPIO 7 on PI

lcd_en = 8 #EN of LCD is connected to GPIO 8 on PI

lcd_d4 = 25 #D4 of LCD is connected to GPIO 25 on PI

lcd_d5 = 24 #D5 of LCD is connected to GPIO 24 on PI

lcd_d6 = 23 #D6 of LCD is connected to GPIO 23 on PI

lcd_d7 = 18 #D7 of LCD is connected to GPIO 18 on PI

lcd_backlight = 0 #LED is not connected so we assign to 0



lcd_columns = 16 #for 16*2 LCD

lcd_rows = 2 #for 16*2 LCD



lcd = LCD.Adafruit_CharLCD(lcd_rs, lcd_en, lcd_d4, lcd_d5, lcd_d6, lcd_d7,

lcd_columns, lcd_rows, lcd_backlight) #Send all the pin details to library



lcd.message('DS18B20 with Pi n -CircuitDigest') #Give a intro message



time.sleep(2) #wait for 2 secs





os.system('modprobe w1-gpio')

os.system('modprobe w1-therm')



base_dir = '/sys/bus/w1/devices/'

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

device_file = device_folder + '/w1_slave'





def get_temp(): #Fundtion to read the value of Temperature

file = open(device_file, 'r') #opent the file

lines = file.readlines() #read the lines in the file

file.close() #close the file



trimmed_data = lines[1].find('t=') #find the "t=" in the line



if trimmed_data != -1:

temp_string = lines[1][trimmed_data+2:] #trim the strig only to the temoerature value

temp_c = float(temp_string) / 1000.0 #divide the value of 1000 to get actual value

return temp_c #return the value to prnt on LCD







while 1: #Infinite Loop



lcd.clear() #Clear the LCD screen

lcd.message ('Temp = %.1f C' % get_temp()) # Display the value of temperature



time.sleep(1) #Wait for 1 sec then update the values


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

    关注

    48

    文章

    2940

    浏览量

    156020
  • DS18B20
    +关注

    关注

    10

    文章

    779

    浏览量

    80824
  • 树莓派
    +关注

    关注

    116

    文章

    1706

    浏览量

    105608
收藏 人收藏

    评论

    相关推荐

    基于STM32的DS18B20温度传感器设计

    DS18B20内置了64位产品序列号,方便识别身份,在一根线上可以挂接多个DS18B20传感器,通过64位身份验证,可以分别读取来至不同传感器采集的
    的头像 发表于 03-07 11:44 1.3w次阅读
    基于STM32的<b class='flag-5'>DS18B20</b><b class='flag-5'>温度</b><b class='flag-5'>传感器</b>设计

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

    DS18B20 温度传感采用单总线的接口方式,与微处理连接时仅需要一条口线即可实现微处理
    的头像 发表于 11-21 14:21 1403次阅读
    <b class='flag-5'>树莓</b><b class='flag-5'>派</b>Pico上使用<b class='flag-5'>DS18B20</b><b class='flag-5'>温度</b><b class='flag-5'>传感器</b>

    DS18B20温度传感器是什么

    DALLAS最新单线数字温度传感器DS18B20简介新的“一线器件”体积更小、适用电压更宽、更经济 Dallas 半导体公司的数字化温度传感器
    发表于 04-27 08:14

    DS18B20温度传感器实验

    STM32学习记录:DS18B20温度传感器实验(HAL库)实验摘要DS18B20简述STMCubeMX引脚配置芯片选型引脚和时钟配置生成ARM-MDK工程编写
    发表于 08-18 07:44

    DS18B20温度传感器与MCU是如何连接

    DS18B20是什么?DS18B20温度传感器的技术特性有哪些?DS18B20温度
    发表于 09-27 09:10

    数字温度传感器DS18B20的设计及应用

    数字温度传感器DS18B20的设计及应用 1引言 DS18B20是DALLAS公司生产的一线式数字温度
    发表于 04-02 18:00 2821次阅读
    数字<b class='flag-5'>温度</b><b class='flag-5'>传感器</b><b class='flag-5'>DS18B20</b>的设计及应用

    DS18B20完成温度检测的技巧

    介绍了DS18B20 温度传感器 的结构和特点以及用DS18B20温度传感器进行
    发表于 08-23 10:44 190次下载
    <b class='flag-5'>DS18B20</b>完成<b class='flag-5'>温度</b>检测的技巧

    DS18B20 测温模块_温度传感器模块

    ds18b20温度传感器资料 测试程序 连接图 要的过来
    发表于 12-08 11:06 16次下载

    温度传感器DS18B20

    温度传感器DS18B20 51例程,亲测可用
    发表于 06-14 15:36 20次下载

    智能温度传感器DS18B20的原理与应用

    DS18B20是DALLAS公司生产的单线数字温度传感器,他具有独特的单线总线接口方式。文章详细的介绍了单线数字温度传感器
    发表于 10-11 18:19 49次下载

    ds18b20的特性_ds18b20温度传感器应用

    本文首先介绍了ds18b20的特性,其次介绍了DS18B20工作原理,最后介绍了ds18b20温度传感器应用。
    发表于 04-24 09:10 1.1w次阅读
    <b class='flag-5'>ds18b20</b>的特性_<b class='flag-5'>ds18b20</b><b class='flag-5'>温度</b><b class='flag-5'>传感器</b>应用

    如何将DS18B20数字温度传感器与Arduino结合使用

    电子发烧友网站提供《如何将DS18B20数字温度传感器与Arduino结合使用.zip》资料免费下载
    发表于 02-07 15:05 1次下载
    <b class='flag-5'>如何将</b><b class='flag-5'>DS18B20</b>数字<b class='flag-5'>温度</b><b class='flag-5'>传感器</b>与Arduino结合使用

    ds18b20温度传感器如何使用

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

    ds18b20温度传感器怎么接线

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

    ds18b20传感器的使用方法

    Integrated开发的一种数字温度传感器,它能够提供9位到12位的温度测量精度,测量范围从-55°C到+125°C。这种传感器非常适合用于需要精确
    的头像 发表于 10-18 14:52 707次阅读