如何在樹莓派上使用DS18B20來獲取溫度讀數

2020-11-28 電子發燒友

如何在樹莓派上使用DS18B20來獲取溫度讀數

網絡整理 發表於 2019-12-02 15:57:14

概述

Raspbian發行版包括對DS18B20 1線溫度傳感器的支持。這些傳感器採用電晶體等小的三引腳封裝,是精確的數字設備。

在本課程中,您將學習如何在Raspberry Pi上使用DS18B20來獲取溫度讀數。

從Raspberry開始Pi沒有ADC(模數轉換器),它不能直接使用TMP36之類的模擬溫度傳感器,這使得DS18B20成為溫度傳感的理想選擇。

硬體

DS18B20電晶體外形尺寸(TO-92)部件和防水有線型號的麵包板布局如下所示。我們提供了較舊的20針和現代40針Raspberry Pi連接器的示例。此設置將適用於已發布的所有Raspberry Pi型號,但不包含突破接頭的Pi計算模塊除外。

DS18B20「 1-wire」傳感器可以並聯連接-與出售的幾乎所有其他傳感器不同!所有傳感器都應共享相同的引腳,但是所有它們只需要一個4.7K電阻器

該電阻器用作數據線的「上拉」,並且需要保持數據傳輸的穩定和快樂

請注意正確選擇DS18B20。彎曲的邊緣應位於左側,如下圖所示。如果使用錯誤的方法,它將變熱然後破裂。

DS18B20 +都是溫度傳感器,但與TMP36完全不同。您不能在本教程中使用TMP36!

40針(A,B,B +和零)Cobbler Plus原理圖

-Pin(Raspberry Pi版本1和版本2)補鞋匠示意圖

防水40針[黑色]

如果您使用的是DS18B20的防水版本,則該設備具有三根引線,紅色,黑色和黃色。不需要連接的裸銅屏蔽線。

防水20針[黑色]

高溫防水[白色]

如果使用我們出售的DS18B20的「高溫」版本,將橙色條紋連接到3.3V,白色連接到地面,藍色條紋是數據,引腳4。

您仍然需要〜4.7K-10K從數據到3.3V的電阻

DS18B20

儘管DS18B20看起來像普通的電晶體,但實際上內部有很多東西。

該晶片包括特殊的1有線串行接口以及控制邏輯和溫度傳感器本身。

其輸出引腳發送數字消息,而Raspbian包括讀取這些消息的接口。一旦我們在Raspberry Pi上使用「 raspi-config」工具啟用了1-Wire,將在隨後的重啟中加載正確的內核模塊。

啟用1-Wire

下載:文件

複製代碼

sudo raspi-config sudo raspi-config

選擇接口選項

選擇 1-Wire 》

選擇是是是

退出raspi-config並重新啟動Pi,以便加載1-wire內核模塊。

下載:文件

複製代碼

sudo reboot sudo reboot

驗證是否在下次啟動時加載了1-Wire內核模塊。運行 lsmod 命令時,您應該會看到類似下面的輸出。

下載:文件

複製代碼

lsmod | grep -i w1_ lsmod | grep -i w1_

軟體

Python程序處理任何失敗的消息,並每秒報告攝氏度和華氏溫度。

下載:Project Zip 或 thermometer.py | 在Github上查看

複製代碼

import glob

import time

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

temp_f = temp_c * 9.0 / 5.0 + 32.0

return temp_c, temp_f

while True:

print(read_temp())

time.sleep(1)

import glob

import time

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

temp_f = temp_c * 9.0 / 5.0 + 32.0

return temp_c, temp_f

while True:

print(read_temp())

time.sleep(1)

接下來的三行,從中找到文件

下載:文件

複製代碼

def read_temp_raw():

catdata = subprocess.Popen([『cat』,device_file], stdout=subprocess.PIPE, stderr=subprocess.PIPE)

out,err = catdata.communicate()

out_decode = out.decode(『utf-8』)

lines = out_decode.split(『 』)

return lines def read_temp_raw():

catdata = subprocess.Popen([『cat』,device_file], stdout=subprocess.PIPE, stderr=subprocess.PIPE)

out,err = catdata.communicate()

out_decode = out.decode(『utf-8』)

lines = out_decode.split(『 』)

return lines

讀取溫度是通過兩個函數進行的,read_temp_raw只是從接口獲取消息的兩行。 read_temp函數會對此進行總結,以檢查是否有錯誤消息,然後重試直到收到第一行末尾帶有「 YES」的消息。該函數返回兩個值,第一個為攝氏度,第二個為華氏。

如果希望將這兩個值分開,如下例所示:

下載:文件

複製代碼

