0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

如何將溫度傳感器DS18B20與樹莓派連接

科技觀察員 ? 來源:circuitdigest ? 作者:阿斯文斯·拉吉 ? 2022-11-08 16:44 ? 次閱讀

樹莓派以其計(jì)算能力及其在物聯(lián)網(wǎng)、家庭自動(dòng)化等領(lǐng)域的廣泛應(yīng)用而聞名。然而,對于任何電子系統(tǒng)與現(xiàn)實(shí)世界進(jìn)行交互并獲取有關(guān)它的信息,系統(tǒng)必須使用傳感器。該過程使用多種類型的傳感器,并根據(jù)要測量的參數(shù)及其應(yīng)用選擇所需的傳感器。在本教程中,我們將學(xué)習(xí)將溫度傳感器DS18B20與樹莓派連接。

DS18B20是廣泛使用的溫度傳感器,主要用于化工、礦山等惡劣工作環(huán)境的場所。本文將介紹該傳感器以及它如何超越其他溫度傳感器,最后將其與Raspberry Pi連接并查看16x2 LCD上的溫度值。

所需材料

DS18B20 溫度傳感器

樹莓派

16*2液晶顯示屏

10k修剪鍋

10k 上拉電阻

面包板

連接線

DS18B20溫度傳感器簡介

DS18B20是一款三端子溫度傳感器,采用TO-92(晶體管型)封裝。它非常易于使用,只需要一個(gè)外部組件即可開始工作。此外,它只需要MCU / MPU的一個(gè)GPIO引腳即可與之通信。典型的DS18B20溫度傳感器及其引腳名稱如下所示。

poYBAGNqFvKAf8GVAABfI7UAdpo227.png

該傳感器也可作為防水版本提供,其中傳感器由圓柱形金屬管覆蓋。在本教程中,我們將使用上面顯示的普通晶體管型傳感器。DS18B20為1線可編程溫度傳感器,只需數(shù)據(jù)引腳即可將信息發(fā)送到微控制器微處理器板(如Raspberry Pi)。每個(gè)傳感器都有一個(gè)唯一的 64 位地址,因此也可以將多個(gè)傳感器連接到同一個(gè) MCU/MPU,因?yàn)槊總€(gè)傳感器可以在同一數(shù)據(jù)總線上單獨(dú)尋址。傳感器的規(guī)格如下所示。

工作電壓:3-5V

測量范圍:-55°C 至 +125°C

精度:±0.5°C

分辨率:9 位至 12 位

現(xiàn)在我們對傳感器有了足夠的了解,讓我們統(tǒng)計(jì)它與樹莓派的接口。

先決條件

假設(shè)您的樹莓派已經(jīng)使用操作系統(tǒng)刷新并能夠連接到互聯(lián)網(wǎng)。如果沒有,請先按照樹莓派入門教程進(jìn)行操作,然后再繼續(xù)。這里我們使用Rasbian Jessie安裝的Raspberry Pi 3。

還假設(shè)您可以通過終端窗口或其他應(yīng)用程序訪問您的 pi,通過這些應(yīng)用程序您可以編寫和執(zhí)行 python 程序并使用終端窗口。

電路圖

正如我們在本教程前面所說,我們將DS18B20傳感器與Pi連接,并在16*2 LCD屏幕上顯示溫度值。因此,傳感器和LCD應(yīng)與樹莓派連接,如下所示。

pYYBAGNqFvWAObK3AADmW2C4_iM007.png

按照電路圖進(jìn)行相應(yīng)的連接。LCD和DS18B20傳感器均在+5V的幫助下工作,+5V由樹莓派上的5V引腳提供。LCD使用Raspberry Pi在4位模式下工作,GPIO引腳18,23,24和25用于數(shù)據(jù)線,GPIO引腳7和8用于控制線。電位計(jì)也用于控制LCD的對比度水平。DS18B20的數(shù)據(jù)線連接到GPIO引腳4。另請注意,必須使用10K電阻器拉動(dòng)電路圖中所示的高電平數(shù)據(jù)。

您可以按照上面的電路圖進(jìn)行連接,也可以使用引腳表跟進(jìn) GPIO 引腳編號(hào)。

poYBAGNqFviAFzXmAACdZFT2UWU031.png

