香橙派3 LTS输出DS18B20模块温度

Silas 发布于 2025-01-26 101 次阅读


声明
本文在撰写过程中使用了 DeepSeek AI 提供的技术支持,部分代码及内容由 AI 生成并经作者运行测试与审核。

简介

本文将介绍如何在香橙派3 LTS上使用DS18B20温度传感器,并输出实时温度数据。我们将详细讲解硬件连接、系统配置以及Python脚本的实现。特别提醒,香橙派的GPIO引脚命名遵循PDPH等接口图纸上的命名,不能直接使用GPIO编号。

硬件准备

  • 香橙派3 LTS
  • DS18B20温度传感器
  • 4.7kΩ电阻
  • 杜邦线

硬件连接

香橙派3 LTS的GPIO引脚命名遵循PDPH等接口图纸上的命名。以下是连接方式:

DS18B20引脚香橙派3 LTS引脚
VDD3.3V (物理引脚1或17)
GNDGND (物理引脚6、9等)
DQPD18 (物理引脚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引脚命名遵循PDPH等接口图纸上的命名,不能直接使用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
此作者没有提供个人介绍
最后更新于 2025-01-26