學習這一課需要用到一款安卓的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文件。
連接成功後,打開我們的手機客戶端(上一課內容)。點擊按鈕CONNECT連接broker,可以通過點擊按鈕ISCONNECTED查看是否連接上。連接成功之後,點擊按鈕PUBLISH一條消息,可以看到ESP後臺已經打印。
接下來,我們看看手機端的訂閱效果,點擊按鈕SUBSCRIBE.
由於我們第四課中的程序只寫了一條publish,是在連接時運行的,所以,爲了演示效果,我們先關閉ESP端的mqtt客戶端,運行mqtt_close.lua。
然後重新打開mqtt客戶端。運行mqtt_test.lua。
這時,你會在手機客戶端看到已經收到了一條新的消息。
至此,通過公網控制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進行討論。