Featured image of post 使用树莓派和Python读取DS18B20传感器测量的温度

使用树莓派和Python读取DS18B20传感器测量的温度

在树莓派项目中,我们经常需要使用传感器来获取环境数据。其中,DS18B20 是一种常用的数字温度传感器,可以通…

在树莓派项目中,我们经常需要使用传感器来获取环境数据。其中,DS18B20 是一种常用的数字温度传感器,可以通过树莓派上的 GPIO 接口读取温度值。本文将介绍如何连接 DS18B20 传感器,并使用 Python 编写代码实现循环读取温度的功能。

首先,让我们了解一下 DS18B20 传感器的基本原理。DS18B20 是一种数字温度传感器,具有高精度和相对较大的测量范围。它通过单总线接口与树莓派通信,并通过 GPIO 引脚提供电源和数据传输。

1. 连接:

连接 DS18B20 传感器到树莓派的步骤如下:

  1. 将 DS18B20 传感器的 VCC 引脚连接到树莓派上的 3.3V 电源引脚。
  2. 将 DS18B20 传感器的 GND 引脚连接到树莓派上的地(GND)引脚。
  3. 将 DS18B20 传感器的数据引脚连接到树莓派上的 GPIO 引脚。我们建议使用 GPIO4 引脚。

以下是连接方式的示意图:

DS18B20 模块 +-------+ 3.3V---->|VCC | | | GPIO4 <--------|DATA | | | Ground------->|GND | +-------+

2. 配置与手工读取:

以下是通过 DS18B20 测温模块来读取温度的基本步骤:

  1. 在树莓派上启用 DS18B20 支持:打开终端,在命令行中输入以下命令,并确认开启了“w1-gpio”和“w1-therm”内核模块:

sudo nano /boot/config.txt

在文件末尾添加以下两行:

dtoverlay=w1-gpio dtoverlay=w1-therm

保存并退出文件,然后重启树莓派使更改生效。

  1. 连接 DS18B20 模块:将 DS18B20 模块连接到树莓派上的 GPIO 接口,具体连接方式请参考模块文档或资料。
  2. 读取温度值:打开终端,在命令行中输入以下命令,以读取 DS18B20 模块的温度值:

cd /sys/bus/w1/devices/ ls

此时,应该会输出一串以“28-”开头的目录名称,该名称是 DS18B20 模块的唯一标识符。将该名称替换为以下命令中的“<device_id>”,以读取温度值:

cat /sys/bus/w1/devices/<device_id>/w1_slave

此命令将返回一个包含温度值的文本字符串,其中温度值以“t=”开头。将该字符串中“t=”之后的数值除以 1000,即可得到以摄氏度为单位的温度值。

请注意,由于 DS18B20 模块需要一定的时间来进行精确温度测量,因此在读取温度值之前需要等待一段时间(例如 1 秒钟)以确保测量完成。此外,还应该注意树莓派和 DS18B20 模块的电气连接,以确保正确读取温度值。

3.Python 循环读取:

确保连接正确后,我们可以使用 Python 编写代码来读取 DS18B20 传感器测量的温度值。以下是示例代码:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32


|  | import time |
| --- | --- |
|  |  |
|  | # 定义 DS18B20 传感器的文件路径 |
|  | sensor_file = '/sys/bus/w1/devices/28-<device_id>/w1_slave'  # 将 <device_id> 替换为实际的设备 ID |
|  |  |
|  | def read_temperature(): |
|  | try: |
|  | # 打开传感器文件 |
|  | with open(sensor_file, 'r') as file: |
|  | lines = file.readlines() |
|  |  |
|  | # 获取温度数值所在行 |
|  | temperature_line = lines[1] |
|  |  |
|  | # 提取温度数值 |
|  | temperature = float(temperature_line.split('=')[1]) / 1000.0 |
|  |  |
|  | return temperature |
|  |  |
|  | except IOError as e: |
|  | print("无法读取温度传感器:", str(e)) |
|  | return None |
|  |  |
|  | # 循环读取温度并打印 |
|  | while True: |
|  | temperature = read_temperature() |
|  | if temperature is not None: |
|  | print("当前温度:", temperature, "℃") |
|  | time.sleep(1)  # 延时 1 秒 |

需要将上述代码中的 <device_id> 替换为你实际的 DS18B20 传感器设备 ID。你可以通过运行 ls /sys/bus/w1/devices/ 命令来查找正确的设备 ID。

上述代码会不断循环读取温度,并每秒钟打印一次当前的温度值。你可以根据需要进行修改和扩展,以适应你的具体应用场景。

使用树莓派和 Python 读取 DS18B20 传感器测量的温度 通过以上步骤,我们可以轻松地使用树莓派和 Python 读取 DS18B20 传感器测量的温度值。这为我们的项目提供了一个简单而可靠的方法来获取环境温度数据。希望本文对你在使用树莓派中读取温度传感器有所帮助!

转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
使用 Hugo 构建
主题 StackJimmy 设计