logo
Published on

Raspberry Piに「DS18B20」を接続し制御する

Authors
  • avatar
    Name
    Shou Kawakami / 川上翔
    Twitter

はじめに

Raspberry Piは小型で強力なシングルボードコンピューターであり、様々なセンサーやデバイスを制御するのに適しています。この記事では、温度センサー「DS18B20」をRaspberry Piに接続し、Pythonを使用して制御する方法について解説します。

※モジュールの価格を比較 ▶ TemuAliExpress楽天メルカリ

1. DS18B20温度センサーの概要

DS18B20は、デジタル温度センサーであり、1本のデータ線を介して温度情報を提供します。このセンサーは防水型もあり、室内外の温度測定に広く利用されています。

2. DS18B20の接続

DS18B20をRaspberry Piに接続するには、以下の手順を実行します。

  • DS18B20の接続:
    • VCC(赤色): Raspberry Piの3.3Vピン
    • GND(黒色): Raspberry PiのGNDピン
    • データ線(黄色または白色): Raspberry PiのGPIOピン(通常はGPIO4)

3. Raspberry Piの設定

Raspberry Pi上でDS18B20を利用するには、まず以下の手順で1-Wireインターフェースを有効にします。

  1. Raspberry Piを起動し、sudo raspi-configを実行します。
  2. "Interfacing Options"を選択し、1-Wireを有効にします。
  3. リブートします。

4. Pythonコードの作成

次に、Pythonスクリプトを作成してDS18B20を制御します。以下は、温度を読み取り、コンソールに表示する簡単な例です。

import os
import glob
import time

# DS18B20のセンサーIDを指定
sensor_id = "28-xxxx"  # 実際のIDはls /sys/bus/w1/devices/で確認

# 温度センサーのディレクトリ
base_dir = "/sys/bus/w1/devices/"
device_folder = glob.glob(base_dir + sensor_id)[0]
device_file = device_folder + "/w1_slave"

def read_temp_raw():
    with open(device_file, "r") as f:
        lines = f.readlines()
    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
        return temp_c

# 温度を表示
while True:
    print("温度: {} °C".format(read_temp()))
    time.sleep(1)

5. コードの実行と確認

コードを保存し、実行します。ターミナルに温度が表示されれば、DS18B20が正常に動作しています。

これで、Raspberry PiにDS18B20を接続し、Pythonを使用して温度を読み取り、制御する方法についての基本的な手順が完了しました。これをベースにして、データの保存や他のセンサーとの組み合わせなど、さまざまなプロジェクトを展開することができます。