JAVAでMQTTを試してみた
esp8266_MQTTで冷や汗をかきました。でも、なんとかクリア出来たので最後の関門『JAVAからMQTT接続』を試すことにしました。
参考にしたのはこちら(↓)の二つです。
JavaでMQTT入門 ローカル環境でPubSubの動作を検証してみる - Qiita
JAVAのソース・コードはこちら(↓)を使いました。
リンク==> gist.github.com
必要なorg.eclipse.paho.client.mqttv3ライブラリはこちら(↓)から持ってきました。
ソース・コードには、以下の修正(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デバッガを接続するための準備は何とか整ったようです。
次は、これ(↓)の半田付けだ!