「IoTって面白そうだけど、電子工作は難しそう…」そんな印象を持っている方、多いんじゃないでしょうか。
でも実は、Raspberry PiとPython、そして安価なDHT11センサーがあれば、自宅の温度・湿度をリアルタイムで取得するIoTシステムが作れてしまいます。しかも、思っているよりずっとシンプルです。
この記事では、配線の組み方からPythonコードの書き方まで、ゼロから一緒に進めていきましょう!🎉
📋 この記事の対象読者・難易度

- ✅ Raspberry Piを触ったことがある、またはこれから触る方
- ✅ Pythonの基礎(変数・関数)が少しわかる方
- ✅ 電子工作は初めてだけど挑戦してみたい方
- 🔰 難易度:初〜中級者向け
🛒 用意するもの
まず必要なものをざっとまとめます。どれも入手しやすいものばかりです。
- Raspberry Pi(3B以降推奨。今回はRaspberry Pi 4で解説)
- DHT11温湿度センサー(Amazonで数百円〜)
- ブレッドボード
- ジャンパワイヤー(オス-メス)数本
- 10kΩの抵抗(1本)
DHT11はコスパ最強のセンサーです。精度はそこまで高くないですが、入門用としては文句なし。まずは「動かす体験」を積むことが大事ですよね。
🔌 配線のやり方

イメージとしては、センサーの3本の足をRaspberry Piに繋ぐだけです。DHT11には通常4つのピンがありますが、モジュール基板タイプ(3ピン)もあります。ここでは3ピンのモジュールタイプを使う前提で説明します。
配線対応表
| DHT11ピン | Raspberry Pi GPIOピン |
|---|---|
| VCC(電源) | 3.3V(1番ピン) |
| DATA(信号) | GPIO4(7番ピン) |
| GND(グランド) | GND(9番ピン) |
⚠️ 4ピンタイプの場合はDATAとGNDの間に10kΩのプルアップ抵抗を挟む必要があります。モジュールタイプならすでに基板上に抵抗が乗っているので不要です。
配線が終わったら、一度接続をしっかり確認しておきましょう。ここでミスがあると後でハマりやすいので要注意です。
🐍 Pythonライブラリのインストール
次にRaspberry Pi上でライブラリをインストールします。DHT11の制御には Adafruitの「adafruit-circuitpython-dht」ライブラリを使います。
# まずシステムを最新にしておく
sudo apt update && sudo apt upgrade -y
# libgpiod2をインストール(DHT系ライブラリに必要)
sudo apt install libgpiod2 -y
# pipでAdafruitのDHTライブラリをインストール
pip3 install adafruit-circuitpython-dht
インストールが完了したら、ターミナルで pip3 show adafruit-circuitpython-dht と打ってバージョンが表示されればOKです。確認のクセをつけておくと後々トラブルが減りますよ 😊
💻 Pythonコードを書いてみよう
STEP 1:基本の温湿度取得コード
まずはシンプルに、温度と湿度を取得して表示するだけのコードです。
import time
import board
import adafruit_dht
# DHT11センサーをGPIO4に接続
sensor = adafruit_dht.DHT11(board.D4)
while True:
try:
# 温度と湿度を取得
temperature = sensor.temperature # 摂氏(℃)
humidity = sensor.humidity # 湿度(%)
print(f"温度: {temperature:.1f}℃ / 湿度: {humidity:.1f}%")
except RuntimeError as e:
# DHT11は読み取りに失敗することがある(正常な動作)
print(f"読み取りエラー(再試行します): {e}")
time.sleep(2) # 2秒ごとに計測(DHT11の最小間隔)
ポイントをまとめるとこんな感じです👇
- board.D4 はGPIO4を指しています。配線を変えた場合はここも変更してください
- RuntimeError はよく発生します。DHT11の仕様上、読み取り失敗はほぼ必ず起きるので、try-exceptで受け止めるのが定石です
- time.sleep(2) は最低2秒必要。これより短くするとエラーが増えます
STEP 2:CSVにデータを記録する(ログ機能つき)
せっかくデータを取るなら保存もしたいですよね。少し改良して、CSVファイルにログを残せるようにしましょう。
import time
import board
import adafruit_dht
import csv
from datetime import datetime
sensor = adafruit_dht.DHT11(board.D4)
# CSVファイルにヘッダーを書き込む
with open("temperature_log.csv", "w", newline="") as f:
writer = csv.writer(f)
writer.writerow(["日時", "温度(℃)", "湿度(%)"])
print("📊 温湿度ロギング開始!(Ctrl+Cで終了)")
while True:
try:
temperature = sensor.temperature
humidity = sensor.humidity
now = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
print(f"[{now}] 温度: {temperature:.1f}℃ / 湿度: {humidity:.1f}%")
# CSVに追記
with open("temperature_log.csv", "a", newline="") as f:
writer = csv.writer(f)
writer.writerow([now, temperature, humidity])
except RuntimeError as e:
print(f"読み取りエラー(スキップ): {e}")
time.sleep(10) # 10秒ごとに記録
ここが重要です⚠️
- ファイルオープンを “a”(追記モード) にしているので、スクリプトを再起動しても過去のデータが消えません
- datetime.now() でタイムスタンプを自動付与しています
- 10秒間隔にしているのは、長時間ロギングしてもファイルサイズが膨らみすぎないようにするためです
このCSVファイルはExcelやPandasで開いてグラフにできます。一気にIoTっぽさが出てきますよね 📈
🚀 次のステップ:Webブラウザで見られるようにする
ここまでできたら、次はFlaskを使って簡易Webサーバーを立て、スマホやPCのブラウザからリアルタイムで確認するというのが自然な発展形です。
ざっくりとした流れをつかんでおくとこんな感じです:
- Raspberry PiにFlaskをインストール(
pip3 install flask) - センサーデータをJSON形式で返すAPIエンドポイントを作る
- HTMLページからJavaScriptで定期取得して表示する
この先の実装は別記事で詳しく解説する予定です。楽しみにしていてください😊
🛠 よくあるトラブルと対処法
「RuntimeError: DHT sensor not detected」が止まらない
- 配線を確認する(VCC・DATA・GNDのピン番号)
- センサーが壊れていないか、別のGPIOピンで試してみる
time.sleep(2)が入っているか確認する
「ModuleNotFoundError: No module named ‘board’」が出る
pip3 install adafruit-blinkaを実行してみてください- 仮想環境(venv)を使っている場合は、その環境内でインストールされているか確認を
まとめ
今回はRaspberry PiとPythonを使って、DHT11センサーから温湿度データを取得し、CSVに記録するところまでを一緒にやってみました。
「むずかしそう」と思っていたIoT電子工作も、ひとつひとつのステップは意外とシンプルですよね。配線→ライブラリ→コード、この順番で進めれば誰でもできます。
ぜひ手元で動かしてみてください!うまく動いたら、次はWebダッシュボード化に挑戦してみるのがおすすめです 🌡️
引き続き、一緒に学んでいきましょう!


