[玩转树莓派] 0x06 DS18B20温度传感器

[TOC]

[玩转树莓派] DS18B20温度传感器

Raspberry connect to DS18B20

0x00 DS18B20

需要一个能测量水温的温度计,淘宝买了高逼格的红外温枪,到手后发现这鬼东西不能测金属杯里的水温(好的太贵)。然后又淘宝了下,一个电子温度计都卖三位数,好吧,我穷…… 忽然想起手上有一个 DS18B20,嗯嗯,拿出来自己做一个温度计吧~~

DS18B20 这个传感器很常见,某宝上一搜一购物车,价格5到10元不等,当然也有更好的,按需购买,大概参数如下

  • 独特的1-Wire总线接口仅需要一个管脚来通信。
  • 每个设备的内部ROM上都烧写了一个独一无二的64位序列号。
  • 多路采集能力使得分布式温度采集应用更加简单。
  • 无需外围元件。
  • 能够采用数据线供电;供电范围为3.0V至5.5V。
  • 温度可测量范围为:-55℃至+125℃(-67℉至+257℉)。
  • 温度范围超过-10℃至85℃之外时具有+-0.5℃的精度。(怀疑有误)
  • 内部温度采集精度可以由用户自定义为9-Bits至12-Bits。
  • DS18B20 分辨率可编程 1-Wire数字温度传感器
  • 温度转换时间在转换精度为12-Bits时达到最大值750ms。
  • 用户自定义非易失性的的温度报警设置。 · 定义了温度报警搜索命令和当温度超过用户自定义的设定值时。
  • 可选择的8-Pin SO (150 mils), 8-PinμSOP,及3-Pin TO-92封装。 · 与DS1822程序兼容。
  • 应用于温度控制系统,工业系统,民用产品。

嗯嗯,很多技术参数,作为外行人看着就晕。这里关注几个细节就好:

  • 电压:3.0V~5.5V
  • 温度范围:-55℃至+125℃
  • 测量精度:可调,0.5℃对我来说可接受,所以暂时没去细究

接下来结合我的树莓派的板子,给大家演示如何使用。

0x01 使用

首先按照网上的方法,比如vvbbbbb,一步步操作,难免遇到一些坑,我的问题是怎么都不能识别这个传感器,后来找了很久,无意中解决了,结合我的实际,做简单记录,具体操作如下:

  • 连接传感器和Raspberry Pi

    DS18B20 有三个针脚,分别是

    • VCC 红色,连 Raspberry Pi 的 VCC,测试连接 3V3 或 5V5 都可以
    • DATA 黄色,连 Raspberry Pi 的 GPIO4
    • GND 黑色,连 Raspberry Pi 的 GND

    另外和需要在用一个 4.7K 的电阻连接 VCC 和 DATA (别问我为什么,我也不知道,大学模电学的那叫一个渣),如果你没有 4.7K 的电阻,听说大一点或者小一点都可以,我没试,反正我有。如果你连电阻都没有,告诉你某宝上有打包一袋出售的,常用阻值的都有,很便宜,值得你入手。好了,最终电路如图:

ds18b20
  • 操作

    1. 更新系统

      如果你的系统版本比较旧,建议你更新,否则跳过这一步:

      sudo apt-get update
      sudo apt-get upgrade
      

      更新速度视你的网速和源的速度,怎么切换源,可以参考我之前的文章。

    2. 启用 1-Wire

      • 终端执行 sudo raspi-config,打开配置界面,找到 1-Wire(我的位于Interfacing Option 下,不同版本不一样,有的可能在 Advanced Options 下)启用它。

      • 你也可以直接配置:编辑 /boot/config.txt ,在最后一行添加 dtoverlay=w1-gpio 保存即可。

        1. 终端输入:sudo nano /boot/config.txt
        2. Ctrl+V 滚到最下面,输入 dtoverlay=w1-gpio
        3. Ctrl+O 保存,Ctrl+X 退出

      两个方法结果一样,操作完成之后需要重启机器,命令:sudo reboot

    3. 查看你的传感器