deg_c, deg_f = read_temp() deg_c, deg_f = read_temp()

程序的主循環只是循環,讀取溫度並列印,然後睡眠一秒鐘。

要將程序上傳到Raspberry Pi上,可以使用 SSH連接到Pi ,使用以下行啟動編輯器窗口:

下載:文件

複製代碼

nano thermometer.py nano thermometer.py

,然後粘貼上面的代碼,然後使用CTRL-保存文件x和Y。

配置和測試

該程序必須以超級用戶身份運行,因此在終端中鍵入以下命令以啟動該程序:

下載:文件

複製代碼

sudo python thermometer.py sudo python thermometer.py

如果一切順利,您將看到一系列讀數,如下所示:

嘗試將手指放在傳感器上進行加熱。

添加更多傳感器

您可以並行添加其他DS18B20傳感器-將所有傳感器的VCC,數據和接地引腳連接在一起。使用一個4.7K電阻。您將看到多個 /sys/bus/w1/ devices/28-nnnnn 目錄,每個目錄都有唯一的序列號作為目錄名。 python示例代碼現在僅適用於一個傳感器,因此如果您希望一次從不同的傳感器讀取它,則必須對其進行修改
        責任編輯:wv

打開APP閱讀更多精彩內容

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容圖片侵權或者其他問題,請聯繫本站作侵刪。 侵權投訴

