MQTT是物聯(lián)網(wǎng)系統(tǒng)中使用最廣泛的通訊協(xié)議, 已被所有的物聯(lián)云所支持, 鈦極OS(TiJOS) 提供了MQTT相關(guān)Java類,可直接支持設(shè)備連接至各大物聯(lián)云平臺。
下面以百度云為例,在使用前請先在百度云下的物接入IoT Hub中進行相關(guān)配置,具體請參考
https://cloud.baidu.com/product/iot.html
網(wǎng)絡(luò)配置在進行網(wǎng)絡(luò)應(yīng)用開發(fā)之前,請先通過Ti-Device Manager對TiKit 進行網(wǎng)絡(luò)設(shè)置

百度云Iot Hub設(shè)置在百度云Iot Hub進行設(shè)置后獲得如下類似信息:
| 參數(shù) |
值 |
說明 |
MQTT Server URI |
tcp://tijos.mqtt.iot.gz.baidubce.com:1883 |
MQTT 服務(wù)器地址及端口 |
User Name |
tijos/dev1 |
設(shè)備用戶名 |
Password |
tWnuCZdmdgqn6uT6oaVjE1NwC9atipvOTxBA0Xn2QFQ= |
用戶密碼 |
Topic |
topic2 |
用于發(fā)布和訂閱的主題名,需要同時具有發(fā)布和訂閱權(quán)限 |
| |
|
|
|
|
|
|
|
|
|
|
|
|
以上配置為例程中所用的配置, 可根據(jù)實際應(yīng)用進行對應(yīng)修改。
新建 TiJOS Application 應(yīng)用工程在Ti-Dev Studio中新建MQTTClientDemo工程及相應(yīng)的類
啟動網(wǎng)絡(luò)連接在應(yīng)用中使用網(wǎng)絡(luò)之前, 首先需要啟動網(wǎng)絡(luò)連接
try{
//啟動WLAN及DNS
TiWLAN.getInstance().startup(10);
TiDNS.getInstance().startup();
}
catch(IOException ex)
{
ex.printStackTrace();
return ;
}
MQTT server連接參數(shù)設(shè)置
根據(jù)以上參數(shù)設(shè)置MQTT server的連接參數(shù)
//MQTT Server 地址,用戶名, 密碼
final String broker = "tcp://tijos.mqtt.iot.gz.baidubce.com:1883";
final String username = "tijos/dev1";
final String password = "tWnuCZdmdgqn6uT6oaVjE1NwC9atipvOTxBA0Xn2QFQ=";
//ClientID
final String clientId = "mqtt_test_java_tijos";
//MQTT連接設(shè)置
MqttConnectOptions connOpts = new MqttConnectOptions();
connOpts.setUserName(username);
connOpts.setPassword(password);
//允許自動重新連接
connOpts.setAutomaticReconnect(true);
設(shè)置MQTT事件回調(diào)并連接MQTT服務(wù)器
MQTT通過事件回調(diào)的方式提供服務(wù),需要創(chuàng)建一個MqttClientListner的實現(xiàn)類用于接收事件回調(diào)
class MqttEventLister implements MqttClientListener
設(shè)置回調(diào)參數(shù)
mqttClient.SetMqttClientListener(new MqttEventLister());
//連接MQTT服務(wù)器
mqttClient.connect(connOpts, mqttClient);
訂閱主題
訂閱指定主題,當(dāng)收到訂閱主題的數(shù)據(jù)發(fā)布時, MqttClientListener的messageArrived事件將被調(diào)用
//訂閱topic
int qos = 1;
String topic = "topic2";
int msgId = mqttClient.subscribe(topic, qos);
發(fā)布數(shù)據(jù)到指定主題
publish用于將數(shù)據(jù)發(fā)布到指定主題
String content = "new data";
msgId = mqttClient.publish(topic, content.getBytes(), qos, false);
關(guān)閉并釋放資源
應(yīng)用結(jié)束前或不再使用MQTT時,請關(guān)閉MQTT 連接
結(jié)果輸出可在Ti-Device Manager中將日志配置為顯示全部以查看輸出結(jié)果,編譯下載后在TiKit上運行如下圖所示:

相關(guān)源碼請參考MqttClientDemo.java
結(jié)論鈦極OS(TiJOS) MQTT編程與目前廣泛流行開源Paho MQTT編程方式相似,可以方便將現(xiàn)有的MQTT 應(yīng)用移植到鈦極OS(TiJOS)中運行, 與各大物聯(lián)云集成非常方便。