概述
Raspbian發(fā)行版包括對(duì)DS18B20 1線溫度傳感器的支持。這些傳感器采用晶體管等小的三引腳封裝,是精確的數(shù)字設(shè)備。
在本課程中,您將學(xué)習(xí)如何在Raspberry Pi上使用DS18B20來(lái)獲取溫度讀數(shù)。
從Raspberry開(kāi)始Pi沒(méi)有ADC(模數(shù)轉(zhuǎn)換器),它不能直接使用TMP36之類的模擬溫度傳感器,這使得DS18B20成為溫度傳感的理想選擇。
硬件
DS18B20晶體管外形尺寸(TO-92)部件和防水有線型號(hào)的面包板布局如下所示。我們提供了較舊的20針和現(xiàn)代40針Raspberry Pi連接器的示例。此設(shè)置將適用于已發(fā)布的所有Raspberry Pi型號(hào),但不包含突破接頭的Pi計(jì)算模塊除外。
DS18B20“ 1-wire”傳感器可以并聯(lián)連接-與出售的幾乎所有其他傳感器不同!所有傳感器都應(yīng)共享相同的引腳,但是所有它們只需要一個(gè)4.7K電阻器
該電阻器用作數(shù)據(jù)線的“上拉”,并且需要保持?jǐn)?shù)據(jù)傳輸?shù)姆€(wěn)定和快樂(lè)
請(qǐng)注意正確選擇DS18B20。彎曲的邊緣應(yīng)位于左側(cè),如下圖所示。如果使用錯(cuò)誤的方法,它將變熱然后破裂。
DS18B20 +都是溫度傳感器,但與TMP36完全不同。您不能在本教程中使用TMP36!
40針(A,B,B +和零)Cobbler Plus原理圖
-Pin(Raspberry Pi版本1和版本2)補(bǔ)鞋匠示意圖
防水40針[黑色]
如果您使用的是DS18B20的防水版本,則該設(shè)備具有三根引線,紅色,黑色和黃色。不需要連接的裸銅屏蔽線。
防水20針[黑色]
高溫防水[白色]
如果使用我們出售的DS18B20的“高溫”版本,將橙色條紋連接到3.3V,白色連接到地面,藍(lán)色條紋是數(shù)據(jù),引腳4。
您仍然需要?4.7K-10K從數(shù)據(jù)到3.3V的電阻
DS18B20
盡管DS18B20看起來(lái)像普通的晶體管,但實(shí)際上內(nèi)部有很多東西。
該芯片包括特殊的1有線串行接口以及控制邏輯和溫度傳感器本身。
其輸出引腳發(fā)送數(shù)字消息,而Raspbian包括讀取這些消息的接口。一旦我們?cè)赗aspberry Pi上使用“ raspi-config”工具啟用了1-Wire,將在隨后的重啟中加載正確的內(nèi)核模塊。
啟用1-Wire
下載:文件
復(fù)制代碼
sudo raspi-config sudo raspi-config
選擇接口選項(xiàng)
選擇 1-Wire 》
選擇是是是
退出raspi-config并重新啟動(dòng)Pi,以便加載1-wire內(nèi)核模塊。
下載:文件
復(fù)制代碼
sudo reboot sudo reboot
驗(yàn)證是否在下次啟動(dòng)時(shí)加載了1-Wire內(nèi)核模塊。運(yùn)行 lsmod 命令時(shí),您應(yīng)該會(huì)看到類似下面的輸出。
下載:文件
復(fù)制代碼
lsmod | grep -i w1_ lsmod | grep -i w1_
軟件
Python程序處理任何失敗的消息,并每秒報(bào)告攝氏度和華氏溫度。
下載:Project Zip 或 thermometer.py | 在Github上查看
復(fù)制代碼
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)
接下來(lái)的三行,從中找到文件
下載:文件
復(fù)制代碼
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
讀取溫度是通過(guò)兩個(gè)函數(shù)進(jìn)行的,read_temp_raw只是從接口獲取消息的兩行。 read_temp函數(shù)會(huì)對(duì)此進(jìn)行總結(jié),以檢查是否有錯(cuò)誤消息,然后重試直到收到第一行末尾帶有“ YES”的消息。該函數(shù)返回兩個(gè)值,第一個(gè)為攝氏度,第二個(gè)為華氏。
如果希望將這兩個(gè)值分開(kāi),如下例所示:
下載:文件
復(fù)制代碼
deg_c, deg_f = read_temp() deg_c, deg_f = read_temp()
程序的主循環(huán)只是循環(huán),讀取溫度并打印,然后睡眠一秒鐘。
要將程序上傳到Raspberry Pi上,可以使用 SSH連接到Pi ,使用以下行啟動(dòng)編輯器窗口:
下載:文件
復(fù)制代碼
nano thermometer.py nano thermometer.py
,然后粘貼上面的代碼,然后使用CTRL-保存文件x和Y。
配置和測(cè)試
該程序必須以超級(jí)用戶身份運(yùn)行,因此在終端中鍵入以下命令以啟動(dòng)該程序:
下載:文件
復(fù)制代碼
sudo python thermometer.py sudo python thermometer.py
如果一切順利,您將看到一系列讀數(shù),如下所示:
嘗試將手指放在傳感器上進(jìn)行加熱。
添加更多傳感器
您可以并行添加其他DS18B20傳感器-將所有傳感器的VCC,數(shù)據(jù)和接地引腳連接在一起。使用一個(gè)4.7K電阻。您將看到多個(gè) /sys/bus/w1/ devices/28-nnnnn 目錄,每個(gè)目錄都有唯一的序列號(hào)作為目錄名。 python示例代碼現(xiàn)在僅適用于一個(gè)傳感器,因此如果您希望一次從不同的傳感器讀取它,則必須對(duì)其進(jìn)行修改
責(zé)任編輯:wv
-
DS18B20
+關(guān)注
關(guān)注
10文章
780瀏覽量
81020 -
樹(shù)莓派
+關(guān)注
關(guān)注
117文章
1710瀏覽量
105800
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論