Featured image of post 使用樹莓派和Python讀取DS18B20感測器測量的溫度

使用樹莓派和Python讀取DS18B20感測器測量的溫度

在樹莓派項目中,我們經常需要使用感測器來獲取環境數據。其中,DS18B20 是一種常用的數位溫度感測器,可以通…

在樹莓派項目中,我們經常需要使用感測器來獲取環境數據。其中,DS18B20 是一種常用的數位溫度感測器,可以通過樹莓派上的 GPIO 接口讀取溫度值。本文將介紹如何連接 DS18B20 感測器,並使用 Python 編寫程式碼實現循環讀取溫度的功能。

首先,讓我們了解一下 DS18B20 感測器的基本原理。DS18B20 是一種數位溫度感測器,具有高精度和相對較大的測量範圍。它透過單總線介面與樹莓派進行通訊,並通過 GPIO 引腳提供電源和數據傳輸。

  1. 連接:

連接 DS18B20 感測器到樹莓派的步驟如下:

  1. 將 DS18B20 感測器的 VCC 引腳連接到樹莓派上的 3.3V 電源引腳。
  2. 將 DS18B20 感測器的 GND 引腳連接到樹莓派上的地(GND)引腳。
  3. 將 DS18B20 感測器的數據引腳連接到樹莓派上的 GPIO 引腳。我們建議使用 GPIO4 引腳。

以下是連接方式的示意圖:

1
2
3
4
5
6
7
8
DS18B20 模組 
+-------+
|       | 3.3V---->|VCC 
|       |           | 
| GPIO4 <--------|DATA 
|       |           | 
| Ground------->|GND 
+-------+
  1. 配置與手動讀取:

以下是通過 DS18B20 測溫模組來讀取溫度的基本步驟:

  1. 在樹莓派上啟用 DS18B20 支援:打開終端,在命令行中輸入以下命令,並確認已經開啟“w1-gpio”和“w1-therm”內核模組:
1
sudo nano /boot/config.txt

在文件末尾添加以下兩行:

1
2
dtoverlay=w1-gpio 
dtoverlay=w1-therm

保存並退出文件,然後重啟樹莓派使更改生效。

  1. 連接 DS18B20 模組:將 DS18B20 模組連接到樹莓派上的 GPIO 接口,具體連接方式請參考模組文檔或資料。
  2. 讀取溫度值:打開終端,在命令行中輸入以下命令,以讀取 DS18B20 模組的溫度值:
1
2
cd /sys/bus/w1/devices/ 
ls

此時,應該會輸出一串以“28-”開頭的目錄名稱,該名稱是 DS18B20 模組的唯一識別符號。將該名稱替換為以下命令中的「<device_id>」,以讀取溫度值:

1
cat /sys/bus/w1/devices/<device_id>/w1_slave

此命令將返回一個包含溫度值的文本字串,其中溫度值以“t=”開頭。將該字串中“t=”之後的數值除以 1000,即可得到以攝氏度為單位的溫度值。

請注意,由於 DS18B20 模組需要一定時間來進行精確的溫度測量,因此在讀取溫度值之前需等待一段時間(例如 1 秒鐘)以確保測量完成。此外,還應注意樹莓派和 DS18B20 模組的電氣連接,以確保正確讀取溫度值。

  1. Python 循環讀取:

確保連接正確後,我們可以使用 Python 編寫程式碼來讀取 DS18B20 感測器測量的溫度值。以下是範例程式碼:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
import time

# 定義 DS18B20 感測器的檔案路徑
sensor_file = '/sys/bus/w1/devices/28-<device_id>/w1_slave'  # 將 <device_id> 替換為實際的設備 ID

def read_temperature():
    try:
        # 打開感測器檔案
        with open(sensor_file, 'r') as file:
            lines = file.readlines()
            
            # 獲取溫度數值所在行
            temperature_line = lines[1]
            
            # 提取溫度數值
            temperature = float(temperature_line.split('=')[1]) / 1000.0
            
            return temperature
            
    except IOError as e:
        print("無法讀取溫度感測器:", str(e))
        return None

# 循環讀取溫度並列印
while True:
    temperature = read_temperature()
    if temperature is not None:
        print("當前溫度:", temperature, "℃")
    time.sleep(1)  # 延時 1 秒

需要將上述程式碼中的 <device_id> 替換為你實際的 DS18B20 感測器設備 ID。你可以通過執行 ls /sys/bus/w1/devices/ 命令來查找正確的設備 ID。

上述程式碼會不斷循環讀取溫度,並每秒鐘列印一次當前的溫度值。你可以根據需要進行修改和擴展,以適應你的具體應用場景。

使用樹莓派和 Python 讀取 DS18B20 感測器測量的溫度

通過以上步驟,我們可以輕鬆地使用樹莓派和 Python 讀取 DS18B20 感測器測量的溫度值。這為我們的專案提供了一個簡單而可靠的方法來獲取環境溫度數據。希望本文對你在使用樹莓派中讀取溫度感測器有所幫助!