nodeMCU Lua ESP8266第六课 公网控制ESP

学习这一课需要用到一款安卓的mqtt软件,可以自行寻找,也可以使用我写的一个demo。

软件介绍:https://blog.csdn.net/qq_26820797/article/details/79260661

   写在前面的话:个人学习笔记,抛砖引玉,希望有兴趣的人加入QQ群415469069一起讨论,欢迎有共同爱好的人。 

本教程以ESP-12N,CP2102开发板为例进行讲解,配合之前编写的Android软件。

  • ESP端代码。

依然使用第四课的两个文件:mqtt_test.lua和close_mqtt.lua。群文件可以下载。为了方便调试,将publish、lwt和subscribe的Topic改一下,第11行输出信息改为print("mcu connected broker.")

--mqtt_test.lua

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

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

    function(client)

        print("connected")

    end)

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

myClient:on("connect",

    function(clinet)

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

            print("pc connected mcu")

        end

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

            print("subscribe is success.")

        end

    end)

myClient:on("offline",

    function(client)

        myClient:publish("esp_to_android_","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

  • 测试功能。

运行mqtt_test.lua文件。

nodeMCU Lua ESP8266第六课 公网控制ESP

连接成功后,打开我们的手机客户端(上一课内容)。点击按钮CONNECT连接broker,可以通过点击按钮ISCONNECTED查看是否连接上。连接成功之后,点击按钮PUBLISH一条消息,可以看到ESP后台已经打印。

nodeMCU Lua ESP8266第六课 公网控制ESP

nodeMCU Lua ESP8266第六课 公网控制ESP

接下来,我们看看手机端的订阅效果,点击按钮SUBSCRIBE.

nodeMCU Lua ESP8266第六课 公网控制ESP

由于我们第四课中的程序只写了一条publish,是在连接时运行的,所以,为了演示效果,我们先关闭ESP端的mqtt客户端,运行mqtt_close.lua。

nodeMCU Lua ESP8266第六课 公网控制ESP

然后重新打开mqtt客户端。运行mqtt_test.lua。

nodeMCU Lua ESP8266第六课 公网控制ESP


    这时,你会在手机客户端看到已经收到了一条新的消息。

nodeMCU Lua ESP8266第六课 公网控制ESP

至此,通过公网控制ESP的思路已经讲解完毕了。

我的宗旨一直是抛砖引玉,授之以渔。接下来如果你想要实现具体功能的话,只需要提取subscribe中的字段就行了。在on方法中添加以下代码段,实现远程开关灯效果。IO口根据自己的情况配置。

myClient:on("message",

    function(client , topic , message)

        print("get a message.\n")

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

--        turn the light on

        if(message == "light_on") then

            gpio.write(0,gpio.LOW)

        end

--        turn the light off

        if(message == "light_off") then

            gpio.write(0,gpio.HIGH)

        end

    end)        

修改好代码后,SAVE运行。等待连接到broker后,在手机客户端publish一条light_on消息,可以看到,开发板上的led灯被点亮。接着publish一条light_off消息,可以看到,开发板上的led灯熄灭。

安卓端的客户端,可以根据自己的具体需求,编写相应的界面和对数据的处理。

PS:在使用过程中有什么疑问,欢迎加入QQ群415469069进行讨论。

 

上一篇:线程安全的单例-懒汉


下一篇:利用binlog2sql快速闪回误删除数据