Skip to content

lp6m/InterphoneIoT

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Interphone IoT Project

インターホンを非破壊でIoT化する

実装している機能

  • 解錠制御(MQTT受信):
    • Subscribe: interphone/cmd
    • コマンド
      • open: 即時解錠(サーボ 70° → 0°)
      • open_if_detected: 次回の呼び出し音検知時に自動解錠し、実行後はNORMALに戻る
      • ping: 疎通確認。受信時にログへ応答をPublish
  • 通知/ログ(MQTT送信):
    • Publish: interphone/log
    • 送信する主なイベント: 起動・接続・検知・解錠・PING応答
  • 呼び出し音の検知仕様:
    • センサー: G36 に接続したKY-038のアナログ入力
    • 判定: 128サンプルのピークtoピーク値で判定
    • しきい値: 立ち上がり > 200 を約50ms継続で検知/< 100 が500ms継続で解除
  • デバイス操作:
    • 本体ボタンBtnAで手動解錠
  • 画面表示(LVGL):
    • マイクレベル(値とバー)、接続状態(WiFi/MQTT/OK)、最終コマンドと時刻、モード、検知中インジケータ
  • 接続:
    • AWS IoT Core へ TLS(8883) で接続
    • UDPパケットによる手動解錠・インターフォン検知情報の送信
  • UDPローカル制御:
    • 送信: 検知時にdetected192.168.1.255:4210へブロードキャスト
    • 受信: 192.168.1.255:4210(ブロードキャスト/ユニキャスト問わず)を受信し、open/open_if_detected/pingをMQTTと同様に処理
    • ポート: 4210m5stick_prj/src/main.cppUDP_PORT

HW構成

マイクモジュールからマイク素子を延長して、インターホンに近づける。3.3V駆動のためアナログ出力の値が非常に小さいが、近くで音が鳴らないと閾値を超えないのでOKとする。

クラウド連携構成

  • POST経由で外部からinterphone/cmdトピックにコマンドをPublish
  • M5StickCPlusはinterphone/cmdトピックをSubscribeし、コマンドに応じて処理を実行(解錠・モード変更など)
  • M5StickCPlusはinterphone/logトピックにログをPublish

ファイル

  • docs/: 写真・図面などのドキュメント
  • lambda/: クラウド連携用のAWS Lambdaコード
  • m5stick_prj/: M5StickC Plus向け PlatformIO プロジェクト
  • m5stick_ui/: SquareLine Studio プロジェクト(UI定義)
  • stl/: 3Dプリント用STL(筐体/ホルダー)

構築方法

HW

  • KY-038のマイク素子は半田こてで外して、延長してインターフォンのマイクにテープで留める。
  • KY-038のアナログ出力をM5StickのG36に。GNDと3.3Vも接続する。
  • サーボモーターはAdafruit Driver, HUB経由でGroveコネクタに接続。
  • Adafruit Driverには外部電源を適当に用意(5V3AのACアダプタを使用)
  • ホルダーを3Dプリントして各パーツをねじ止め、ホルダーは壁に画鋲で留める。

SW・クラウド

証明書作成時のポリシーは以下の通り。

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "iot:Connect",
      "Resource": "arn:aws:iot:<YOUR_AWS_REGION>:<YOUR_AWS_ACCOUNT_ID>:client/interphone"
    },
    {
      "Effect": "Allow",
      "Action": "iot:Subscribe",
      "Resource": "arn:aws:iot:<YOUR_AWS_REGION>:<YOUR_AWS_ACCOUNT_ID>:topicfilter/interphone/cmd"
    },
    {
      "Effect": "Allow",
      "Action": "iot:Receive",
      "Resource": "arn:aws:iot:<YOUR_AWS_REGION>:<YOUR_AWS_ACCOUNT_ID>:topic/interphone/cmd"
    },
    {
      "Effect": "Allow",
      "Action": "iot:Publish",
      "Resource": "arn:aws:iot:<YOUR_AWS_REGION>:<YOUR_AWS_ACCOUNT_ID>:topic/interphone/log"
    }
  ]
}
  • m5stick_prj/src/secrets.hにWiFI接続情報、証明書情報を入力
  • PlatformIOでビルド、M5Stickに書き込み。
  • M5StickAのボタンを押すと解錠側のサーボモータが動く
  • AWS Lambdaを作成

lambda/send_cmd.pyのような内容で作成する。IOT_DATA_ENDPOINTの部分は自分のエンドポイントに書き換える。
Lambdaの実行ロールに以下のポリシーをアタッチする。

{
	"Version": "2012-10-17",
	"Statement": [
		{
			"Effect": "Allow",
			"Action": "iot:Connect",
			"Resource": "arn:aws:iot:<YOUR_AWS_REGION>:<YOUR_AWS_ACCOUNT_ID>:client/interphone"
		},
		{
			"Effect": "Allow",
			"Action": "iot:Publish",
			"Resource": "arn:aws:iot:<YOUR_AWS_REGION>:<YOUR_AWS_ACCOUNT_ID>:topic/interphone/cmd"
		}
	]
}

Lambdaをデプロイし、関数URLを有効化する。

  • 作成した関数URLを使用して、外部からLambda経由で解錠コマンドが送れることを確認。
curl -X POST \
  -H "Content-Type: application/json" \
  -d '{"message": "OPEN"}' \
  "https://XXXXXXXXXX.lambda-url.XXXXX.on.aws/"

TODO

  • Lambdaをセキュアにする
  • M5Stick側のコード整理
  • ログを適切に貯めてどこかで表示する
  • 通話側のサーボを使用していないので、自動応答などを作る
  • いい感じのフロントエンドで外から自動解錠受け付けるなど
  • I2Cの余ったところに気温センサつける
  • 家の鍵にもモーターつける

About

インターホンを非破壊でIoT化する

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published