声明:
本文在撰写过程中使用了 DeepSeek AI 提供的技术支持,部分代码及内容由 AI 生成并经作者运行测试与审核。
简介
本文将介绍如何在香橙派3 LTS上使用DS18B20温度传感器,并输出实时温度数据。我们将详细讲解硬件连接、系统配置以及Python脚本的实现。特别提醒,香橙派的GPIO引脚命名遵循PD
、PH
等接口图纸上的命名,不能直接使用GPIO编号。
硬件准备
- 香橙派3 LTS
- DS18B20温度传感器
- 4.7kΩ电阻
- 杜邦线
硬件连接
香橙派3 LTS的GPIO引脚命名遵循PD
、PH
等接口图纸上的命名。以下是连接方式:
DS18B20引脚 | 香橙派3 LTS引脚 |
VDD | 3.3V (物理引脚1或17) |
GND | GND (物理引脚6、9等) |
DQ | PD18 (物理引脚12) |

在DQ线和3.3V之间并联一个4.7kΩ的上拉电阻。(这里使用的传感器带有电阻就不用单独加上上拉电阻了)
系统配置
1. 启用1-Wire接口
编辑启动配置文件:
sudo nano /boot/orangepiEnv.txt
添加以下内容:
overlays=w1-gpio
param_w1_pin=PD18
param_w1_pullup=1
添加完成后 分别使用Ctrl+O、Enter、Ctrl+X进行保存
2. 重启系统
sudo reboot
3. 验证1-Wire接口
检查驱动加载
lsmod | grep w1
正常输出应包含 w1_gpio
和 w1_therm
模块。
检查设备识别
ls /sys/bus/w1/devices/
如果连接成功,会显示类似28-xxxxxxxxxxxx
的目录。
检查内核日志
dmesg | grep w1
正常输出应包含:
w1-gpio onewire@0: GPIO pin PD18, external pullup pin -1
Python脚本读取温度
脚本内容
import os
import glob
import time
def read_temp():
base_dir = '/sys/bus/w1/devices/'
device_folder = glob.glob(base_dir + '28*')[0]
device_file = device_folder + '/w1_slave'
with open(device_file, 'r') as f:
lines = f.readlines()
while lines[0].strip()[-3:] != 'YES':
time.sleep(0.2)
with open(device_file, 'r') as f:
lines = f.readlines()
temp_pos = lines[1].find('t=')
if temp_pos != -1:
temp_str = lines[1][temp_pos+2:]
return float(temp_str) / 1000.0
try:
while True:
temp = read_temp()
print(f"\r当前温度: {temp:.2f}°C", end="", flush=True)
time.sleep(1)
except KeyboardInterrupt:
print("\n程序已退出")
运行脚本
sudo python3 temperature.py
注意事项
1. 引脚命名
香橙派3 LTS的GPIO引脚命名遵循PD
、PH
等接口图纸上的命名,不能直接使用GPIO编号。
2. 1-Wire接口验证
- 驱动加载:使用
lsmod | grep w1
检查w1_gpio
和w1_therm
模块是否加载。 - 设备识别:使用
ls /sys/bus/w1/devices/
检查是否显示28-xxxxxxxxxxxx
目录。 - 内核日志:使用
dmesg | grep w1
检查是否有GPIO pin PD18
的输出。
3. 权限问题
读取温度数据需要root权限,建议将用户添加到gpio
组:
sudo usermod -aG gpio $USER
sudo reboot
Comments NOTHING