Event

おまけ2. Webhook連携 – GoogleHomeからラズパイを動かす

おまけ2. Webhook連携 – GoogleHomeからラズパイを動かす

この記事はiOSDC2022で発表したセッション、Swiftで我が家を より便利に、安全に!の発表のおまけ記事第2弾です。
もしまだ本編を読んでいない方は読んでいただけると!

swift-home-iosdc2022
【iOSDC2022】Swiftで我が家を より便利に、安全に!この記事は、「Swiftで我が家をより便利に、安全に」の発表の内容をまとめた記事になります!...

この記事では、GoogleHomeからラズパイに接続したモーターを動かす方法を紹介します!

GoogleHomeからラズパイに繋いだモーターを動かす

今回の発表に向けて、色々電子工作用の道具やパーツを買ったのですが、モーターが余っていたので、せっかくなら、モーターにファンをつけて、扇風機として使えないかな?と思ったので、我が家にあるGoogleHomeから動かせるようにしてみました!

実装イメージは以下の図の通りです!
GoogleHomeをトリガーに、IFTTTを使って、SwiftHomeServerの扇風機起動用のAPIへPostします。
そしてそこから、ラズパイにWebSocketを使って、Postされたことを通知し、そこからラズパイに繋がったモーターを動かして、ファンを回します!

なお今回モーターとファンを台に固定するのに、iOSDCのノベルティの扇風機とケーブル用のバンド、いつも使ってるスマホスタンドを使いました!
ノベルティありがとうございます!!

IFTTTでは、以下のように、GoogleSpeech(GoogleHomeなどで話したことをトリガーにする)→SwiftHomeServerにPostするように設定しています!

SwiftHomeServerのコードは以下の通りで、扇風機ON、OFF以外のAPIをまとめて定義できるように、forEachでループして定義しています。
Postされたタイミングで、WebSocketにエンドポイントの文字列を送信するように実装しています。
ちなみにVaporを使った、APIの実装方法については、以下の記事で紹介しています!

2. Vaporを動かす- iPhoneとラズパイ間をVaporで通信 1この記事は、「Swiftで我が家をより便利に、安全に」の発表の2部「2. Vaporを動かす- iPhoneとラズパイ間をVaporで通信 」の内容の一部をまとめた記事になります!...
let endPointList: [EndPointKind] = [.fanOn, .fanOff, .doorOpenDetected]
endPointList.forEach { kind in
    protected.post(.constant(kind.endPoint)) { request async throws -> HTTPResponseStatus in
        try await eventNotificationSocket?.send(kind.endPoint)
        return .ok
    }
}

protected.webSocket(.constant(EndPointKind.eventNotification.webSocketEndPoint)) { request, ws in
    eventNotificationSocket = ws
    webSocketOnlineSocket?.send(WebSocketStatus.piOnline.rawValue)
    // (Omit)
}

最後にラズパイからモーターを起動する処理です。
単純にモーターを動かすだけなら、電気を流すor流さないを制御すればOKです!
市販の扇風機のように、風量(モーターの回転数)を制御したい場合は、もう少し凝った実装が必要になりますが、ここでは省略します(今後機会があれば、記事にしたいと思います)!
GPIOピンは任意のもので、大丈夫です!

let gpios = SwiftyGPIO.GPIOs(for: .RaspberryPi4)
let motorGpio = gpios[.P13]!
motorGpio.direction = .OUT

// Turn on motor
motorGpio.value = 1

// Turn off motor
motorGpio.value = 0

実際にこれでうまく動くと↓の動画のようになります!

まとめ

今回はGoogleHomeからラズパイに繋がったモーターを動かす方法を紹介しました!
元々IFTTTを使うことで、かなり色々なことができましたが、ここにラズパイも活用することで、さらに色々なことができるようになりました!

普段やっているiOS開発や、電子工作、スマートホーム化など、アイデア次第で色々なことができるようになるのは、やっていてとてもわくわくするので、楽しいです!!

(おまけ記事なので、少し書き方が雑になってしまいました。。笑)

+1

COMMENT

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

CAPTCHA