我使用單股線和公對母線在面包板上構(gòu)建電路以進(jìn)行連接。如您所見,傳感器只需要一根電線即可連接,因此占用的空間和引腳更少。建立所有連接后,我的硬件如下所示?,F(xiàn)在是時(shí)候啟動(dòng) pi 并開始編程了。

pYYBAGNqFvqACjiuAACrk0YQhHc554.jpg

在樹莓P上安裝Adafruit LCD庫

溫度值將顯示在 16*2 LCD 顯示屏上。Adafruit 為我們提供了一個(gè)庫,可以在 4 位模式下輕松操作此 LCD,因此讓我們通過打開終端窗口 Pi 并按照以下步驟將其添加到我們的樹莓派中。

第 1 步:使用以下行在樹莓派上安裝 git。Git允許您克隆 Github 上的任何項(xiàng)目文件,并在 Raspberry pi 上使用它。我們的庫在 Github 上,所以我們必須安裝 git 才能將該庫下載到 pi 中。

apt-get install git

第 2 步:以下行鏈接到存在庫的 GitHub 頁面,只需執(zhí)行該行即可克隆 Pi 主目錄上的項(xiàng)目文件

git clone git://github.com/adafruit/Adafruit_Python_CharLCD

第 3 步:使用以下命令更改目錄行,進(jìn)入我們剛剛下載的項(xiàng)目文件。命令行如下

cd Adafruit_Python_CharLCD

第 4 步:目錄中會(huì)有一個(gè)名為 setup.py 的文件,我們必須安裝它,以安裝庫。使用以下代碼安裝庫

sudo python setup.py install

也就是說,庫應(yīng)該已成功安裝?,F(xiàn)在同樣,讓我們繼續(xù)安裝同樣來自Adafruit的DHT庫。

在 Pi 中啟用單線接口

由于DS18B20傳感器通過單線方式通信,因此必須按照以下步驟在Pi上啟用單線通信。

第 1 步:-打開命令提示符并使用以下命令打開配置文件

sudo nano /boot/config.txt

第 2 步:-在配置文件中添加行“dtoverlay=w1-gpio”(在下圖中包圍)并保存文件,如下所示

pYYBAGNqFvyAaEAdAABwlZmAr8Q413.png

第 3 步:-使用 Ctrl+X 退出文件并通過按“Y”保存它,然后按 Enter 鍵。最后使用命令重新啟動(dòng) Pi

sudo reboot

第 4 步:-重新啟動(dòng)后,再次打開終端并輸入以下命令。

sudo modprobe w1–gpio sudo modprobe w1-therm. cd /sys/bus/w1/devices ls

您的終端窗口將顯示如下內(nèi)容

poYBAGNqFv2ANivQAAAxrncnN8s872.png

第 5 步:-在步驟 4 結(jié)束時(shí),當(dāng)您輸入 ls 時(shí),您的 pi 將顯示一個(gè)唯一的數(shù)字,該數(shù)字對于每個(gè)用戶來說都是不同的,具體取決于傳感器,但始終以 28- 開頭。就我而言,號(hào)碼是28-03172337caff。

第 6 步:-現(xiàn)在我們可以通過輸入以下命令來檢查傳感器是否正常工作

cd 28-XXXXXXXXXXXX [use the name of your directory or use Tab key for auto complete)

cat w1_slave

這兩個(gè)命令將從傳感器讀取數(shù)據(jù)并將其顯示在終端上,如下所示。下圖中的溫度值用紅色包圍。在我的情況下,溫度值為37 * C。

poYBAGNqFv-Afz1AAAA_IO27ybM322.png

為 DS18B20 傳感器編程樹莓派

現(xiàn)在,我們的Pi已準(zhǔn)備好針對LCD進(jìn)行編程并使用單線協(xié)議。因此,我們可以編寫最終程序,從DS18B20傳感器讀取溫度值并將其顯示在LCD屏幕上。本頁末尾給出了執(zhí)行相同操作的完整 python 程序。但是,下面我將代碼分成有意義的小片段來解釋它們。

與往常一樣,我們通過導(dǎo)入程序所需的頭文件來開始程序。這里我們導(dǎo)入時(shí)間處理延時(shí)功能,LCD接頭使用LCD與Pi。操作系統(tǒng)標(biāo)頭用于處理操作系統(tǒng)中的文件。

import time #import time for creating delay

import Adafruit_CharLCD as LCD #Import LCD library

import os #Import for file handling

import glob #Import for global

