树莓派4B-Python-控制DS18B20(温度传感器)

树莓派4B-Python-控制DS18B20


文章目录

  • 树莓派4B-Python-控制DS18B20
  • 前言
  • 一、DS18B20模块
  • 二、参数介绍
  • 三、与树莓派连接
    • 1.打开单总线(1-wire)
    • 2.连接温度传感器DS18B20
  • 四、代码
    • 2.输出数据
  • 总结


前言

该文章也是与最近制作的V4小车有关,打算将温度传感器也安装到小车上,用于稍微的增加小车的附加功能吧。


一、DS18B20模块

树莓派4B-Python-控制DS18B20(温度传感器)_第1张图片
以下为百度百科的引用内容:

DS18B20是常用的数字温度传感器,其输出的是数字信号,具有体积小,硬件开销低,抗干扰能力强,精度高的特点。


二、参数介绍

以下为百度百科的引用内容:

技术性能描述:
①、** 独特的单线接口方式**,DS18B20在与微处理器连接时仅需要一条口线即可实现微处理器与DS18B20的双向通讯。
② 、测温范围 -55℃~+125℃,固有测温误差(注意,不是分辨率,这里之前是错误的)1℃。
③、支持多点组网功能,多个DS18B20可以并联在唯一的三线上,最多只能并联8个,实现多点测温,如果数量过多,会使供电电源电压过低,从而造成信号传输的不稳定。
④、工作电源: 3.0~5.5V/DC (可以数据线寄生电源)
⑤ 、在使用中不需要任何外围元件

⑥、 测量结果以9~12位数字量方式串行传送
⑦ 、不锈钢保护管直径 Φ6
⑧ 、适用于DN15~25, DN40~DN250各种介质工业管道和狭小空间设备测温
⑨、 标准安装螺纹 M10X1, M12X1.5, G1/2”任选
⑩ 、PVC电缆直接出线或德式球型接线盒出线,便于与其它电器设备连接。


三、与树莓派连接

1.打开单总线(1-wire)

  1. 进入树莓派软件配置工具
sudo raspi-config
  1. 选择
3.Interface Options
  1. 激活单总线设置
P7 1-Wire

树莓派4B-Python-控制DS18B20(温度传感器)_第2张图片

  1. 重启树莓派。重启后,路径 /sys/bus/ 下才会出现 w1 文件夹

2.连接温度传感器DS18B20

  1. 首先使用单总线的接口默认是GPIO04(BCM),若想更换自己选择的端口,则需要在 /boot/config.txt 文件的最后那行中加上 “,gpiopin=你想要的端口”。

如:

dtoverlay=w1-gpio, gpiopin=17

则在GPIO17(BCM)可进行单总线操作。
关于树莓派单总线的相关博客文章

  1. 与树莓派的接线图
    树莓派4B-Python-控制DS18B20(温度传感器)_第3张图片
    红线————3.3V
    黑线————GND
    黄线————GPIO04(BCM)

四、代码

(1)如下为非代码型查看当前传感器温度:

cd /sys/bus/w1/devices/
ls

一般显示的地址为 28-xxxxxxxxxxxx
查看地址

cd 28-012029ad0b30
cat w1_slave

树莓派4B-Python-控制DS18B20(温度传感器)_第4张图片
最后的 “ t=29750 ” 为当前的温度(摄氏度) X 100 后的结果,所以除以100才是真正的温度(29.75℃)。

(2)如下为写成代码形式:

#!/usr/bin/python3
import os
import time
device_file ='/sys/bus/w1/devices/28-012029ad0b30/w1_slave'

def read_temp_raw():
    f = open(device_file,'r')
    lines = f.readlines()
    f.close()
    return lines

def read_temp():
    lines = read_temp_raw()
    while lines[0].strip()[-3:] != 'YES':
        time.sleep(0.2)
        lines = read_temp_raw()
    equals_pos = lines[1].find('t=')
    if equals_pos != -1:
        temp_string = lines[1][equals_pos+2:]
        temp_c = float(temp_string)/1000.0
    return temp_c

while True:
    print('当前温度是%f'%read_temp(),'度')
    time.sleep(0.5)

2.输出数据

结果如下所示:

Python 3.7.3 (/usr/bin/python3)
>>> %Run DS18B20.py
当前温度是30.375000 度
当前温度是30.312000 度
当前温度是30.312000 度
当前温度是30.250000

总结

有点感觉该程序不能实时显示温度,它会有大约0.5S的变化延迟。
之后打算将此温度放于OLED中进行显示,这样小车就能有个微型情况显示屏了。
然后还打算装个人体红外传感器,用于感知周围大约一米内是否有人,虽然还没想好到底有什么用,就当是个待扩展功能吧。

你可能感兴趣的:(树莓派4B,V4,car,python)