スマホアプリだけでMQTTを試してみる

# はじめに
この記事では

・MQTTについての簡単な説明
・スマホアプリを使ったMQTT通信テスト

をまとめています。

また、MQTTを使うと下の記事のようにして遊べたりアイデア次第でいろんなものが作れます。
↓自分でMQTTを使ってインターネット経由で動くラジコンカーをつくってみました。
[ArduinoとラズパイでMQTTラジコンカー](https://qiita.com/RoPoPo710/items/7edab385333ed74584ce)



# MQTT通信とは（自分の解釈）



>・ネットワークでデータをやり取りする上で他と比べると軽量な通信方式。

>・Publisher（データの送信者）とSubscriber（データの受信者）とBroker（中継役）という3つシンプルなの役職のつながりでデータのやり取りができる。

>・通信するためにtopicと呼ばれる合言葉のようなものを設定する。PublisherとSubscriberが同じtopic（合言葉）を設定していれば、messageと呼ばれるデータをPublisherからSubscriberに送信することができる。



# スマホアプリでMQTT通信する

初めに目標設定をします。
目標はMQTT通信で"おいしい"という文字データを送ることとします。
その方法と手順を説明していきます。


まず、MQTT通信をするためにはPublisher（データの送信者）、Subscriber（データの受信者）、Broker（通信の中継役）の3つを準備する必要があります。

この3つを今回は無料のスマホアプリを使って再現します。

GooglePlayやAppStoreで"MQTT"と検索するといくつかMQTT通信に関するアプリが出てきますが、今回は次に紹介する2つのアプリを使います。

１つはPublish（送信）とSubscribe（受信）を行うことができるアプリで、もう一つはBroker（中継役）を立てることができるアプリです。

手元にAndoroidスマホしかないので今回はGooglePlayにあるアプリを使って紹介します。

AppStoreには同じアプリがないかもしれませんが、同じような機能を持ったアプリがあるので似たような方法で利用できるかと思います。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/823157/95393417-352d-502b-8f64-85074fd056d9.png" width=30%><img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/823157/7c8dab2c-10f9-60a8-3878-5b98dcbd9f75.png" width=30%>
## Brokerの準備
先にBrokerのアプリを開きます。
開くと下の画面がでてきます。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/823157/39119bda-576d-6b05-bb49-3e7b2eead2e9.jpeg" width=30%>
そして青色の"START BROKER"というボタンを押すと下の画像の白枠で囲ってる部分にアドレスが出てきます。
これがブローカーのアドレスになるので記録します。( ..)φメモメモ
これでブローカーの準備は完了です。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/823157/8a35bfe7-46f3-3288-26f3-1bcb6de5d899.jpeg" width=30%>
## PublisherとSubscriberの準備
もう片方のアプリでPublisherとSubscriberの設定を行います。
こちらのアプリではPublishとSubscribeの両方を行うことができるので、両方の設定を行います。
アプリを起動すると下のような画面が出てきます。
矢印の辺りをタップするとメニュー画面が開きます。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/823157/e19d86f9-318c-707c-7355-ad65874ef8a3.jpeg" width=30%>
メニュー画面が開いたら一番下の"Settings"を押して設定画面を開きます。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/823157/e8375e55-7b1c-08cc-1608-ed6e06e49077.jpeg" width=30%>
一番上にある"Broker URL"の部分に先ほどメモしたアドレスを入力します。
入力が完了したら下の"Save"を押して設定を保存します。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/823157/c2e27169-4b05-e74b-8b06-758b9b4ed1b7.jpeg" width=30%>
入力が完了したら元のメニュー画面にもどって"Subscribe"を押します。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/823157/8bdeb8d5-7949-8f40-41a4-93d0f0abcfdf.jpeg" width=30%>
Subscribeを押すとこのような画面が出てきます。
ここでSubscriber側のtopic（合言葉）を設定します。今回は1129（イイニク）と入れてみました。
topicを入力したら"Add"を押して保存します。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/823157/8393a181-1e74-af95-5b55-0c3db75e4c2d.jpeg" width=30%>　<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/823157/3529c42c-8b0d-f8b9-ffff-ed456f7f5833.jpeg" width=30%>
これでこのアプリで"1129"というtopic（合言葉）のメッセージSubscribeすることができるようになりました。
次に元のメニュー画面に戻って"Publish"を押します。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/823157/36697c5a-e8b5-3ee1-350a-eb8f09ed17b9.jpeg" width=30%>
Publihを押すと下のような画面が出てきます。
ここでPublisherのtopic（合言葉）とmessage（送りたいデータ）を入力します。
今回はtopicには先ほどSubscriberで設定したものと同じ"1129"を入力。messageには"おいしい"と入れまました。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/823157/bb2a5406-3a15-6c3f-da0d-c4bfe8bcf248.jpeg" width=30%>　<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/823157/3c35c570-3c2a-97a1-132a-571ed43f4080.jpeg" width=30%>
## 通信テスト
これですべての準備が完了しました。

上の画像にある"Publish"というボタンを押すとメッセージがPublishされます。
最後にメッセージが届いているか確認するためにメニューの一番上にある"Dashboard"を開きます。メッセージをSubscribeできていればここにメッセージが表示されます。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/823157/8ebbb44b-af14-2f07-7f66-df6faa5ffc68.jpeg" width=30%>
開いてみると、
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/823157/32ca5dc8-d1c9-9325-f08f-24085ef7e4f7.jpeg" width=30%>
topicが"1129"でmessageが"おいしい"と届きました。
通信テストはこれで成功です。
わかりにくかったかもしれませんが、このようにしてmqtt通信を行うことができます。


以上がスマートフォンアプリを使ったmqtt通信の紹介でした。
参考になれば幸いです。



# 参考

https://amg-solution.jp/blog/15787

https://www.ibm.com/developerworks/jp/iot/library/iot-mqtt-why-good-for-iot/index.html