Section 184.1: 示例 —— 温度传感器
DS18B20 与 Raspberry Pi 的连接
DS18B20 与 Raspberry Pi 的连接方式如下图所示:
可以看到,DS18B20 有三个引脚:
- Vcc
- Gnd
- Data(单总线协议)

R1 是一个 4.7k 欧姆的上拉电阻,用于提升电压电平。
- Vcc 应连接到 Raspberry Pi 的任意 5V 或 3.3V 引脚(引脚编号:01、02、04、17)。
- Gnd 应连接到 Raspberry Pi 的任意 Gnd 引脚(引脚编号:06、09、14、20、25)。
- DATA 应连接到(引脚编号:07)。
从 Raspberry Pi 端启用单总线接口:
- 使用 PuTTY 或其他 Linux/Unix 终端登录到 Raspberry Pi。
- 登录后,使用您喜欢的浏览器打开
/boot/config.txt文件。
nano /boot/config.txt
- 在文件末尾添加以下内容:
dtoverlay=w1-gpio。 - 重启 Raspberry Pi:
sudo reboot。 - 登录到 Raspberry Pi,运行
sudo modprobe w1-gpio。 - 然后运行
sudo modprobe w1-therm。 - 进入
/sys/bus/w1/devices目录:cd /sys/bus/w1/devices。 - 您会发现一个以 28- 开头的虚拟目录,这是您的温度传感器目录。
- 进入该目录:
cd 28-********。 - 该目录下有一个名为
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 引脚图如下:
- https://www.element14.com/community/servlet/JiveServlet/previewBody/73950-102-11-339300/pi3_gpio.png