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

 

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