一起玩转树莓派(9)——DS18B20测温模块应用

简介: 一起玩转树莓派(9)——DS18B20测温模块应用

关于使用树莓派测量温度,我们之前在学习模数转换的相关博客中已经有过应用。其实除了使用传统的AD采集温度数据外,我们也可以通过树莓派中的单总线技术结合DS18B20传感器来更加方便精准的测量环境温度。


一、认识DS18B20模块与单总线通信


     DS18B20是一种改进型的智能温度传感器。与传统的热敏电阻相比,其可以直接读出被测量的温度,并且能够根据实际应用场景中的要求进行简单的编程。无论是读取数据还是写入数据,DS18B20都只需要一条接口线,因此其使用的是单总线的通讯协议。DS18B20模块的主要优势在于其抗干扰能力强,精度高,无需复杂的软件处理可以直接输出温度数据。本次实验,我们使用的DS18B20模块如下图所示:


image.png


可以看到此模块有3个引脚,除了电源引脚和接地引脚外,剩下的一个就是用来输出温度数据的引脚。


     单总线通信被称为one-wire通信,因此又常常被简称为1w总线通信。首先我们需要先开始树莓派的1w总线通信功能,打开树莓派的Raspberry Configuration菜单,在Interfaces选项中将1-Wire功能开启,如下图所示。


image.png


如果我们是通过无交互页面的终端登录的树莓派,也可以通过修改配置文件来开启1-Wire功能,在树莓派Linux系统的根目录下,找到如下路径的文件:


/boot/config.txt

在其中添加如下一行文本即可:


dtoverlay=w1-gpio

需要注意,添加之后需要重启树莓派。需要注意,1-Wire功能默认将使用树莓派的BCM编码为GPIO4的引脚作为通信引脚,如何我们要进行自定义,可以在刚才的配置文件中进行指定,如下:


dtoverlay=w1-gpio,gpiopin=18

其表示要使用BCM编码为GPIO18的引脚作为通信引脚。


做完了上面的操作后,我们可以在树莓派终端中使用如下指令查看单总线是否启动成功:


$ lsmod

终端输出效果如下:

image.png



可以看到,如果有显示w1_gpio和wire两个部分,则表示单总线已经启动成功,分别在终端执行如下两条命令:


$ modprobe w1-gpio

$ modprobe w1-therm


如果终端没有输出任何信息,则表示单总线已经初始化完成,此时实际上我们已经可以让DS18B20进行工作了。


二、通过DS18B20模块获取环境温度


通过前面的操作,我们已经完成了基本的准备工作,将DS18B20连接到树莓派,引脚对应如下:


DS18B20 树莓派

+ 3.3V

- GND

out BCM编码为GPIO4的引脚

之后我们从树莓派的终端进入如下目录:


/sys/bus/w1/devices

在此目录下,我们可以看到有两个文件,如下图所示:


image.png


其中以28-xxx开头的文件夹中的文件记录的就是1w单总线输入的数据,需要注意,读者操作时,此文件夹的名称和笔者可能并不完全一样,其表示传感器设备的编号,大家这里只需要找到28-xx开头的文件夹即可。在此文件夹中,有一个名为w1_slave的文件,此文件中记录的就是传感器的温度数据,我们可以打开看看,内容如下:


d2 01 55 05 7f 7e 81 66 59 : crc=59 YES

d2 01 55 05 7f 7e 81 66 59 t=29125


其中,大部分数据我们都无需关心,其最后的t=29125就是当前的环境温度,将其转换为摄氏温度,直接除以1000即可,例如上面的数据表明当前的环境温度是29.125摄氏度。


     目前为止,我们已经可以非常轻松的获取DS18B20模块提供的温度数据了,但是查看的方式非常不智能,其实我们可以通过Python程序来不停的读取此数据文件,解析出其中的温度数据,之后无论是做记录还是进行其他元件控制都会非常方便。编写示例代码如下:


#coding:utf8


import os,time

# 传感器编号

name = "28-020692455d61"

# 设备记录数据的文件地址

device_file ='/sys/bus/w1/devices/' + name + '/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()

   # 此行默认不是'YES' 表明未读取到有效数据

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

       time.sleep(0.2)

       # 循环继续读

       lines = read_temp_raw()

   # 找到第2行的't='的位置

   equals_pos = lines[1].find('t=')

   # 将温度数据取出

   if equals_pos != -1:

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

       temp_c = float(temp_string)/1000.0

   return temp_c


while True:

   print('%fC'%read_temp())

   time.sleep(1)

在树莓派中运行上面代码,可以看到控制台输出的当前温度数据,如下图所示:


image.png


