IoT・電子工作

Raspberry PiとPythonで作るスマートホームIoT:家電を自動制御してみよう

「スマートホームって、なんか高そう…専用機器を買わないといけないんじゃないの?」そんな風に思っていませんか?

実は、Raspberry PiPythonがあれば、市販のスマート家電を買わなくても、自分だけのスマートホーム環境を自作できちゃうんですよね。しかも思ったよりずっとシンプルに。

今回は、Raspberry PiとPythonを使って家電を自動制御するIoTプロジェクトを、ゼロから一緒に作っていきましょう! 🏠✨

この記事の対象読者と難易度

Raspberry Pi smart home
Raspberry Pi smart home / Photo by Alessandro Oliverio via Pexels
  • ✅ 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のサービス管理機能を使います。

ざっくりとした流れがつかめるはずです:

  1. /etc/systemd/system/smarthome.service というファイルを作成
  2. Pythonスクリプトのパスを記述
  3. sudo systemctl enable smarthome で自動起動を有効化
  4. sudo systemctl start smarthome で起動

これで、Raspberry Piを再起動しても自動的にスマートホームシステムが動き続けます。「むずかしそう」が「できそう」に変わってきましたよね 😊

まとめ


今回は、Raspberry PiとPythonを使ったスマートホームIoTの自作に挑戦しました。

  • 🔌 リレーモジュールでGPIOから家電を制御する基本
  • 🌡️ 温湿度センサーで「条件に応じた自動制御」を実現
  • ⏰ scheduleライブラリで「時間帯による自動化」を追加

センサーやリレーを組み合わせれば、アイデア次第でどんどん拡張できます。人感センサーで人が来たら照明ON、雨センサーで窓の開閉を通知する…など、あなただけのスマートホームを育てていけるのがDIY IoTの醍醐味ですよね。

まずはLEDや小型ファンで動作確認するところから、ぜひ試してみてください!一緒に学んでいきましょう 🚀

📡 Arduinoをもっと深く学ぼう!

Arduino・ラズパイ・ロボットプログラミングを体系的に学びたい方へ。おすすめのUdemyコースや電子部品もまとめています。

Arduinoロボット入門のおすすめコース・部品を見る →

📚 関連商品・おすすめ書籍

スッキリわかるPython入門 第2版 (スッキリわかる入門シリーズ)

もしも

スッキリわかるPython入門 第2版 (スッキリわかる入門シリーズ)

初心者に定番のPython入門書

Amazonで見る

Arduinoをはじめよう 第4版 (Make: PROJECTS)

もしも

Arduinoをはじめよう 第4版 (Make: PROJECTS)

Arduino公式推薦の定番入門書

Amazonで見る

徹底攻略! 電子工作&プログラミング Arduinoで学ぶ電子工作完全ガイド

もしも

徹底攻略! 電子工作&プログラミング Arduinoで学ぶ電子工作完全ガイド

電子工作とプログラミングを同時に学べる

Amazonで見る

※本記事にはアフィリエイトリンクが含まれます。

ABOUT ME
やまちゃん
これまで学生と社会人を合わせて5000人以上にプログラミング学習を指導。 ゼロからイチをわかりやすく解説する専門家として活動しており、本業ではArduinoを用いたIoT開発とロボットプログラミングが専門。 Pythonを用いたアプリ開発、ウェブアプリケーションの開発で業務の効率化をサポートしています。

COMMENT

メールアドレスが公開されることはありません。 が付いている欄は必須項目です