接下來我們必須提到連接到樹莓派引腳的LCD引腳。使用上面提供的 GPIO 引腳圖了解各個(gè) GPIO 引腳的引腳號(hào)。一旦我們聲明了LCD連接到哪些PI引腳,我們就可以指定行數(shù)和列數(shù),最后使用以下代碼行對其進(jìn)行初始化。

lcd_rs = 7 #RS of LCD is connected to GPIO 7 on PI

lcd_en = 8 #EN of LCD is connected to GPIO 8 on PI

lcd_d4 = 25 #D4 of LCD is connected to GPIO 25 on PI

lcd_d5 = 24 #D5 of LCD is connected to GPIO 24 on PI

lcd_d6 = 23 #D6 of LCD is connected to GPIO 23 on PI

lcd_d7 = 18 #D7 of LCD is connected to GPIO 18 on PI

lcd_backlight = 0 #LED is not connected so we assign to 0

lcd_columns = 16 #for 16*2 LCD

lcd_rows = 2 #for 16*2 LCD

lcd = LCD.Adafruit_CharLCD(lcd_rs, lcd_en, lcd_d4, lcd_d5, lcd_d6, lcd_d7,

lcd_columns, lcd_rows, lcd_backlight) #Send all the pin details to library

初始化LCD后,我們在LCD上打印示例文本消息。字符“n”用于提及換行符。顯示介紹后,我們引入了 2 秒的延遲,供用戶閱讀介紹消息。

lcd.message('DS18B20 with Pi n -CircuitDigest') #Give a intro message

time.sleep(2) #wait for 2 secs

現(xiàn)在,如果您能回憶起使用 Pi 啟用單線接口的步驟 4。我們必須重復(fù)相同的代碼行,因此我們使用 os.system 函數(shù)來執(zhí)行相同的行。然后我們指定必須從中讀取溫度值的文件位置。device_folder變量指向以“28-”開頭的文件夾,因?yàn)槲覀儾恢牢募A的確切名稱,我們使用 * 符號(hào)打開以 28 開頭的任何內(nèi)容。最后,在該文件夾中,我們使用另一個(gè)名為device_file的變量,該變量實(shí)際上指向內(nèi)部具有溫度值的文件。

然后我們使用名為 get_temp 的函數(shù),在其中我們定義從我們在上述步驟中剛剛鏈接的文件中讀取溫度的過程。正如我們之前與終端檢查的那樣,該文件內(nèi)部將包含溫度值,但它將采用以下格式

pYYBAGNqFwCAM372AAAmXGMvzqE517.png

由此我們只需要 37000 的值,即溫度值。這里的實(shí)際溫度值是37.00*C。因此,從這種文本格式中,我們必須修剪所有無用的數(shù)據(jù)并得到整數(shù)值 37000,最后將其除以 1000以獲得實(shí)際數(shù)據(jù)。下面顯示的函數(shù)完全相同

def get_temp(): #Fundtion to read the value of Temperature

file = open(device_file, 'r') #opent the file

lines = file.readlines() #read the lines in the file

file.close() #close the file

trimmed_data = lines[1].find('t=') #find the "t=" in the line

if trimmed_data != -1:

temp_string = lines[1][trimmed_data+2:] #trim the strig only to the temoerature value

temp_c = float(temp_string) / 1000.0 #divide the value of 1000 to get actual value

return temp_c #return the value to print on LCD

變量行用于讀取文件內(nèi)的行。然后比較這些行,搜索字母“t=”,并將該字母后面的值保存在變量temp_string中。最后,為了獲得溫度值,我們使用變量temp_c將字符串值除以 1000。最后返回函數(shù)的結(jié)果temp_c變量。

在無限 while 循環(huán)中,我們只需要調(diào)用上面定義的函數(shù)即可獲取溫度值并將其顯示在 LCD 屏幕上。我們還每 1 秒清除一次 LCD 以顯示更新的值。

while 1: #Infinite Loop

lcd.clear() #Clear the LCD screen

lcd.message ('Temp = %.1f C' % get_temp()) # Display the value of temperature

time.sleep(1) #Wait for 1 sec then update the values

輸出/工作

