denshikobo’s blog

PICプログラミングやPCの操作で感じた日々の由無し事を綴ります

JAVAでMQTTを試してみた

esp8266_MQTTで冷や汗をかきました。でも、なんとかクリア出来たので最後の関門『JAVAからMQTT接続』を試すことにしました。

 

参考にしたのはこちら(↓)の二つです。

JavaでMQTT入門 ローカル環境でPubSubの動作を検証してみる - Qiita

dotnsf.blog.jp

JAVAのソース・コードはこちら(↓)を使いました。

        リンク==> gist.github.com

必要なorg.eclipse.paho.client.mqttv3ライブラリはこちら(↓)から持ってきました。

https://repo.eclipse.org/content/repositories/paho-releases/org/eclipse/paho/org.eclipse.paho.client.mqttv3/1.2.0/org.eclipse.paho.client.mqttv3-1.2.0.jar

 

ソース・コードには、以下の修正(2カ所)が必要でした。

@Override
public void messageArrived(String topic, MqttMessage message) throws Exception {
// throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
System.out.println("-------------------------------------------------");
System.out.println("| Topic:" + topic);
System.out.println("| Message: " + new String(message.getPayload()));
System.out.println("-------------------------------------------------");
}

// @Override
// public void messageArrived(MqttTopic topic, MqttMessage message) throws Exception {
// System.out.println("-------------------------------------------------");
// System.out.println("| Topic:" + topic.getName());
// System.out.println("| Message: " + new String(message.getPayload()));
// System.out.println("-------------------------------------------------");
// }

@Override
public void deliveryComplete(IMqttDeliveryToken token) {
try {
// throw new UnsupportedOperationException("Not supported yet.");
System.out.println("Pub complete" + new String(token.getMessage().getPayload()));
//To change body of generated methods, choose Tools | Templates.
} catch (MqttException ex) {
Logger.getLogger(MQTT_Client2.class.getName()).log(Level.SEVERE, null, ex);
}
}

// @Override
// public void deliveryComplete(MqttDeliveryToken token) {
// //System.out.println("Pub complete" + new String(token.getMessage().getPayload()));
// }

 

環境に合わせて以下のように指定しました。

static final String BROKER_URL = "tcp://localhost:1883";
static final String M2MIO_DOMAIN = "1ST CATEGORY";
static final String M2MIO_STUFF = "2ND CATEGORY";
static final String M2MIO_THING = "ID";
static final String M2MIO_USERNAME = "username";
static final String M2MIO_PASSWORD_MD5 = "password";

 

この設定に従って以下のようにtopicが設定されます。

String myTopic = M2MIO_DOMAIN + "/" + M2MIO_STUFF + "/" + M2MIO_THING;

サンプル・プログラムをNetbeansで走らせるとこんな出力になりました。

 

Connected to tcp://localhost:1883
Pub complete{"pubmsg":1}
-------------------------------------------------
| Topic:1ST CATEGORY/2ND CATEGORY/ID
| Message: {"pubmsg":1}
-------------------------------------------------
Pub complete{"pubmsg":2}
-------------------------------------------------
| Topic:1ST CATEGORY/2ND CATEGORY/ID
| Message: {"pubmsg":2}
-------------------------------------------------
Pub complete{"pubmsg":3}
-------------------------------------------------
| Topic:1ST CATEGORY/2ND CATEGORY/ID
| Message: {"pubmsg":3}
-------------------------------------------------
Pub complete{"pubmsg":4}
-------------------------------------------------
| Topic:1ST CATEGORY/2ND CATEGORY/ID
| Message: {"pubmsg":4}

-------------------------------------------------

publishとsubscribeのtopicを変え、google cromeのMQTT LENSアプリを使ってRetain設定による動作の違いも確かめることが出来ました。

 

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

実は、昨日走らせたときはpublishする度にdisconnectしていました。

(最初はそういう仕様なのだと思った)

何故、今日は動作が違うのか?原因は不明です。

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

色々トラブルも有りましたが、ESP-WROOM-02を介してPic-coloコンソールとPic-coloデバッガを接続するための準備は何とか整ったようです。

 

次は、これ(↓)の半田付けだ!

akizukidenshi.com