相關焦點

  • DS18B20溫度顯示
    unsigned char  flag=1;void Timer0Init(void); //10毫秒@11.0592MHzvoid main() { unsigned char ack; int temp;                    //保存接收溫度數據
  • 小小樹莓派要搭上 Google 的人工智慧了
    Wired 聯繫了樹莓派以及 Google 獲取進一步信息,對方都表示暫時未能透露更多信息,但有望可在 2017 年見到新進展。Google 向來都致力於為開發者提供更多強大的開發工具,以開源的心將科技發揚光大。其實,它也沒有落下「小且強大」的樹莓派。
  • 樹莓派如何刷RetroPie,製作一個復古遊戲機
    給它裝上開源的RetroPi模擬器後,它就是一臺萬能復古遊戲機,可以運行索尼、任天堂、世嘉各大公司上萬款遊戲,隨便說幾款耳熟能詳的遊戲:超級馬裡奧、魂鬥羅、合金彈頭、古惑狼都可以玩,接下來我將一步步告訴大家如何把手上吃灰的樹莓派拿出來,製作一個「遊戲機」!
  • 淺談香蕉派與樹莓派的不同
    這些以水果稱呼的嵌入式開發板讓人聽起來有種不一樣的味道,但是許多人對於樹莓派與香蕉派很容易弄混,甚至認為香蕉派只是樹莓派的一個copy。這真的是這樣嗎? 關於香蕉派的一些產品上,能夠高度兼容樹莓派,才誕生了香蕉派只是一個「克隆體」這樣的說法,實際上,這只是人們理解上的一個誤區,事實上香蕉派與樹莓派,無論從硬體上,還是性能方面,都存在許多的不同的。
  • 使用樹莓派控制16路舵機驅動板(pca9685)
    使用樹莓派控制16路舵機驅動板(pca9685)在樹莓派上,可以通過RPI.GPIO方便地輸出PWM進行舵機控制。p.ChangeDutyCycle(dc)停止 PWM:1p.stop()但當你同時使用多個舵機時,PWM輸出就變得困難了。
  • 香橙派和樹莓派對比
    打開APP 香橙派和樹莓派對比 工程師之餘 發表於 2018-10-30 14:37:18 嵌入式技術一直都是年輕的開發者比較感興趣的
  • arm開發板與樹莓派有什麼區別
    它使用ARM處理器晶片,和linux作業系統或windows作業系統,是一個很小體積的桌面電腦。   樹莓派由註冊於英國的慈善組織「Raspberry Pi 基金會」開發,Eben·Upton/埃·厄普頓為項目帶頭人。
  • 滴定管的使用方法是什麼,應該如何正確讀數
    是用細長而均勻的玻璃管制成的,管上有刻度,下端是一尖嘴,中間有節門用來控制滴定的速度。 滴定管的使用方法在滴定時,加入的液體量不必正好落於刻度線上,只要能正確的讀取溶液的量即可。實驗時將滴定前管內液體的量減去滴定後管內液體的存量即為滴定溶液的用量。
  • 世達紅外測溫儀體驗:讀數精準,溫度掌握在手中,讓生活更便利
    世達紅外測溫儀通過這塊屏幕將電量、測量狀態、讀數等重要信息傳達給用戶,並且它還帶有背光設計,通過下方左邊的按鍵就能夠開關。同時它還帶有一枚攝氏度與華氏度的轉換按鍵,在功能上還是挺方便的。世達紅外測溫儀的做工還是挺不錯的,用料啥的都比較厚道,對得起這個價格。
  • 扭力扳手讀數及使用方法
    扭力扳手怎麼看,扭力扳手怎麼用,扭力扳手怎麼調扭力,扭力扳手怎麼讀數,扭力扳手刻度怎麼看?相信第一次使用扭力扳手的人都會遇到以上疑問,天賦工具今天為大家介紹一下扭力扳手讀數及使用方法。天賦工具Geniustools刻度式(預製式)扭力扳手讀數:1、雙面刻度:正面刻度為N- m牛米,反面刻度為Ft-L b英尺磅(如下圖)
  • 單相電子電度表如何讀數?
    1.對於直接接入電路的電度表以及與所標明的互感器配套使用的電度表,被測電能均可從電錶中直接讀數。
  • 如何查看IC卡燃氣表讀數及餘額?
    現在新建的樓房都是使用IC卡燃氣表,拿到房子入住時也沒有見到IC卡燃氣表的使用說明書,很多人可能為此而苦惱,這裡就講一下如何查看IC卡燃氣表讀數及餘額產品外觀可選功能產品優勢主要技術參數準備IC卡及手電筒,通常燃氣表都是安裝在灶臺下面
  • 電腦攝像頭視頻是如何被獲取和保存的,使用Python OpenCV來實現
    我們上一篇博文中提到了從攝像頭中獲取到了視頻數據(下面,我們來進一步演示如何播放我們讀取到的視頻幀信息。因此,在使用OpenCV來播放視頻時,我們使用waitKey()傳參的方式來實現響應的效果。下面,我們來看下演示代碼。
  • 陶瓷電容標註如何看_陶瓷電容如何讀數
    那麼,瓷片電容的參數如何識別呢?別急,下面我們就一起來看看瓷片電容的讀數方法吧。 瓷片電容的讀數方法 瓷片電容的讀數方法和電阻的讀數方法基本相同,分色標法、數標法和直標法3種。 容量大的瓷片電容其容量值在電容上直接標明,如10μF/16V; 容量小的瓷片電容其容量值在電容上用字母表示或數字表示; 字母表示法:2m=2000μF,1P2=1.2PF,2n=2000PF; 數字表示法:三位數字的表示法也稱電容量的數碼表示法。
  • 水準儀標尺讀數方法!!!
    另一面毫米為估讀,尺面顯示的是一個格為5毫米,讀數時需要估讀出毫米,這種也就在距離較遠,精確刻度看不清下使用!接下來為您介紹水準儀標尺讀數方法。TITLE水準儀 (level)1、望遠鏡 (telescope) ——由物鏡、目鏡和十字絲(上、中、下絲)三部分組成。
  • 電壓表的讀數規則_如何讀取電流表、電壓表
    打開APP 電壓表的讀數規則_如何讀取電流表、電壓表 發表於 2018-02-08 16:39:42   本文主要介紹一下電壓表的讀數規則及如何讀取電流表、電壓表,跟隨小編一起來了解一下。
  • 萬用表測低於1歐姆電阻會讀數跳動,如何測量更低阻值器件?
    通常使用的萬用表(無論是指針式還是數字式)當測量低於一歐姆電阻的時候就不準確了,甚至有的萬用表對於小於10歐姆的電阻讀數都有很大的跳動。這種情況,需要藉助於四線低阻值歐姆表來精確測量。實際上,只要你的萬用表可以精確測量到毫伏直流電壓,便可以相當準確的測量低阻值電阻了。
  • 如何正確讀出水錶數?水錶怎麼讀?水錶的正確讀數方法圖解
    下面小編就為大家介紹水錶讀數怎麼看圖解,水錶讀數怎么正確看。第一種 ,常見的字輪和指針的聯合方式顯示讀數。再說說智能水錶近年新建樓房以及更換水錶用戶基本全部使用IC卡智能水錶,它的盤與數字水錶基本一致,這裡不再贅述。IC卡智能水錶充值後使用,用戶用水更加節約、方便,如卡內金額用完,水也同時停止供應。
  • 遊標卡尺讀數原理,遊標卡尺讀數方法
    遊標卡尺是目前工程工業中使用最廣泛的一種測量工具,它的出現可以說是具有劃時代意義的。在測量工件內徑、外徑、深度、寬度等方面有著很大的優勢。但遊標卡尺的形式也有很多,很多使用者對於某些形式的遊標卡尺的使用還存在著一定的誤解。今天我們就講一講遊標卡尺的知識。