「Raspberry PiでIoTって、なんか難しそう…センサーの配線とかよくわからないし…」
\n\n
そんなふうに感じている方、多いんじゃないでしょうか。
\n\n
でも実は、温湿度センサー+Raspberry Pi+Pythonの組み合わせは、IoT入門として最高の題材なんです。センサーは1個だけ、配線はたった3本、Pythonコードも50行以内で動きます。「むずかしそう」を「できそう」に変えていきましょう! 🎉
\n\n
この記事では、部品の準備からPythonコードの実装、さらにブラウザでデータを確認するところまで、ゼロから一気に解決できるよう丁寧に解説します。
\n\n
📋 この記事で作るもの・対象読者
\n\n
完成イメージ:部屋に置いたRaspberry Piが室温・湿度をリアルタイムで取得し、ターミナルとWebブラウザの両方で確認できるIoT温湿度モニター
\n\n
対象読者:
\n
- \n
- ✅ Raspberry Piを持っているけど、センサーを使ったことがない方
- ✅ Pythonの基本(変数・ループ・関数)はなんとなくわかる方
- ✅ 電子工作は初めてだけど挑戦してみたい方
\n
\n
\n
\n\n
難易度:⭐⭐☆☆☆(初級〜中級)
\n\n
🛒 必要な部品・環境
\n\n
まず揃えるものを確認しておきましょう。
\n\n
| 部品名 | 用途 | 目安価格 |
|---|---|---|
| Raspberry Pi 4 または 3B+ | メインコンピュータ | (お持ちのもの) |
| DHT11センサー | 温度・湿度の計測 | 約200〜300円 |
| ジャンパーワイヤ(メス-メス) | センサーとPiの接続 | 約200円〜 |
| ブレッドボード(あると便利) | 配線の整理 | 約300円〜 |
\n\n
DHT11はAmazonや秋月電子で手軽に入手できます。DHT22でも同じコードがほぼそのまま使えるので、精度を重視したい方はDHT22がおすすめですよ。
\n\n
🔌 STEP 1:配線をしよう
\n\n
配線はたった3本です。イメージとしては「センサーに電気を送りながらデータを受け取る」だけです。
\n\n
DHT11には3〜4本のピンがあります。モジュール基板タイプの場合はこの通りに接続してください。
\n\n
- \n
- VCC(電源) → Raspberry PiのGPIO 1番ピン(3.3V)
- GND(グランド) → Raspberry PiのGPIO 6番ピン(GND)
- DATA(信号) → Raspberry PiのGPIO 4番ピン(BCM方式では4番)
\n
\n
\n
\n\n
⚠️ 配線を間違えるとセンサーが壊れることもあります。Raspberry Piの電源を切った状態で配線作業を行いましょう。
\n\n
🐍 STEP 2:Pythonライブラリをインストール
\n\n
Raspberry PiのターミナルでSSH接続またはデスクトップ画面を開いて、以下を実行します。
\n\n
# システムパッケージを最新にしておく\nsudo apt update && sudo apt upgrade -y\n\n# Pythonパッケージ管理ツールの確認\npip3 --version\n\n# DHT11/22用ライブラリのインストール\npip3 install adafruit-circuitpython-dht\nsudo apt install libgpiod2 -y
\n\n
インストールが終わったら、エラーが出ていないか確認しておきましょう。Successfully installedと表示されればOKです ✅
\n\n
🌡️ STEP 3:温湿度を取得するPythonコードを書こう
\n\n
まずはシンプルに、センサーの値をターミナルに表示するコードから始めます。
\n\n
# dht_monitor.py\nimport adafruit_dht\nimport board\nimport time\n\n# DHT11センサーをGPIO4ピンに接続\ndht_sensor = adafruit_dht.DHT11(board.D4)\n\nprint(\"温湿度モニター起動中... Ctrl+Cで終了\")\n\nwhile True:\n try:\n # 温度と湿度を取得\n temperature = dht_sensor.temperature # 摂氏(℃)\n humidity = dht_sensor.humidity # 相対湿度(%)\n\n print(f\"🌡️ 温度: {temperature:.1f}℃ 💧 湿度: {humidity:.1f}%\")\n\n except RuntimeError as e:\n # DHT系センサーは読み取り失敗が起きやすいので無視してリトライ\n print(f\"読み取りエラー(リトライします): {e}\")\n\n time.sleep(2) # 2秒ごとに計測
\n\n
ポイントをまとめるとこんな感じです:
\n
- \n
- 📌
adafruit_dht.DHT11(board.D4)でGPIO4番ピンのセンサーを指定 - 📌
RuntimeErrorはDHTセンサー特有の読み取り失敗。catchして無視するのが定石です - 📌
time.sleep(2)で2秒間隔。DHT11は最低2秒間隔が推奨されています
\n
\n
\n
\n\n
実行はこちら:
\n\n
python3 dht_monitor.py
\n\n
ターミナルに温度と湿度が流れ始めたら成功です 🎉
\n\n
🌐 STEP 4:Webブラウザで確認できるようにしよう
\n\n
ターミナルだけだと少し味気ないですよね。せっかくIoTを作るなら、スマホやPCのブラウザから確認できると一気に「それっぽく」なります。
\n\n
PythonのFlaskを使って、シンプルなWebサーバーを立ち上げましょう。
\n\n
# web_dht_monitor.py\nfrom flask import Flask, jsonify, render_template_string\nimport adafruit_dht\nimport board\n\napp = Flask(__name__)\ndht_sensor = adafruit_dht.DHT11(board.D4)\n\n# シンプルなHTML(テンプレートを別ファイルにしなくてもOK)\nHTML = \"\"\"\n\n\n\n \n \n IoT温湿度モニター \n
\n\n
\n
\n
🌡️ 室内環境モニター
\n
温度
--
℃
\n
湿度
--
%
\n \n
\n \n\n\n\"\"\"\n\n@app.route('/')\ndef index():\n return render_template_string(HTML)\n\n@app.route('/api/sensor')\ndef sensor_api():\n \"\"\"JSONでセンサーデータを返すAPI\"\"\"\n try:\n temp = dht_sensor.temperature\n hum = dht_sensor.humidity\n return jsonify({\"temperature\": round(temp, 1), \"humidity\": round(hum, 1)})\n except RuntimeError:\n return jsonify({\"temperature\": None, \"humidity\": None, \"error\": \

