[玩轉樹莓派] 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閱讀 228,983評論 6 537
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,772評論 3 422
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,947評論 0 381
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,201評論 1 315
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,960評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,350評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,406評論 3 444
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,549評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,104評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,914評論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,089評論 1 371
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,647評論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,340評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,753評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,007評論 1 289
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,834評論 3 395
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,106評論 2 375

推薦閱讀更多精彩內容