人気記事

IoT IoT iPhone

AWS IoTとiPhoneアプリでMQTTを行う方法【動画付き】

投稿日:

iPhoneの位置管理をAWS上でできないかと調査していると、シンプルで軽量なメッセージをやり取りできるプロトコルであるMQTTで経度・緯度を取得するのが良いのではないかと思いました。

今回は経度・緯度の取得の前にiPhoneアプリとAWS IoTでMQTTを行うところまでを試してみました。

いくつかサンプルコードが見つかりましたが、比較的最近でもメンテがされていそうなCocoaMQTT https://github.com/emqx/CocoaMQTT をベースにしました。

スポンサーリンク

完成時の動画

環境

iPhone8 iOS:15.2

Xcode 13.2.1

AWS IoT

ソースコード

以下のGitHubに記載

https://github.com/S-S-T-Y/awsMATTsample

AWS側の設定

モノの作成

AWS IoTの「モノ」をiPhone-locationという名前で作成します。

証明書ダウンロード

証明書を作成してダウンロードします。

ポリシー設定

最初なので、Action、Resourceに制限をかけていないですが、動作確認ができたら必要な分だけに制限した方が良いかと思います。

p12ファイル作成

先ほどダウンロードした証明書、秘密鍵、ルート証明書からp12ファイルを作成します。

作成時のパスワードも後で使うので控えておきます。

openssl pkcs12 -export -clcerts -in XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX-certificate.pem.crt -inkey XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX-private.pem.key -certfile AmazonRootCA1.pem -out client-keycert.p12

エンドポイントの確認

設定のデバイスデータエンドポイントに表示されるエンドポイントを控えておきます。

iPhoneアプリ側の設定

AWS IoTのホスト

先ほど控えたエンドポイントを以下に設定します。

let defaultHost = "XXXXXXXXXXXXXXX-ats.iot.ap-northeast-1.amazonaws.com"

MQTTの設定

clientIDにはAWS IoTの「モノ」の名前とします。

今回はiPhone-locationとなります。

let clientID = "iPhone-location"

client-keycertのcertPasswordはp12ファイル作成時に設定したパスワードを入力します。

let clientCertArray = getClientCertFromP12File(certName: "client-keycert", certPassword: "password") //certPassword is your password when you created p12 file

Puslish

MQTT設定で指定したモノに対して、「iphone/topic」というトピック名でメッセージを発行します。

@IBAction func sendMessage(_ sender: Any) {
        print("send Message")
        let message = "{\"message\":\"hello world!\"}"
        let publishProperties = MqttPublishProperties()
        publishProperties.contentType = "JSON"
        
        mqtt!.publish("iphone/topic", withString: message, qos: .qos1)
    }

Subscribe

AWS IoTから「aws/iot」というトピック名で発行されたメッセージを購読します。

mqtt.subscribe("aws/iot", qos: CocoaMQTTQoS.qos1)

まとめ

iPhoneアプリとAWS IoTでMQTT通信を行うシンプルな方法を紹介しました。

シンプルとは言え、AWS側、iPhone側にそれなりの設定は必要でした。

ただ通信できるところまでできてしまえば後は送る情報を変えるだけで色々なことができそうです。

今後は当初の思惑だったiPhoneの位置をAWS上で管理することを試してみたいと思います。

参考サイト

AWS IoT https://docs.aws.amazon.com/ja_jp/iot/latest/developerguide/mqtt.html

CocoaMQTT  https://github.com/emqx/CocoaMQTT

MQTTの仕様 http://devcenter.magellanic-clouds.com/learning/mqtt-spec.html

参考文献

Amazon Web Services クラウドネイティブ・アプリケーション開発技法 一番大切な知識と技術が身につくhttps://amzn.to/3re442k

-IoT, IoT, iPhone
-, ,

Copyright© ITエンジニアへの転身 , 2022 All Rights Reserved Powered by STINGER.