当前位置:首页  <  产品评测  <  【产品评测】DS18B20温度传感器与RaspberryPi控制器...
【产品评测】DS18B20温度传感器与Raspberry Pi控制器
编辑:neil 2017-10-12 浏览次数:1108

DS18B20 单线数字温度传感器,采用单总线的接口方式 与微处理器连接时仅需要一条口线即可实现微处理器与 DS18B20 的双向通讯。DS18B20 具有体积更小、适用电压宽、更经济、可选更小的封装方式,更宽的电压适用范围,适合于构建自己的经济的测温系统,因此现在使用的越来越广泛。树莓派3代控制器(Raspberry Pi 3)是目前很流行的一款开源嵌入式控制器,它板载wifi和蓝牙,扩展 40 个 GPIO 接口,可以连接传感器等设备,制作物联网设备。那么树莓派3代控制器与DS18B20如何结合使用呢?要如何配合树莓派3的系统呢?这里就给大家介绍一下DS18B20温度传感器与Raspberry Pi 3控制器结合使用的方法。

首先我们需要准备需要使用的硬件,并启动树莓派3控制器

  ● 使用硬件
      ○ Raspberry Pi 3 触摸液晶屏版套件
      ○ 杜邦线
      ○ DS18B20 温度传感器
  ● 按照下图进行硬件连接


  ● 启动 Raspberry Pi 系统,通过 SSH 登陆到树莓派控制器
      ○ 登陆方法参考教程:
树莓派教程第5课——远程图形化显示
http://www.makerspace.cn/forum.php?mod=viewthread&tid=5665&fromuid=10780
(出处: 中国创客空间联盟-奥松机器人创客空间-Arduino中国社区)

  ● 系统配置
      ○ config 文件修改
(1)使用下面命令,进入 config 文件的编辑状态
sudo nano /boot/config.txt

加入语句:dtoverlay=w1-gpio


加入语句后使用 Ctrl + X,然后输入 Y,保存修改内容
然后重新启动树莓派控制器,命令:sudo reboot

(2)运行 modprobe,正确加载模块
命令:
sudo modprobe w1-gpio
sudo modprobe w1-therm


(3)切换到设备目录,并使用 ls 来查看目录中的文件夹和文件
命令:
cd /sys/bus/w1/devices
ls

(4)运行以下命令,通过 cd 进入目录的编号文件夹(如果你有多个传感器将有多个目录),通过 ls 来查看文件夹中的内容
命令:
cd 28-000007602ffa
ls

(5)使用命令将温度数据显示在终端
命令:
cat w1_slave

这里出现的数据并不是太好,不是我们常用的温度值,需要使用一些数学计算来将这个数据转换成可识别的温度数值,可以编写 Python 代码来运行温度传感器并且输出正常的数据。
  ● 使用 python 代码读取环境温度
* 使用命令:
cd /home/pi/als (这里 als 文件夹是我在 pi 用户下自己建立的,大家可以自行建立其他名称的文件夹)
进入 als 目录:

* 使用 nano 编译器编写 python 代码:
nano DS18B20.py

* 输入代码:
import os
import glob
import time
 
os.system('modprobe w1-gpio')
os.system('modprobe w1-therm')
 
base_dir = '/sys/bus/w1/devices/'
device_folder = glob.glob(base_dir + '28*')[0]
device_file = device_folder + '/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(read_temp())
time.sleep(1)
* 运行代码:
命令:
sudo python DS18B20.py
效果如图所示,在终端输出的为当前环境的摄氏温度


创造源创客,创意自奥松

-----------------------------------------------------------------------------------------------------------------------------------

奥松机器人官网www.robotbase.cn

秀创客教学视频:supermaker.tv

微信号:奥松机器人

京东:alsrobot.jd.com

淘宝:robotbase.taobao.com

天猫robotbase.tmall.com

QQ群:16816196(讨论,解惑)

新浪微博:@奥松机器人基地