M5StickC Plus + 人感センサ(PIR)で作る、独り暮らしのための見守りデバイスです。
トイレなど「生活していれば必ず使う場所」にセンサを置き、一定時間(初期設定では24時間)動きが検出されなかったらスマホへ通知を送ります。コロナ禍の自粛生活で「孤独死」が頭をよぎった作者が、自分自身を見守るために作りました。
v2.0.0から、面倒な設定はすべてスマホで完結。 書き込んだら本体のQRコードを読み取るだけで、WiFi接続・場所の名前・通知時間・IFTTTキーをブラウザから設定できます。ソースコードの編集は一切不要です。
📖 プロジェクトの詳細・開発ストーリーは ProtoPedia の作品ページ をご覧ください。
M5StickC Plus に取り付けた PIR センサ(人感センサ)が動きを監視し、Wi-Fi 経由で IFTTT(無料の Web サービス連携ツール)にイベントを送信、IFTTT がスマホへ通知を届けます。
通知は2種類あります。
| 通知 | タイミング | 意味 |
|---|---|---|
| ⚠ 未検出通知 | 24時間(設定値)動きが無かったとき | 「もしかして倒れている…?」の警告。以降24時間ごとに繰り返し通知 |
| ✓ 生存確認通知 | 未検出通知のあと、再び動きを検出したとき | 「無事でした!」の安心通知 |
Tip
通知先を家族や友人のスマホ(メールや Discord の共有チャンネルなど)にしておくと、万一のときに気づいてもらえます。
| 品名 | 説明 | 参考 |
|---|---|---|
| M5StickC Plus | ESP32搭載の小型マイコン(画面・Wi-Fi内蔵) | M5Stack公式 / スイッチサイエンス等で購入可 |
| PIR Hat (U054) | M5StickC用の人感センサHat。本体上部に挿すだけ | 同上 |
| USB Type-C ケーブル | プログラム書き込みと給電用 | データ通信対応のもの |
| 2.4GHz帯の Wi-Fi 環境 | 通知送信用 | ※ESP32は5GHz帯に接続できません |
| スマホ + IFTTT アカウント | 通知の受信用 | 無料プランでOK |
Note
配線・ハンダ付けは不要です。 PIR Hat を M5StickC Plus 上部の HAT 用ソケット(8ピン)に挿し込むだけで完成します。
後継機の M5StickC Plus2 では使用ライブラリが異なるため、そのままでは動作しません(要改修)。
-
Arduino IDE(2.x推奨)をインストールします。
-
ファイル→基本設定を開き、「追加のボードマネージャのURL」に以下を追加します。https://static-cdn.m5stack.com/resource/arduino/package_m5stack_index.json -
ツール→ボード→ボードマネージャで 「M5Stack」 を検索してインストールします。 -
ツール→ボード→M5Stackから 「M5StickCPlus」 を選択します。
ツール → ライブラリを管理 から以下の2つを検索してインストールします。
| ライブラリ名 | 作者 | 用途 | 動作確認バージョン |
|---|---|---|---|
| M5StickCPlus | M5Stack | 本体制御 | 0.1.1 |
| efont Unicode Font Data | tanakamasayuki | 画面への日本語表示 | 1.0.9 |
Note
M5Stackボードパッケージ 3.3.7 + 上記ライブラリの組み合わせでコンパイルできることを確認済みです(2026年7月時点)。
ソースコードの編集は不要です。 そのまま書き込めます。
- このリポジトリをダウンロード(
Code→Download ZIP)またはgit cloneします。 - Arduino IDE で
PIR_AliveMonitoring.inoを開きます。 - M5StickC Plus を USB ケーブルで PC に接続し、
ツール→ポートで該当の COM ポート(Macでは/dev/cu.*)を選択します。 - 書き込みボタン(→)をクリックします。
- 書き込みが完了すると、本体の画面に QRコード付きの初期設定画面 が表示されます。
ここからはスマホだけで完結します。
- 本体画面の QRコードをスマホのカメラで読み取ります(本体のWiFiアクセスポイントに接続されます)。
- QRが読めない場合は、画面に表示されているSSID(
PIR-Monitor-xxxx)にパスワード12345678で手動接続してください。
- QRが読めない場合は、画面に表示されているSSID(
- 接続すると設定ページが自動で開きます(開かない場合はブラウザで
192.168.4.1を開いてください)。 - リストから自宅のWi-Fiを選び、パスワードを入力します。
- 画面の案内に従って本体URL(
http://pir-monitor-xxxx.local)をコピーしてから「🛜 接続設定を保存」を押します。本体が再起動して自宅のWi-Fiに接続します。 - スマホを自宅のWi-Fiに接続し直し、コピーした本体URLをブラウザで開くと、通知の設定ページが表示されます。
Tip
本体URLは 本体のボタンA(正面の M5 ボタン)を短押しするといつでもQRコードで表示できます。
通知の送り先を IFTTT で設定します。アプレット(自動化レシピ)を2つ作成します。無料プランで作成できる数はアプレット2個までなので、ちょうど収まります。
Important
かつて定番だった LINE Notify は2025年3月でサービス終了しました。通知先には IFTTT公式アプリのプッシュ通知(Notifications)、メール(Email)、Discord などを利用してください。
- IFTTT でアカウントを作成します(スマホに IFTTTアプリ も入れておくとプッシュ通知が受け取れて便利です)。
- Webhooks のページ を開き、
Documentationをクリックします。 - 表示される
Your key is: XXXXXXXXの キーをメモします。
-
IFTTT で
Createをクリックします。 -
If This →
Webhooks→Receive a web requestを選び、Event Name に半角で以下を入力します。AliveMonitoring -
Then That →
Notifications→Send a notification from the IFTTT appを選びます(通知先はメールやDiscordにも変更できます → 手順5-4)。 -
Message に通知文を設定します。
Value1には場所の名前、Value2には経過時間が入ります。⚠ {{Value1}}が{{Value2}}使用されていません。安否を確認してください。 -
Create action→Continue→Finishで完成です。
同じ手順でもう1つ作成します。Event Name は以下にします。
DetectEvent
Message の例:
✅ {{Value1}}で動きを検出しました(未検出だった時間: {{Value2}})
手順5-2/5-3の Then That を変えるだけで、通知先は自由に選べます。本体から送られる材料(Ingredient)は共通で、Message欄に Add ingredient ボタンから挿入できます。
| Ingredient | 内容 |
|---|---|
Value1 |
場所の名前(設定ページで入力したもの) |
Value2 |
経過時間(例:「1日と2時間」。再起動後に検知記録が無い場合は「不明(再起動後はじめての検知)」) |
OccurredAt |
イベントの発生日時(IFTTTが自動で付与) |
📱 IFTTTアプリのプッシュ通知(Notifications) — いちばん手軽
手順5-2/5-3に書いたとおりです。スマホに IFTTTアプリ を入れておくと、プッシュ通知で受け取れます。
✉️ メール(Email) — アプリ不要でどこでも届く
Then That → Email → Send me an email を選びます。
- アプレット①(AliveMonitoring)の例:
- Subject:
【見守り通知】{{Value1}}で動きがありません - Body:
⚠ {{Value1}}が{{Value2}}使用されていません。安否を確認してください。({{OccurredAt}})
- Subject:
- アプレット②(DetectEvent)の例:
- Subject:
【見守り通知】{{Value1}}で動きを検出 - Body:
✅ {{Value1}}で動きを検出しました(未検出だった時間: {{Value2}})
- Subject:
届くのはIFTTTアカウントのメールアドレス宛です。家族に届けたい場合は、そのアドレスからの自動転送を設定するのが簡単です。
💬 Discord(チャンネルに投稿) — 家族・友人と共有するのに最適
家族や友人と共有しているサーバーのチャンネルに投稿すれば、全員が状況を見られます。
-
Then That →
Discord→Post a message to a channelを選びます(初回はDiscordとの連携を求められるので、対象サーバーへの権限を許可します)。 -
Which Channel?で投稿先のサーバーとチャンネルを選びます。 -
Message に通知文を設定します。設定例(作者が実際に使っているもの):
アプレット①(AliveMonitoring):
【見守り通知】 最後に {{Value1}} のセンサーが動きを検知してから {{Value2}} が経過しました。 {{OccurredAt}}アプレット②(DetectEvent):
【見守り通知】 {{Value1}} のセンサーが動きを検知しました。 ※前回の検知: {{Value2}} 前 {{OccurredAt}} -
@everyoneなどのメンションで気づきやすくしたい場合は、Allowable mentionsをAll mentions allowedにして、Message に@everyoneを含めます。 -
Update action(新規作成時はCreate action)で保存します。
サーバーが選択肢に出てこない場合は、フォーム下の
reconnect the Discord serviceから連携をやり直してください。
💚 LINEに通知したい場合 — 直接連携は終了しています
LINE Notify と IFTTTのLINE連携は2025年3月で終了したため、現在IFTTTからLINEへ直接通知する方法はありません。LINEでの受け取りにこだわる場合は以下のような代替案があります。
- メール通知にして、LINEのメール転送や通知連携アプリで受け取る
- 家族にDiscordを入れてもらい、共有サーバーで受け取る(操作感はLINEに近く、無料です)
- 上級者向け: LINE Messaging API で自作Botを立てる(IFTTTを介さず本体から直接送る改造が必要)
- 本体の設定ページ(
http://pir-monitor-xxxx.local)を開きます。 - 「🔔 IFTTT設定」に手順5-1でメモしたキーを入力して保存します。
- 「📨 テスト通知を送信」を押して、設定した通知先(IFTTTアプリ・メール・Discordなど)に届けば設定完了です! 🎉
| 操作 | 動作 |
|---|---|
| ボタンA を短押し | 設定ページのQRコード/URLを表示(もう一度押すか60秒で戻る) |
| ボタンA を長押し | 1秒以上押し続けるとピッと音が鳴り、見守りの開始・停止が切り替わります(離すのを待たずに切り替わります) |
| ボタンB を5秒長押し | WiFi設定をリセットして初期設定モードに戻す |
- 「検出」表示はトイレの電気のように、最後の動きから60秒間続きます。 本体の赤色LEDはセンサの生の反応にリアルタイムで連動するので、設置場所の反応確認に使えます。
- 旅行や帰省で長期間家を空けるときは、見守りを停止(ボタンA長押し、または設定ページから)しておくと誤通知を防げます。
設置のコツ: トイレ・廊下・洗面所など「生活していれば1日1回は必ず動きが発生する場所」に置いてください。PIR センサの検出範囲は最大約5m・水平約100°です。USB 電源に繋ぎっぱなしでの常時運用を想定しています。
スマホと本体が同じWi-Fiにあれば、ブラウザで http://pir-monitor-xxxx.local(ボタンA短押しでQR表示)を開くだけで、いつでも設定を変更できます。
| 設定 | 説明 |
|---|---|
| 見守りの開始/停止 | ボタン操作の代わりにブラウザから切り替え |
| 📍 場所の名前 | 通知に含まれる場所の名前(日本語OK。初期値: トイレ) |
| ⏰ 通知までの時間 | 1〜72時間から選択(初期値: 24時間) |
| 🔔 IFTTTキー | Webhooksのキー(本体内に保存され、外部には送信されません) |
| イベント名(詳細設定) | IFTTTのイベント名を変更した場合のみ |
| 📨 テスト通知 | その場で通知を送って設定を確認 |
| 🔄 WiFi設定リセット | 引っ越しやWi-Fi変更時に初期設定からやり直す |
ステータス表示では「最終検出が何分前か」も確認できます。
日常の設定はすべて設定ページから変えられます。さらに細かい動作を変えたい場合は config.h の定数を編集してください。
| 定数 | 初期値 | 説明 |
|---|---|---|
DETECT_HOLD_SEC |
60 |
「検出」表示を保持する秒数 |
LONG_PRESS_MS |
800 |
ボタンA長押しの判定時間(ミリ秒) |
INFO_SCREEN_TIMEOUT_MS |
60000 |
QR画面から自動で戻るまでの時間 |
AP_PASS |
12345678 |
初期設定モードのAPパスワード |
DEFAULT_LIMIT_HOURS など |
- | 各設定の初期値 |
| 症状 | 確認すること |
|---|---|
| 初期設定のQRを読んでも設定ページが開かない | ブラウザで 192.168.4.1 を直接開く。スマホの「モバイルデータ通信を優先」設定が邪魔をする場合はOFFに |
pir-monitor-xxxx.local が開けない |
同じWi-Fiに接続しているか確認。開けない場合はボタンA短押しのQR画面に表示されるIPアドレスを直接開く(Androidの一部はmDNS非対応) |
| WiFi接続に失敗して初期設定モードに戻ってしまう | パスワードが正しいか。2.4GHz帯のSSIDか(5GHz帯は接続不可) |
| 通知が届かない | 設定ページのテスト通知で確認。IFTTTの Activity ページにログが出ているか。イベント名がIFTTT側と一致しているか |
時刻が ---- ---- ---- のまま |
Wi-Fiがインターネットに接続できているか(NTPで時刻取得しています) |
| ずっと「検出」のまま | PIRセンサは温度変化に敏感です。直射日光やエアコンの風が当たらない場所へ。なお表示は仕様として最後の動きから60秒間保持されます |
コンパイルエラー efont.h: No such file... |
ライブラリ「efont Unicode Font Data」がインストールされているか |
v1.x(config.h にWiFi情報を書き込む方式)から v2.0.0 に書き込み直した場合、設定方式が変わったため初期設定モードから再設定してください。手順はセットアップ手順4以降と同じです。
坪倉 輝明 (Teruaki Tsubokura)
- ProtoPedia: https://protopedia.net/prototype/2432
- Web: https://teruaki-tsubokura.com/
センサやアイデアを変えれば「ペットの見守り」「実家の親の見守り」などにも応用できます。ぜひ自由に改造してください!
