logo
Published on

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

Authors
  • avatar
    Name
    Shou Kawakami / 川上翔
    Twitter

はじめに

Raspberry Piは豊富なGPIOピンを備え、様々なセンサーやモジュールを接続して利用することができます。この記事では、温度および湿度センサーである「SHT21」をRaspberry Piに接続し、制御する手順について説明します。

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

1. SHT21センサーの概要

SHT21はI2C通信を介して温度と湿度を計測するデジタルセンサーです。非常に精度が高く、Raspberry Piなどのシングルボードコンピューターで利用されることが一般的です。

2. SHT21の接続

まず、SHT21をRaspberry Piに接続します。通常、SHT21にはVCC、GND、SCL、SDAの4本のピンがあります。

  • VCC: 3.3Vの電源
  • GND: 接地
  • SCL: I2Cクロック線
  • SDA: I2Cデータ線

これらを対応するRaspberry Piのピンに接続します。Raspberry Piの場合、3.3Vの電源とI2Cピンは通常以下のようになります。

  • 3.3V: Pin 1
  • GND: Pin 6
  • SCL: GPIO3 (Pin 5)
  • SDA: GPIO2 (Pin 3)

3. Pythonコードの作成

次に、Raspberry Pi上でPythonを使ってSHT21を制御するコードを書きます。smbusというライブラリを使用してI2C通信を行います。

import smbus
import time

# SHT21のI2Cアドレス
SHT21_I2C_ADDR = 0x40

# SHT21コマンド
TEMP_HOLD_CMD = 0xE3
HUM_HOLD_CMD = 0xE5

# I2Cバスの初期化
bus = smbus.SMBus(1)

def read_temperature():
    # 温度を取得
    raw_temperature = bus.read_i2c_block_data(SHT21_I2C_ADDR, TEMP_HOLD_CMD, 2)
    temperature = ((raw_temperature[0] << 8) + raw_temperature[1]) & 0xFFFC
    celsius = -46.85 + (175.72 * temperature / 65536.0)
    return celsius

def read_humidity():
    # 湿度を取得
    raw_humidity = bus.read_i2c_block_data(SHT21_I2C_ADDR, HUM_HOLD_CMD, 2)
    humidity = ((raw_humidity[0] << 8) + raw_humidity[1]) & 0xFFFC
    humidity_percent = -6.0 + (125.0 * humidity / 65536.0)
    return humidity_percent

while True:
    temperature = read_temperature()
    humidity = read_humidity()

    print(f'Temperature: {temperature:.2f} °C, Humidity: {humidity:.2f} %')

    time.sleep(2)  # 2秒待つ

このコードは、SHT21から温度と湿度を読み取り、それをRaspberry Piのコンソールに表示するものです。

4. コードの実行と確認

最後に、Pythonコードを実行してSHT21からのデータが正しく読み取られるか確認します。コードが正常に動作すれば、Raspberry Pi上でSHT21を制御する基本的な手順が完了します。

これで、Raspberry PiにSHT21を接続し、Pythonを使用して温度と湿度を取得する準備が整いました。制御の拡張や他のプロジェクトへの組み込みなど、さまざまな可能性が開かれます。