與往常一樣,完整的python代碼在頁面末尾給出,請使用代碼并在Raspberry Pi上編譯它。按照電路圖中所示進(jìn)行連接,在執(zhí)行程序之前,請確保已按照上述步驟安裝LCD頭文件并在pi上啟用單線通信。完成后,只需執(zhí)行程序,如果一切按預(yù)期工作,您應(yīng)該能夠注意到介紹文本。如果沒有,請調(diào)整對比度電位器,直到看到一些東西。最終結(jié)果如下所示。

poYBAGNqFwKAdP5rAACoK93UO3E476.jpg

#Program to read the values of Temp from the DS18B20 sensor and display them on the LCD


import time #import time for creating delay

import Adafruit_CharLCD as LCD #Import LCD library

import os #Import for file handling

import glob #Import for global





lcd_rs = 7 #RS of LCD is connected to GPIO 7 on PI

lcd_en = 8 #EN of LCD is connected to GPIO 8 on PI

lcd_d4 = 25 #D4 of LCD is connected to GPIO 25 on PI

lcd_d5 = 24 #D5 of LCD is connected to GPIO 24 on PI

lcd_d6 = 23 #D6 of LCD is connected to GPIO 23 on PI

lcd_d7 = 18 #D7 of LCD is connected to GPIO 18 on PI

lcd_backlight = 0 #LED is not connected so we assign to 0



lcd_columns = 16 #for 16*2 LCD

lcd_rows = 2 #for 16*2 LCD



lcd = LCD.Adafruit_CharLCD(lcd_rs, lcd_en, lcd_d4, lcd_d5, lcd_d6, lcd_d7,

lcd_columns, lcd_rows, lcd_backlight) #Send all the pin details to library



lcd.message('DS18B20 with Pi n -CircuitDigest') #Give a intro message



time.sleep(2) #wait for 2 secs





os.system('modprobe w1-gpio')

os.system('modprobe w1-therm')



base_dir = '/sys/bus/w1/devices/'

device_folder = glob.glob(base_dir + '28*')[0]

device_file = device_folder + '/w1_slave'





def get_temp(): #Fundtion to read the value of Temperature

file = open(device_file, 'r') #opent the file

lines = file.readlines() #read the lines in the file

file.close() #close the file



trimmed_data = lines[1].find('t=') #find the "t=" in the line



if trimmed_data != -1:

temp_string = lines[1][trimmed_data+2:] #trim the strig only to the temoerature value

temp_c = float(temp_string) / 1000.0 #divide the value of 1000 to get actual value

return temp_c #return the value to prnt on LCD







while 1: #Infinite Loop



lcd.clear() #Clear the LCD screen

lcd.message ('Temp = %.1f C' % get_temp()) # Display the value of temperature



time.sleep(1) #Wait for 1 sec then update the values


聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • 溫度傳感器
    +關(guān)注

    關(guān)注

    48

    文章

    2854

    瀏覽量

    155315
  • DS18B20
    +關(guān)注

    關(guān)注

    10

    文章

    774

    瀏覽量

    80482
  • 樹莓派
    +關(guān)注

    關(guān)注

    116

    文章

    1679

    瀏覽量

    105252