三、讲在后面


     本篇博客,我们介绍了如何使用one-wire单总线进行外设数据的读取,DS18B20只是作为示例,抛砖引玉,通过树莓派的1w总线,我们还可以连接更多的外设实现更加有创意的东西,大家开动脑筋,尽情玩耍吧!

目录
相关文章
|
XML JSON 前端开发
dom4j - 使用详解与xml-json转换
dom4j - 使用详解与xml-json转换
316 1
|
9月前
|
人工智能 自然语言处理
用LLaVA解读数万神经元,大模型竟然自己打开了多模态智能黑盒
大模型在多模态信息处理中的“黑盒”问题一直备受关注。LLaVA研究通过分析数万神经元活动,揭示了模型内部处理文本与图像等信息的协调机制。研究表明,模型并非简单分离处理各模态信息,而是通过高度交互实现复杂场景理解,这对自动图像描述、视觉问答等应用意义重大。然而,研究也指出模型存在局限性:交互机制较简单,且对不同模态信息存在偏好,可能影响全面理解能力。论文详见arxiv.org/abs/2411.14982。
228 26
|
5月前
|
存储 机器学习/深度学习 安全
阿里云服务器2核4G租用价格:最新收费标准、可选实例规格与活动价格参考
目前阿里云的活动中2核4G配置的云服务器经济型e、通用算力型u1、计算型c8i、计算型c9i和计算型c8y实例可选,其中u1实例2核4G5M带宽有特惠,价格为199元1年,且续费价格不变。选择不同实例规格和带宽价格不一样,本文为大家介绍阿里云服务器2核4G配置的最新月付及年付活动价格,以及选择参考。
|
监控 Java Shell
「Mac畅玩鸿蒙与硬件7」鸿蒙开发环境配置篇7 - 使用命令行工具和本地模拟器管理项目
本篇将讲解在 macOS 上配置 HarmonyOS 开发环境的流程,聚焦 hvigorw 命令行工具的使用。我们将以创建 HelloWorld 项目为例,演示使用 hvigorw 进行项目构建、清理操作,并通过 DevEco Studio 的本地模拟器进行预览,帮助提升项目开发与调试效率。
573 3
「Mac畅玩鸿蒙与硬件7」鸿蒙开发环境配置篇7 - 使用命令行工具和本地模拟器管理项目
|
11月前
|
机器学习/深度学习 搜索推荐 数据挖掘
Pandas数据应用:广告效果评估
在数字化营销中,广告效果评估至关重要。Pandas作为Python的强大数据分析库,在处理广告数据时表现出色。本文介绍如何使用Pandas进行广告效果评估,涵盖数据读取、预览、缺失值处理、数据类型转换及常见报错解决方法,并通过代码案例详细解释。掌握这些技能,可为深入分析广告效果打下坚实基础。
229 17
|
存储 C语言
C语言:普通局部变量、普通全局变量、静态局部变量、静态全局变量的区别
C语言中,普通局部变量在函数内部定义,作用域仅限于该函数;普通全局变量在所有函数外部定义,作用域为整个文件;静态局部变量在函数内部定义但生命周期为整个程序运行期;静态全局变量在所有函数外部定义,但仅在定义它的文件内可见。
918 10
|
11月前
|
机器学习/深度学习 算法 前端开发
基于Python深度学习果蔬识别系统实现
本项目基于Python和TensorFlow,使用ResNet卷积神经网络模型,对12种常见果蔬(如土豆、苹果等)的图像数据集进行训练,构建了一个高精度的果蔬识别系统。系统通过Django框架搭建Web端可视化界面,用户可上传图片并自动识别果蔬种类。该项目旨在提高农业生产效率,广泛应用于食品安全、智能农业等领域。CNN凭借其强大的特征提取能力,在图像分类任务中表现出色,为实现高效的自动化果蔬识别提供了技术支持。
440 0
基于Python深度学习果蔬识别系统实现
|
机器学习/深度学习 自然语言处理 算法
注意力机制(四)(多头注意力机制)
在上一篇注意力机制(三)(不同注意力机制对比)-CSDN博客,重点讲了针对QKV来源不同制造的注意力机制的一些变体,包括交叉注意力、自注意力等。这里再对注意力机制理解中的核心要点进行归纳整理
|
存储 负载均衡 安全
MQTT常见问题之MQTT使用共享订阅失败如何解决
MQTT(Message Queuing Telemetry Transport)是一个轻量级的、基于发布/订阅模式的消息协议,广泛用于物联网(IoT)中设备间的通信。以下是MQTT使用过程中可能遇到的一些常见问题及其答案的汇总:
|
Unix Shell Linux
linux互斥锁(pthread_mutex)知识点总结
linux互斥锁(pthread_mutex)知识点总结