「スマートホームって、なんか高そう…専用機器を買わないといけないんじゃないの?」そんな風に思っていませんか?
実は、Raspberry PiとPythonがあれば、市販のスマート家電を買わなくても、自分だけのスマートホーム環境を自作できちゃうんですよね。しかも思ったよりずっとシンプルに。
今回は、Raspberry PiとPythonを使って家電を自動制御するIoTプロジェクトを、ゼロから一緒に作っていきましょう! 🏠✨
この記事の対象読者と難易度

- ✅ Raspberry Piを触ったことがある、または興味がある方
- ✅ Pythonの基礎(変数・関数・if文)はなんとなくわかる方
- ✅ 電子工作は初〜中級レベルの方
「PythonもRaspberry Piも完全初心者!」という方には少し難しいかもしれませんが、コード例とポイント解説をたっぷり用意したので、ぜひチャレンジしてみてください。
全体の仕組みをざっくり把握しよう
まず、今回作るシステムの全体像をイメージしてみましょう。
イメージとしては、こんな感じです👇
【センサー】→【Raspberry Pi(Python)】→【リレーモジュール】→【家電(照明・扇風機など)】
ポイントをまとめるとこんな感じです:
- 🌡️ センサー(温度・明るさ・人感など)で状況を検知
- 🧠 Raspberry Pi上のPythonスクリプトが判断ロジックを実行
- ⚡ リレーモジュール(スイッチ役)を介して家電のON/OFFを制御
リレーモジュールとは、電子回路からの小さな信号で、家庭用の100V電源をON/OFFできるスイッチのことです。Raspberry PiのGPIOピン(General Purpose Input/Output:汎用入出力端子)から制御できます。
必要な材料を確認しておきましょう
- Raspberry Pi(3B+ / 4 どちらでもOK)
- リレーモジュール(1チャンネルまたは4チャンネル)
- DHT11またはDHT22(温湿度センサー)
- ジャンパーワイヤー(数本)
- ブレッドボード
- 制御したい家電(テーブルランプや扇風機など)
⚠️ 注意: リレーモジュールで100V家電を制御する場合は、感電リスクがあります。配線は必ず電源を抜いた状態で行い、絶縁処理も忘れずに。不安な方はLEDランプなど低電圧の機器で練習するのがおすすめです。
STEP 1:Pythonライブラリのインストール
まず、Raspberry Pi上で必要なライブラリをインストールしましょう。ターミナルを開いて以下を実行します。
# GPIOを操作するライブラリ
pip install RPi.GPIO
# DHT温湿度センサー用ライブラリ
pip install adafruit-circuitpython-dht
# スケジュール実行用ライブラリ(時間帯制御に使います)
pip install schedule
インストールが完了したら、import RPi.GPIOがエラーなく通るか確認しておきましょう。
STEP 2:リレーでLED(家電の代わり)をON/OFFしてみる
まずはシンプルなところから。GPIOピンからリレーを制御する基本コードを見てみましょう。
import RPi.GPIO as GPIO
import time
# GPIOのピン番号指定方式を設定
GPIO.setmode(GPIO.BCM)
# リレーを接続するGPIOピン番号
RELAY_PIN = 17
# ピンを出力モードに設定
GPIO.setup(RELAY_PIN, GPIO.OUT)
try:
print("家電をONにします...")
GPIO.output(RELAY_PIN, GPIO.LOW) # LOWでリレーON(モジュールによる)
time.sleep(5) # 5秒間ON
print("家電をOFFにします...")
GPIO.output(RELAY_PIN, GPIO.HIGH) # HIGHでリレーOFF
time.sleep(2)
finally:
# 終了時は必ずGPIOをリセット
GPIO.cleanup()
print("GPIO解放完了")
ここが重要です:
- 🔌 GPIO.LOW / GPIO.HIGH の「どちらがONか」はリレーモジュールによって異なります。購入したモジュールの仕様を確認してみてください
- 🛡️ finally句にGPIO.cleanup() を書くのは鉄則。スクリプトが異常終了してもGPIOをきちんと解放できます
- ⏱️
time.sleep()で制御タイミングを調整しています
STEP 3:温度センサーで「暑ければ扇風機を自動ON」にする
いよいよ本番。温湿度センサー(DHT11)で部屋の温度を取得して、一定温度を超えたら扇風機を自動でONにするスクリプトを作ってみましょう。これが、スマートホームの「自動制御」の核心部分です 🌬️
import RPi.GPIO as GPIO
import adafruit_dht
import board
import time
# ピン設定
RELAY_PIN = 17 # リレーのGPIOピン番号
TEMP_THRESHOLD = 28.0 # 扇風機をONにする温度のしきい値(℃)
# DHT11センサーをGPIO4番ピンに接続
dht_sensor = adafruit_dht.DHT11(board.D4)
GPIO.setmode(GPIO.BCM)
GPIO.setup(RELAY_PIN, GPIO.OUT)
GPIO.output(RELAY_PIN, GPIO.HIGH) # 初期状態はOFF
print("スマートホームIoT 温度監視スタート!")
print(f"設定温度: {TEMP_THRESHOLD}℃ を超えたら扇風機ON")
try:
while True:
try:
# 温度・湿度を取得
temperature = dht_sensor.temperature
humidity = dht_sensor.humidity
print(f"現在の温度: {temperature:.1f}℃ / 湿度: {humidity:.1f}%")
# しきい値を超えたらリレーON(扇風機を動かす)
if temperature >= TEMP_THRESHOLD:
GPIO.output(RELAY_PIN, GPIO.LOW) # リレーON
print("⚡ 扇風機:ON")
else:
GPIO.output(RELAY_PIN, GPIO.HIGH) # リレーOFF
print("💤 扇風機:OFF")
except RuntimeError as e:
# センサーの読み取りエラーは無視して次のループへ
print(f"センサーエラー(リトライします): {e}")
time.sleep(10) # 10秒おきに計測
finally:
dht_sensor.exit()
GPIO.cleanup()
print("終了しました")
ポイントをまとめるとこんな感じです:
- 🌡️ TEMP_THRESHOLD の値を変えるだけで、動作温度を自由にカスタマイズできます
- 🔄 while True で10秒ごとに繰り返し計測しているので、常時監視が可能です
- ⚠️ DHT系センサーはたまに読み取りに失敗します。RuntimeErrorをキャッチして無視するのが定番の書き方です
これ、実際に動かしてみると「あ、ちゃんと扇風機が回った!」という感動がありますよ 😄
STEP 4:時間帯で照明を自動ON/OFFにする(応用)
もう一歩進めて、scheduleライブラリを使って「夜6時に照明を自動でON、深夜12時に自動でOFF」という設定もできます。
import RPi.GPIO as GPIO
import schedule
import time
LIGHT_PIN = 27 # 照明リレーのGPIOピン番号
GPIO.setmode(GPIO.BCM)
GPIO.setup(LIGHT_PIN, GPIO.OUT)
GPIO.output(LIGHT_PIN, GPIO.HIGH) # 初期OFF
def light_on():
GPIO.output(LIGHT_PIN, GPIO.LOW)
print("💡 照明をONにしました")
def light_off():
GPIO.output(LIGHT_PIN, GPIO.HIGH)
print("🌙 照明をOFFにしました")
# スケジュール設定
schedule.every().day.at("18:00").do(light_on) # 毎日18時にON
schedule.every().day.at("00:00").do(light_off) # 毎日0時にOFF
print("照明スケジュール制御 スタート!")
try:
while True:
schedule.run_pending() # スケジュールをチェック
time.sleep(30) # 30秒ごとにチェック
finally:
GPIO.cleanup()
scheduleライブラリを使うと、日時指定の自動化がとても直感的に書けますよね。「毎日〇時に〇〇する」という処理を、まるで日本語のように記述できるのが気持ちいいです。
systemdで常時起動させよう(仕上げ)
スクリプトができたら、Raspberry Piの電源を入れたら自動的に実行される設定をしておきましょう。systemdというLinuxのサービス管理機能を使います。
ざっくりとした流れがつかめるはずです:
/etc/systemd/system/smarthome.serviceというファイルを作成- Pythonスクリプトのパスを記述
sudo systemctl enable smarthomeで自動起動を有効化sudo systemctl start smarthomeで起動
これで、Raspberry Piを再起動しても自動的にスマートホームシステムが動き続けます。「むずかしそう」が「できそう」に変わってきましたよね 😊
まとめ
今回は、Raspberry PiとPythonを使ったスマートホームIoTの自作に挑戦しました。
- 🔌 リレーモジュールでGPIOから家電を制御する基本
- 🌡️ 温湿度センサーで「条件に応じた自動制御」を実現
- ⏰ scheduleライブラリで「時間帯による自動化」を追加
センサーやリレーを組み合わせれば、アイデア次第でどんどん拡張できます。人感センサーで人が来たら照明ON、雨センサーで窓の開閉を通知する…など、あなただけのスマートホームを育てていけるのがDIY IoTの醍醐味ですよね。
まずはLEDや小型ファンで動作確認するところから、ぜひ試してみてください!一緒に学んでいきましょう 🚀
📡 Arduinoをもっと深く学ぼう!
Arduino・ラズパイ・ロボットプログラミングを体系的に学びたい方へ。おすすめのUdemyコースや電子部品もまとめています。





