查看: 12388|回复: 14
收起左侧

[项目方案] 在树莓派上使用1wire器件DS18B20(温度传感器)读取温度!!!!

2012-8-8 23:11:09 | 显示全部楼层 |阅读模式
今天是了一下1wire(1线)器件的读取,没有问题,写个简单的教程帮助有需要的童鞋吧!
1.准备工作:
树莓派
树莓派串口扩展版http://www.shumeipai.net/thread-466-1-2.html

wheezy版debian系统
DS18B20温度传感器模块
T1wHmMXmdfXXar9Fc9_072227_jpg_310x310.jpg


2.安装1 wire驱动
用root登录,执行以下命令:

cd /boot
wget http://www.frank-buss.de/raspberrypi/kernel-rpi-w1.tgz
tar -xzf kernel-rpi-w1.tgz
rm -f kernel-rpi-w1.tgz
cd /lib/modules
wget http://www.frank-buss.de/raspberrypi/modules-rpi-w1.tgz
tar -xzf modules-rpi-w1.tgz
rm -f modules-rpi-w1.tgz
sync
reboot


3.连接DS18B20温度传感器到树莓派上
DS18B20一共三个管脚:VCC,D0,GND
D0需要连接到树莓派的GPIO7
未命名.jpg

使用串口扩展版就简单一点
直接将DS18B20一共三个管脚:VCC,D0,GND 分别连接到串口扩展版D7这一组就行了
{428F5EBA-7B95-4951-8E09-9E4BBA6EF79E}.jpg



4.读取温度
root登录,输入
root@raspberrypi:~# modprobe w1-gpio
然后输入
root@raspberrypi:~# ls /sys/bus/w1/devices/w1\ bus\ master

可以看到以下信息,其中“28-000003e08db6”就是温度传感器
未命名.jpg

最后读取温度,输入
root@raspberrypi:~# cat /sys/bus/w1/devices/w1\ bus\ master /28-*/w1_slave
得到log信息如下:
未命名1.jpg

其中t=25375,t除以100就温度值25.375摄氏度
T2eUJ1XcRdXXXXXXXX_!!13118880.jpg
回复

使用道具 举报

2012-8-9 09:10:09 | 显示全部楼层
技术贴顶起来了。
回复 支持 反对

使用道具 举报

 楼主| 2012-8-9 09:12:51 | 显示全部楼层
沙发被抢了
回复 支持 反对

使用道具 举报

2012-8-9 09:19:30 | 显示全部楼层
哇,赞美技术贴~这个挺好的呀
回复 支持 反对

使用道具 举报

2012-8-25 16:52:53 | 显示全部楼层
好东西,帮顶!分享个自己写的读取温度小程序。
  1. import os
  2. import re
  3. class ds18b20:
  4.     path = "/sys/bus/w1/devices/"
  5.     def __init__(self):
  6.         pattern = re.compile(r'''
  7.                 (^\\d{2}) #
  8.                 (-)
  9.                 ''',re.VERBOSE)
  10.         lines = os.popen("ls "+ self.path).readlines()
  11.         for line in lines:
  12.             l = pattern.search(line)
  13.             if not l is None:
  14.                 self.path = '%s%s/%s' % (self.path,l.string[:-1],"w1_slave")
  15.     def get_temperature(self):
  16.         lines = os.popen("cat "+ self.path).readlines()
  17.         pattern    = re.compile(r'''
  18.                 (t=\\d{5})
  19.                 ''',re.VERBOSE)
  20.         for line in lines:
  21.             l = pattern.search(line)
  22.             if not l is None:
  23.                 vaule = line[l.start():l.end()]
  24.                 return float(vaule[2:])/1000
  25.         return None
  26. if __name__ == "__main__":
  27.     ds = ds18b20()
  28.     print ds.get_temperature()
复制代码
回复 支持 反对

使用道具 举报

2012-9-24 23:04:56 | 显示全部楼层
好贴子要多顶
回复 支持 反对

使用道具 举报

2012-10-29 21:12:27 | 显示全部楼层
好贴子要多顶
      [s:151]  [s:151]  [s:151]
回复 支持 反对

使用道具 举报

2013-1-3 13:52:34 | 显示全部楼层
装了这个驱动之后,好像cat /sys/class/thermal/thermal_zone0/temp查CPU温度就不管用了啊
回复 支持 反对

使用道具 举报

2013-1-3 14:37:42 | 显示全部楼层
其中t=25375,t除以100就温度值25.375摄氏度

应该除以一千吧。
回复 支持 反对

使用道具 举报

2013-1-14 22:20:46 | 显示全部楼层
利用这个实例,是否可以diy环境噪音实时监测,然后把数据上传到Yeelink网站?
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注我们,了解更多

官方微信

服务时间:10:00-16:00

13714503811

公司地址:深圳市龙岗区南湾街道东门头路8号

Copyright © 2012-2020 Powered by 树莓派论坛 2019.4  粤ICP备15075382号-1
快速回复 返回列表 返回顶部