nodeMCU Lua ESP8266第四課 MQTT的使用

第四課 MQTT的使用

   寫在前面的話:個人學習筆記,拋磚引玉,希望有興趣的人加入QQ羣415469069一起討論,歡迎有共同愛好的人。 

本教程以ESP-12N,CP2102開發板爲例進行講解。

分爲兩個文件:mqtt_test.lua和close_mqtt.lua。羣文件可以下載。

--mqtt_test.lua

myClient = mqtt.Client("test_mqqt_20180123_mcu",120)

myClient:connect("iot.eclipse.org",

    function(client)

        print("connected")

    end)

myClient:lwt("mcu_to_pc_topic20180123","mcu is closed")

myClient:on("connect",

    function(clinet)

        if(myClient:publish("mcu_to_pc_topic20180123","online",0,0))then

            print("pc connected mcu")

        end

        if(myClient:subscribe("pc_to_mcu_topic20180123",0))then

            print("subscribe is success.")

        end

    end)

myClient:on("offline",

    function(client)

        myClient:publish("mcu_to_pc_topic20180123","offline",0,0)

    end)

myClient:on("message",

function(client , topic , message)

    print(“get a message.\n”)

        print(topic..":"..message)

    end)        

--mqtt_close.lua

if(myClient:close()) then

    print("mqtt is closed.")

else

    print("closed is failed.")

end


  • 工作流程。

首先我們需要一個broker,這裏提供一些免費的服務器供參考。https://github.com/mqtt/mqtt.github.io/wiki/public_brokers

爲了測試效果,我們需要另一個客戶端軟件,這裏我們選擇一個電腦端的mqtt客戶端(mqtt-spy-1.0.0),可以在羣文件(羣主教程工具)中下載。打開mqtt-spy-1.0.0.jar(需要安裝java環境,參考第一課)。按下圖操作。

在打開的窗口中,左側第一個就是我們要使用的,選擇它,在右側的窗口中紅框部分輸入我們的客戶端名稱。最好複雜一點,避免與其他人的重複。然後點擊應用設置(Apply),最後點擊打開連接

 

此時,會在主界面上多出一個選項,點擊它

然後就是新建我們要監聽的主題(topic)。

 

至此,我們的電腦端的客戶端就配置完成了。然後我們開始建立我們的ESP上的客戶端。首先,看一下工作流程圖,如下:

然後複製代碼,上傳到ESP中執行。然後去看一下電腦端的客戶端,會監聽到一條消息。


接着我們從電腦端的客戶端發送一條消息,讓ESP去接收。topic的名稱要跟ESP訂閱的topic的一致。填好Topic和Data之後,點擊Publish。然後去看ESP的後臺。我們已經成功接收到消息。

如何關閉電腦端和ESP端的客戶端與broker的連接,如圖:


三、說明。

1、創建一個客戶端。

句法:mqtt.Client(clientid, keepalive[, username, password, cleansession])

參數:

clientid 客戶端ID

keepalive 保持秒

username 用戶名

password 用戶密碼

cleansession 0/1爲false/ true。默認值是1(true)。

返回:

MQTT client

2、連接broker。

句法:mqtt:connect(host[, port[, secure[, autoreconnect]]][, function(client)[, function(client, reason)]])

參數:

host 主機,域或IP(字符串)

port 經紀人端口(號碼),默認1883

secure  0/1 for false/ true,默認爲0.注意net模塊中記錄的約束條件。

autoreconnect  0/1爲false/ true,默認爲0.此選項已棄用。

function(client) 當連接建立時的回調函數

function(client, reason)當無法建立連接時回調函數。不應該調用進一步的回調。

返回:

true,false

3、監聽事件。

句法:mqtt:on(event, function(client[, topic[, message]]))

參數:

event 可以是“connect”,“message”或“offline

function(client[, topic[, message]])回調函數。第一個參數是客戶端。如果事件是“消息”,則第二和第三參數被接收話題和消息(字符串)。

4、發佈消息。

句法:mqtt:publish(topic, payload, qos, retain[, function(client)])

參數:

topic要發佈的主題(主題字符串

message 要發佈的消息(緩衝區或字符串)

qos QoS等級

retain 保留標記

function(client)收到PUBACK時觸發可選的回調。注意:當多次調用publish()時,定義的最後一個回調函數將被調用用於ALL發佈命令。

返回:true,false

  1. 訂閱主題。

句法:mqtt:subscribe(topic, qos[, function(client)])mqtt:subscribe(table[, function(client)])

參數:

topic一個主題字符串

qos QoS訂閱級別,默認爲0

table qos'對的數組來訂閱

function(client)訂閱成功時觸發可選的回調。注意:當多次調用subscribe()時,將爲所有訂閱命令調用定義的最後一個回調函數。

返回:

true,false

  1. 取消訂閱。

句法:

mqtt:unsubscribe(topic[, function(client)])

mqtt:unsubscribe(table[, function(client)])

參數

topic一個主題字符串

table “主題,任何對”的數組成對來取消訂閱

function(client)取消訂閱成功時觸發可選的回調。注意:當多次調用unsubscribe()時,將會爲所有取消訂閱命令調用定義的最後一個回調函數。

返回:

true,false

7、設置遺囑lwt。

句法:mqtt:lwt(topic, message[, qos[, retain]])

參數:

topic 將要發佈的主題(字符串)

message 要發佈的消息(緩衝區或字符串)

qos QoS級別,默認爲0

retain 保留標誌,默認爲0

8、關閉。

句法:mqtt:close()

參數:

無。

返回:

true,false

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章