pi@raspberrypi:~ $ cd /sys/bus/w1/devices
pi@raspberrypi:/sys/bus/w1/devices $ ls
28-031561d43aff w1_bus_master1
pi@raspberrypi:/sys/bus/w1/devices $ cat 28-031561d43aff/w1_slave
48 01 01 01 1f ff 0c 10 04 : crc=04 YES
48 01 01 01 1f ff 0c 10 04 t=20500
pi@raspberrypi:/sys/bus/w1/devices $
```

    先查看 `w1` 设备列表,然后查看里面的 `w1_slave` 文件内容,即可显示出温度信息(这个温度信息并不是我们最终的温度,需要经过一定的换算)。
    
    `前方高能`
    `前方填坑`
    
    嗯嗯,坑出现了,我的在查看传感器的时候显示如下:
    
    ``` shell

pi@raspberrypi:~$ cd /sys/bus/w1/devices/
pi@raspberrypi:/sys/bus/w1/devices $ ls
00-600000000000 00-a00000000000 00-e00000000000 w1_bus_master1
pi@raspberrypi:/sys/bus/w1/devices $
```

    网上看到的都是 `28-xxxxxxxxxxxxxx` 这样的信息,而我的却不是;这些目录下也没有 `w1_slave`文件;而且每次进这个目录 `/sys/bus/w1/devices` 这些文件夹的名字和数量都有可能会变。好吧,懵逼了。所以去找答案,果然也有一些人反应过这个问题,但大部分对我都没用,比如 VCC 从 3V3 换到 5V5 ,看看时间,又快12点了,想放弃了都。此时[佛光乍现](https://www.raspberrypi.org/forums/viewtopic.php?f=28&t=106041):可能是 `GPIO` 口的问题,可以换一个试试,一试果然很爽,操作如下:
    
    编辑 `/boot/config.txt`,将刚才添加的那行修改如下 `dtoverlay=w1-gpio,gpiopin=5,pullup=on` 这里的 `5` 是对应的GPIO口,你也可以用其他的,高兴就好。保存重启即可。
    
3. 查看温度数据

    ``` shell

pi@raspberrypi:/sys/bus/w1/devices $ cat 28-031561d43aff/w1_slave
48 01 01 01 1f ff 0c 10 04 : crc=04 YES
48 01 01 01 1f ff 0c 10 04 t=20500
pi@raspberrypi:/sys/bus/w1/devices $
```

    这里的 `t=20500` 应该就是温度数据,不知道 `crc=40` 是不是校验数据,不管了,我也没时间去计算。网上肯定有现成的轮子来展示,这里推荐 [w1thermsensor](https://github.com/timofurrer/w1thermsensor)。
    
    - 安装

        `pip install w1thermsensor`
    
    - 使用(ds18b20.py)
        
        ``` python

from w1thermsensor import W1ThermSensor
sensor = W1ThermSensor(W1ThermSensor.THERM_SENSOR_DS18B20, "031561d43aff")
while True:
temperature_in_celsius = sensor.get_temperature()
print temperature_in_celsius
```

        这里的一个常量 `031561d43aff` 就是 `28-031561d43aff` 这里的后半部分,你的可能跟我不一样,请改成你自己看到的。
        
        执行:
        
        ``` python

pi@raspberrypi:~/python $ cat ds18b20.py
from w1thermsensor import W1ThermSensor
sensor = W1ThermSensor(W1ThermSensor.THERM_SENSOR_DS18B20, "031561d43aff")
while True:
temperature_in_celsius = sensor.get_temperature()
print temperature_in_celsius
pi@raspberrypi:~/python $ python ds18b20.py
21.0
21.0
```

完美~

Create by ttdevs
Create by ttdevs

参考:

1、https://datasheets.maximintegrated.com/en/ds/DS18B20.pdf
2、http://www.wendangku.net/doc/529cf93fc281e53a5802fff5.html
3、http://blog.csdn.net/vvbbbbb/article/details/52053293
4、https://www.raspberrypi.org/forums/viewtopic.php?f=28&t=106041

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 157,012评论 4 359
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 66,589评论 1 290
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 106,819评论 0 237
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,652评论 0 202
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 51,954评论 3 285
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,381评论 1 210
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,687评论 2 310
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,404评论 0 194
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,082评论 1 238
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,355评论 2 241
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,880评论 1 255
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,249评论 2 250
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,864评论 3 232
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,007评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,760评论 0 192
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,394评论 2 269
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,281评论 2 259

推荐阅读更多精彩内容