Section 184.1: 示例 —— 温度传感器

DS18B20 与 Raspberry Pi 的连接

DS18B20 与 Raspberry Pi 的连接方式如下图所示:

示例 —— 温度传感器 可以看到,DS18B20 有三个引脚:

  1. Vcc
  2. Gnd
  3. Data(单总线协议)

示例 —— 温度传感器

R1 是一个 4.7k 欧姆的上拉电阻,用于提升电压电平。

  1. Vcc 应连接到 Raspberry Pi 的任意 5V 或 3.3V 引脚(引脚编号:01、02、04、17)。
  2. Gnd 应连接到 Raspberry Pi 的任意 Gnd 引脚(引脚编号:06、09、14、20、25)。
  3. DATA 应连接到(引脚编号:07)。

从 Raspberry Pi 端启用单总线接口:

  1. 使用 PuTTY 或其他 Linux/Unix 终端登录到 Raspberry Pi。
  2. 登录后,使用您喜欢的浏览器打开 /boot/config.txt 文件。
nano /boot/config.txt
  1. 在文件末尾添加以下内容:dtoverlay=w1-gpio。
  2. 重启 Raspberry Pi:sudo reboot。
  3. 登录到 Raspberry Pi,运行 sudo modprobe w1-gpio。
  4. 然后运行 sudo modprobe w1-therm。
  5. 进入 /sys/bus/w1/devices 目录:cd /sys/bus/w1/devices。
  6. 您会发现一个以 28- 开头的虚拟目录,这是您的温度传感器目录。
  7. 进入该目录:cd 28-********。
  8. 该目录下有一个名为 w1_slave 的文件,该文件包含温度和其他信息(如 CRC)。运行 cat w1_slave 查看内容。

现在编写一个 Python 模块来读取温度:

import glob
import time

RATE = 30
sensor_dirs = glob.glob("/sys/bus/w1/devices/28*")

if len(sensor_dirs) != 0:
    while True:
        time.sleep(RATE)
        for directories in sensor_dirs:
            temperature_file = open(directories + "/w1_slave")
            # 读取文件内容
            text = temperature_file.read()
            temperature_file.close()
            # 按换行符(\n)拆分文本并选择第二行
            second_line = text.split("\n")[1]
            # 按空格拆分行并选择第 10 个单词
            temperature_data = second_line.split(" ")[9]
            # 从第二个字符开始读取
            temperature = float(temperature_data[2:])
            # 通过除以 1000 来标准化温度
            temperature = temperature / 1000
            print('Address: ' + str(directories.split('/')[-1]) + ', Temperature: ' + str(temperature))

上述 Python 模块将无限期地打印地址与温度。RATE 参数用于更改或调整从传感器查询温度的频率。

GPIO 引脚图如下:

  1. https://www.element14.com/community/servlet/JiveServlet/previewBody/73950-102-11-339300/pi3_gpio.png