收藏 人收藏

    評論

    相關(guān)推薦

    基于STM32的DS18B20溫度傳感器設(shè)計(jì)

    DS18B20內(nèi)置了64位產(chǎn)品序列號(hào),方便識(shí)別身份,在一根線上可以掛接多個(gè)DS18B20傳感器,通過64位身份驗(yàn)證,可以分別讀取來至不同傳感器采集的
    的頭像 發(fā)表于 03-07 11:44 ?1.3w次閱讀
    基于STM32的<b class='flag-5'>DS18B20</b><b class='flag-5'>溫度</b><b class='flag-5'>傳感器</b>設(shè)計(jì)

    DS18B20 數(shù)字溫度計(jì)特點(diǎn)

    一.DS18B20特點(diǎn) DS18B20 數(shù)字溫度計(jì)提供12位(二進(jìn)制)溫度讀數(shù)的數(shù)字型傳感器。傳感器
    的頭像 發(fā)表于 09-11 11:19 ?2339次閱讀
    <b class='flag-5'>DS18B20</b> 數(shù)字<b class='flag-5'>溫度</b>計(jì)特點(diǎn)

    樹莓Pico上使用DS18B20溫度傳感器

    DS18B20 溫度傳感采用單總線的接口方式,與微處理連接時(shí)僅需要一條口線即可實(shí)現(xiàn)微處理
    的頭像 發(fā)表于 11-21 14:21 ?1103次閱讀
    <b class='flag-5'>樹莓</b><b class='flag-5'>派</b>Pico上使用<b class='flag-5'>DS18B20</b><b class='flag-5'>溫度</b><b class='flag-5'>傳感器</b>

    DS18B20溫度傳感器是什么

    DALLAS最新單線數(shù)字溫度傳感器DS18B20簡介新的“一線器件”體積更小、適用電壓更寬、更經(jīng)濟(jì) Dallas 半導(dǎo)體公司的數(shù)字化溫度傳感器
    發(fā)表于 04-27 08:14

    DS18B20溫度傳感器實(shí)驗(yàn)

    STM32學(xué)習(xí)記錄:DS18B20溫度傳感器實(shí)驗(yàn)(HAL庫)實(shí)驗(yàn)摘要DS18B20簡述STMCubeMX引腳配置芯片選型引腳和時(shí)鐘配置生成ARM-MDK工程編寫
    發(fā)表于 08-18 07:44

    DS18B20溫度傳感器與MCU是如何連接

    DS18B20是什么?DS18B20溫度傳感器的技術(shù)特性有哪些?DS18B20溫度
    發(fā)表于 09-27 09:10

    數(shù)字溫度傳感器DS18B20的設(shè)計(jì)及應(yīng)用

    數(shù)字溫度傳感器DS18B20的設(shè)計(jì)及應(yīng)用 1引言 DS18B20是DALLAS公司生產(chǎn)的一線式數(shù)字溫度
    發(fā)表于 04-02 18:00 ?2716次閱讀
    數(shù)字<b class='flag-5'>溫度</b><b class='flag-5'>傳感器</b><b class='flag-5'>DS18B20</b>的設(shè)計(jì)及應(yīng)用

    DS18B20完成溫度檢測的技巧

    介紹了DS18B20 溫度傳感器 的結(jié)構(gòu)和特點(diǎn)以及用DS18B20溫度傳感器進(jìn)行
    發(fā)表于 08-23 10:44 ?189次下載
    <b class='flag-5'>DS18B20</b>完成<b class='flag-5'>溫度</b>檢測的技巧

    DS18B20 測溫模塊_溫度傳感器模塊

    ds18b20溫度傳感器資料 測試程序 連接圖 要的過來
    發(fā)表于 12-08 11:06 ?16次下載

    溫度傳感器DS18B20

    溫度傳感器DS18B20 51例程,親測可用
    發(fā)表于 06-14 15:36 ?20次下載

    智能溫度傳感器DS18B20的原理與應(yīng)用

    DS18B20是DALLAS公司生產(chǎn)的單線數(shù)字溫度傳感器,他具有獨(dú)特的單線總線接口方式。文章詳細(xì)的介紹了單線數(shù)字溫度傳感器
    發(fā)表于 10-11 18:19 ?48次下載

    關(guān)于DS18B20溫度傳感器的原理及使用介紹說明(1)

    DS18B20溫度傳感器的原理和使用
    的頭像 發(fā)表于 07-10 03:00 ?2.1w次閱讀

    ds18b20的特性_ds18b20溫度傳感器應(yīng)用

    本文首先介紹了ds18b20的特性,其次介紹了DS18B20工作原理,最后介紹了ds18b20溫度傳感器應(yīng)用。
    發(fā)表于 04-24 09:10 ?1.1w次閱讀
    <b class='flag-5'>ds18b20</b>的特性_<b class='flag-5'>ds18b20</b><b class='flag-5'>溫度</b><b class='flag-5'>傳感器</b>應(yīng)用

    如何將DS18B20數(shù)字溫度傳感器與Arduino結(jié)合使用

    電子發(fā)燒友網(wǎng)站提供《如何將DS18B20數(shù)字溫度傳感器與Arduino結(jié)合使用.zip》資料免費(fèi)下載
    發(fā)表于 02-07 15:05 ?1次下載
    <b class='flag-5'>如何將</b><b class='flag-5'>DS18B20</b>數(shù)字<b class='flag-5'>溫度</b><b class='flag-5'>傳感器</b>與Arduino結(jié)合使用

    ds18b20溫度傳感器如何使用

    DS18B20是一款廣泛使用的數(shù)字溫度傳感器,它具有高精度、低功耗和易于使用的特點(diǎn)。 DS18B20溫度
    的頭像 發(fā)表于 09-03 16:51 ?269次閱讀