?
今天我們學(xué)習(xí)Air780E快速入門之通過(guò)MQTT連接實(shí)現(xiàn)遠(yuǎn)程控制,伙伴們,學(xué)起來(lái)!
一、修改代碼
1.1 準(zhǔn)備工具
Air780E開(kāi)發(fā)板
Air780E開(kāi)發(fā)板設(shè)計(jì)資料
LuatOS-Air780E使用MQTT遠(yuǎn)程控制程序源碼demo
API使用說(shuō)明
mqtt測(cè)試工具
本demo中使用的測(cè)試工具是MQTTX,下載鏈接如下:MQTTX:全功能 MQTT 客戶端工具
下載后的安裝程序:
?
雙擊后點(diǎn)擊下一步安裝就可以了
?
1.2 程序詳解
1.2.1 概念 首先我們先來(lái)了解一些mqtt的基本原理。訂閱者訂閱了一個(gè)主題后,能夠接收到對(duì)這個(gè)主題發(fā)布的消息?;驹砣缦聢D:
?
本源碼程序demo實(shí)現(xiàn)流程圖如下:
?
關(guān)于sys.subscribe()和mqtt_client:subscribe()的區(qū)別:sys.subscribe()是luatOS內(nèi)部的訂閱,接收sys.public()發(fā)布的消息,而mqtt_client:subscribe()訂閱的是mqtt服務(wù)器發(fā)布消息,接收來(lái)自mqtt_client:public()發(fā)布的消息。
1.2.2 程序分步詳解
第一步:等待聯(lián)網(wǎng)
第二步:獲取本設(shè)備的id,本demo中用來(lái)給MQTT服務(wù)器創(chuàng)建主題時(shí)當(dāng)做Client ID號(hào)。因?yàn)镸QTT服務(wù)器創(chuàng)建時(shí)的Client ID必須是唯一的,設(shè)備id也是唯一的,所以正好可以拿來(lái)使用。
-- 獲取設(shè)備的imei號(hào)
local device_id = mcu.unique_id():toHex()
-- 下面的是mqtt的參數(shù)均可自行修改
client_id = device_id
--發(fā)布消息的主題內(nèi)容
pub_topic = "/luatos/pub/" .. device_id
--要訂閱的主題內(nèi)容
sub_topic = "/luatos/sub/" .. device_id
第三步:創(chuàng)建一個(gè)mqtt實(shí)例,用來(lái)進(jìn)行mqtt連接、訂閱、發(fā)布消息等操作。
--提前定義的參數(shù),用來(lái)創(chuàng)建mqtt實(shí)例,根據(jù)自己的服務(wù)器修改以下參數(shù)
local mqtt_host = "lbsmqtt.airm2m.com"
local mqtt_port = 1884
local mqtt_isssl = false
local mqttc = nil
--[[
@param1 適配器序號(hào),不填會(huì)選擇平臺(tái)自帶的
@param2 服務(wù)器地址,域名或ip都可
@param3 端口號(hào)
@param4 是否為ssl加密連接
@param5 是否為ipv6
]]
mqttc = mqtt.create(nil, mqtt_host, mqtt_port, mqtt_isssl, ca_file)
第四步:配置連接mqtt服務(wù)器的參數(shù),有mqtt設(shè)置的Client ID,賬號(hào),密碼等。
local client_id = "mqttx_b55c41b7"
local user_name = "user"
local password = "password"
--[[配置mqtt連接服務(wù)器的參數(shù)
@param1 設(shè)備id
@param2 賬號(hào)[可選]
@param3 密碼[可選]
@param4 清除session,默認(rèn)true[可選]
]]
mqttc:auth(client_id,user_name,password) -- client_id必填,其余選填
第五步:設(shè)置mqtt掉線自動(dòng)重連機(jī)制
--[[
@param1 是否自動(dòng)重連
@param2 自動(dòng)重連機(jī)制,單位ms
]]
mqttc:autoreconn(true, 3000) -- 自動(dòng)重連機(jī)制
第六步:在mqtt的事件回調(diào)函數(shù)中編寫邏輯
--[[mqtt事件回調(diào)函數(shù),其中事件包括
conack:連接成功事件。
recv:接收服務(wù)器下發(fā)數(shù)據(jù)的事件
sent:發(fā)送完成事件
disconnect:斷開(kāi)連接事件
]]
--[[回調(diào)函數(shù)參數(shù):
@param1 mqtt的句柄
@param2 事件
@param3 傳入的數(shù)據(jù)
]]
mqttc:on(function(mqtt_client, event, data, payload)
-- 用戶自定義代碼
log.info("mqtt", "event", event, mqtt_client, data, payload)
if event == "conack" then
-- 觸發(fā)mqtt連接服務(wù)器成功事件,
-- 在luat內(nèi)部發(fā)布一條消息。
sys.publish("mqtt_conack")
--訂閱一個(gè)mqtt主題
mqtt_client:subscribe(sub_topic)--單主題訂閱
-- mqtt_client:subscribe({[topic1]=1,[topic2]=1,[topic3]=1})--多主題訂閱
elseif event == "recv" then
--觸發(fā)接收數(shù)據(jù)事件
log.info("mqtt", "downlink", "topic", data, "payload", payload)
elseif event == "sent" then
--觸發(fā)發(fā)送數(shù)據(jù)事件
end
end)
第七步:連接mqtt服務(wù)器
mqttc:connect()
第八步:等待連接成功的luat內(nèi)部的消息,此消息的發(fā)布在連接成功事件中
sys.waitUntil("mqtt_conack")
第九步:循環(huán)等待上報(bào)數(shù)據(jù)
while true do
-- 演示等待其他task發(fā)送過(guò)來(lái)的上報(bào)信息
local ret, topic, data, qos = sys.waitUntil("mqtt_pub", 300000)
if ret then
-- 當(dāng)接收到的tpoic是字符串close時(shí),就跳出等待其他task發(fā)過(guò)來(lái)的上報(bào)消息的循環(huán)
if topic == "close" then break end
mqttc:publish(topic, data, qos)
end
end
第十步:關(guān)閉mqtt連接
mqttc:close()
第十一步:定時(shí)上報(bào)數(shù)據(jù)演示
sys.taskInit(function()
sys.wait(3000)
--定義要定時(shí)上報(bào)的數(shù)據(jù)
local data = "123test,"
--發(fā)送的數(shù)據(jù)質(zhì)量
local qos = 0 -- QOS0不帶puback, QOS1是帶puback的
while true do
sys.wait(3000)
--如果mqttc實(shí)例存在,并且mqtt客戶端就緒
if mqttc and mqttc:ready() then
--發(fā)布一個(gè)mqtt消息,這個(gè)消息的訂閱,在mqtt服務(wù)器上,后面會(huì)介紹如何在mqtt服務(wù)器上訂閱
local pkgid = mqttc:publish(pub_topic, data .. os.date(), qos)
end
end
end)
二、燒錄代碼到硬件
2.1 正確連接電腦和4G模組電路板
使用帶有數(shù)據(jù)通信功能的數(shù)據(jù)線,不要使用僅有充電功能的數(shù)據(jù)線;
2.2 識(shí)別4G模組的boot引腳
在下載之前,要用模組的boot引腳觸發(fā)下載, 也就是說(shuō),要把4G模組的boot引腳拉到 1.8v,或者直接把boot引腳和VDD_EXT引腳相連。我們要在按下BOOT按鍵時(shí)讓模塊開(kāi)機(jī),就可以進(jìn)入下載模式了。
具體到 Air780E開(kāi)發(fā)板,
2.2.1 當(dāng)我們模塊沒(méi)開(kāi)機(jī)時(shí),按著BOOT鍵然后長(zhǎng)按PWR開(kāi)機(jī)。
2.2.2 當(dāng)我們模塊開(kāi)機(jī)時(shí),按著BOOT鍵然后點(diǎn)按重啟鍵即可。
?
2.3 識(shí)別電腦的正確端口
判斷是否進(jìn)入BOOT模式:模塊上電,此時(shí)在電腦的設(shè)備管理器中,查看串口設(shè)備, 會(huì)出現(xiàn)一個(gè)端口表示進(jìn)入了boot下載模式,如下圖所示:
?
當(dāng)設(shè)備管理器出現(xiàn)了3個(gè)連續(xù)數(shù)字的com端口,并且每個(gè)數(shù)字都大于4,這時(shí)候, 硬件連接上就緒狀態(tài),恭喜你,可以進(jìn)行燒錄了!
2.4 新建項(xiàng)目
首先,確保你的 LuaTools 的版本,上大于 2.2.13 版本的。
在 LuaTools 的左上角上有版本顯示的,如圖所示:
?
LuaTools 版本沒(méi)問(wèn)題的話, 就點(diǎn)擊 LuaTOols 右上角的“項(xiàng)目管理測(cè)試”按鈕,如下圖所示:
?
這時(shí)會(huì)彈出項(xiàng)目管理和燒錄管理的對(duì)話框,如下圖:
新建一個(gè)項(xiàng)目
注意:這里截圖使用的hello world項(xiàng)目的燒錄教程,燒錄的時(shí)候要將腳本換成本次demo的。
?
2.5 開(kāi)始燒錄
選擇780E板子對(duì)應(yīng)的底層core和剛改的main.lua腳本文件。下載到板子中。
?
?
點(diǎn)擊下載后,我們需要進(jìn)入boot模式才能正常下載,在(3)(4)小節(jié)已經(jīng)介紹了如何進(jìn)入boot模式。
?
三、驗(yàn)證功能
3.1 配置MQTTX服務(wù)器
3.1.1 打開(kāi)MQTTX工具后,添加一個(gè)連接
?
?
3.1.2 添加一個(gè)訂閱,在MQTTX工具中填寫和程序中對(duì)應(yīng)的連接參數(shù):
?
訂閱成功后界面如下:
?
3.2 訂閱和發(fā)布消息
3.2.1 此時(shí)給開(kāi)發(fā)板開(kāi)機(jī)運(yùn)行,即可看到我們之前寫的自動(dòng)發(fā)送測(cè)試的數(shù)據(jù)。
?
3.2.2 MQTTX發(fā)布消息,主題是開(kāi)發(fā)板訂閱的主題,開(kāi)發(fā)板可以接收到MQTTX發(fā)布的消息。
?
?
四、常見(jiàn)問(wèn)題
Q: 模組支持MQTT最新的版本是多少?
A: 支持MQTT_V3.1、MQTT_V3.1.1版本
Q: 模組最多支持幾路鏈接?
A: mqtt/tcp/udp的鏈接公用8路通道
Q: client id是否允許重復(fù)
A: client id不允許重復(fù),要保證唯一性,如果在已經(jīng)有一個(gè)該id的鏈接情況下,另外一個(gè)設(shè)備也用了相同的clientid接入,會(huì)把另一個(gè)在連鏈接擠掉。
Q: Qos0、1、2如何選擇
A: 應(yīng)用允許的情況下,建議使用Qos0,Qos1和Qos2會(huì)加重網(wǎng)絡(luò)負(fù)擔(dān)。
Q: 為什么mqtt ssl訪問(wèn)失敗
A: 檢查服務(wù)器是否支持模塊支持的加密套件,用模塊程序中的三元組和證書,在mqttx或者mqttfx客戶端工具上嘗試是否可以成功鏈接。
Q: 排查是否設(shè)備單體問(wèn)題:如果同一地點(diǎn),某些設(shè)備正常,某些設(shè)備異常,按照如下幾種情況分析
A:
分析正常設(shè)備和異常設(shè)備的使用環(huán)境是否相同:如果不同,例如異常設(shè)備固定在鋼制墻壁上,正常設(shè)備放置在桌子上,鋼制墻壁可能對(duì)天線射頻有干擾,將異常設(shè)備和正常設(shè)備放置在同樣的使用環(huán)境中,再對(duì)比測(cè)試。如果相同,參考第2步。分析正常和異常的設(shè)備,駐留的小區(qū)是否相同:如果相同,重點(diǎn)排查異常設(shè)備的天線射頻部分。如同不同,多測(cè)試幾次,確認(rèn)下,是不是在異常小區(qū)內(nèi)很容易出問(wèn)題,如果異常小區(qū)很容易出問(wèn)題,可能就是小區(qū)擁堵造成的。
五、修改代碼
在本demo中,我們實(shí)現(xiàn)了數(shù)據(jù)的上傳和下發(fā),你可以將溫濕度數(shù)據(jù)上傳到MQTT服務(wù)器,也可以用下發(fā)的數(shù)據(jù)進(jìn)行控制燈的開(kāi)關(guān)。
以上就是合宙Air780E快速入門之通過(guò)MQTT連接實(shí)現(xiàn)遠(yuǎn)程控制的所有內(nèi)容,伙伴們,學(xué)會(huì)了嗎?
?審核編輯 黃宇
-
4G
+關(guān)注
關(guān)注
15文章
5492瀏覽量
118704 -
服務(wù)器
+關(guān)注
關(guān)注
12文章
8940瀏覽量
85057 -
遠(yuǎn)程控制
+關(guān)注
關(guān)注
4文章
617瀏覽量
34880 -
低功耗
+關(guān)注
關(guān)注
10文章
2349瀏覽量
103531 -
MQTT
+關(guān)注
關(guān)注
5文章
646瀏覽量
22390
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論