今天我們學(xué)習(xí)的是關(guān)于Air201的MQTT實(shí)用示例的終極指南。
本教程教你通過使用腳本代碼,對Air201模組進(jìn)行MQTT鏈接操作。
操作例程包括:
MQTT單鏈接
MQTT多鏈接
MQTT SSL不帶證書鏈接
MQTT SSL帶證書鏈接
大家可根據(jù)自身需求,選擇對應(yīng)的例程學(xué)習(xí)。
1. 搭建環(huán)境
新同學(xué)建議先看前期的基礎(chǔ)知識相關(guān)教程,更有助于理解和操作。
本章所需要用到的腳本存于LuatOS-Air201demomqtt文件夾中;若沒有找到該腳本,可能代碼并非最新,請根據(jù)前面教學(xué)重新拉取。
1.1 硬件準(zhǔn)備
Air201 PCBA
帶有數(shù)據(jù)通信功能的數(shù)據(jù)線
Win10以上PC
1.2 軟件準(zhǔn)備
LuaTools調(diào)試工具:
https://docs.openluat.com/Luatools/
最新固件:
https://gitee.com/openLuat/LuatOS-Air201/tree/master/core
最新腳本:
https://gitee.com/openLuat/LuatOS-Air201/tree/master/demo/mqtt
MQTTX工具:
https://mqttx.app/
本章教程以MQTTX工具為例進(jìn)行學(xué)習(xí),大家也可以使用其他MQTT工具。
我們先把MQTTX工具配置一下:
▼ MQTTX工具配置 ▼
填寫好信息,點(diǎn)擊右上角【連接】。
下一步,開始添加訂閱主題和發(fā)布消息主題:
這里,要特別注意一下主題格式。
訂閱主題格式
要求默認(rèn)為:/luatos/pub/ 加模組的IMEI號
例如:
/luatos/pub/864536071785271
發(fā)布主題格式
要求默認(rèn)為:/luatos/sub/ 加模組的IMEI號
例如:
/luatos/sub/864536071785271
MQTTX配置已經(jīng)完成,現(xiàn)在開始正式學(xué)習(xí)。學(xué)成之后便可通過MQTT進(jìn)行自由通信了,實(shí)際效果如下圖所示:
2.MQTT單鏈接示例
2.1 main.lua說明
在main.lua中我們需要調(diào)用single_mqtt,代碼參考如下:
2.2 single_mqtt.lua說明
下面將對single_mqtt.lua中的代碼進(jìn)行簡單說明,并指導(dǎo)大家修改指定參數(shù),以便順利進(jìn)行MQTT單鏈接操作。
1)在代碼開頭部分,根據(jù)自己的服務(wù)器修改指定的參數(shù)。
需要注意的是user_name和password在有些服務(wù)器上是可以不傳入的,或者是對傳入的值沒有要求限制。
要根據(jù)實(shí)際服務(wù)器要求來填寫。
2)此task實(shí)現(xiàn)的是MQTT的連接、訂閱消息、發(fā)布消息的流程。
要先等待網(wǎng)絡(luò)就緒之后,才可進(jìn)行MQTT后續(xù)操作。
待網(wǎng)絡(luò)就緒之后,根據(jù)代碼編寫情況此時(shí)client_id、pub_topic和sub_topic會(huì)發(fā)生變化,會(huì)覆蓋掉代碼開頭部分時(shí)的配置,這點(diǎn)需要注意。device_id為模組的IMEI號。
3)此task的功能為模組每3秒向服務(wù)器發(fā)送一次數(shù)據(jù):
4)此代碼可實(shí)現(xiàn)mqtt-uart透傳,利用串口工具給服務(wù)器發(fā)消息或者接收來自服務(wù)器的消息。
注意:要使用串口1,且波特率為9600。
5)此task是通過使用rtos.meminfo()查詢內(nèi)存信息,并進(jìn)行打印。
RTOS庫詳細(xì)信息請參考:
RTOS底層操作庫
https://wiki.luatos.com/api/rtos.html?highlight=rtos#rtos-meminfo-type
2.3 示例效果
MQTT單鏈接示例如下圖所示,實(shí)現(xiàn)效果為模塊每3秒向服務(wù)器發(fā)送一次數(shù)據(jù)。
前面代碼中所提到的mqtt-uart透傳實(shí)現(xiàn)效果圖如下所示:
3. MQTT多鏈接示例
3.1 main.lua說明
在main.lua中我們需要調(diào)用multilink_mqtt,代碼參考如下:
3.2 multilink_mqtt.lua說明
1)在代碼開頭部分,請根據(jù)自己的服務(wù)器修改指定的參數(shù)。
特別說明:
client1_pub_topic
client1_sub_topic
client2_pub_topic
client2_sub_topic
以上幾項(xiàng)在后面函數(shù)中會(huì)再次賦參數(shù),因此會(huì)覆蓋掉這里的參數(shù),所以大家可以選擇不填。
2)此create_mqtt函數(shù)主要功能是創(chuàng)建并配置MQTT客戶端對象。
具體步驟包括:
使用mqtt.create創(chuàng)建一個(gè)MQTT客戶端對象,并將其存儲(chǔ)在mqtt_param表的mqttc字段中;
使用log.info打印MQTT客戶端的配置信息;
使用mqttc:auth進(jìn)行MQTT三元組配置;
使用mqttc:autoreconn配置自動(dòng)重連機(jī)制,true表示啟動(dòng)自動(dòng)重連機(jī)制,3000為自動(dòng)重連周期,單位為ms。
3)此mqtt_client1函數(shù)主要功能是創(chuàng)建并配置一個(gè)MQTT客戶端1(client1),并鏈接到指定的MQTT服務(wù)器。
具體步驟包括:
client1_pub_topic和client1_sub_topic分別定義了客戶端1的上報(bào)主題和訂閱主題,device_id為設(shè)備的IMEI號;
使用log.info函數(shù)打印客戶端1的上報(bào)和下發(fā)主題;
使用create_mqtt函數(shù)創(chuàng)建MQTT客戶端1,并傳入mqtt1_param表中參數(shù);
設(shè)置MQTT客戶端1的事件回調(diào)函數(shù),event為事件類型標(biāo)識,可能出現(xiàn)的值有"conack"(連接確認(rèn))、"recv"(接收消息)、"sent"(發(fā)送完成)、"disconnect"(服務(wù)器斷開連接)等,再根據(jù)不同事件類型執(zhí)行不同的功能;
調(diào)用connect方法連接到MQTT服務(wù)器。
4)此mqtt_client2函數(shù)主要功能是創(chuàng)建并配置一個(gè)MQTT客戶端2(client2),并鏈接到指定的MQTT服務(wù)器。
代碼內(nèi)容與mqtt_client1類似,此處不再復(fù)述。
5)此sys.taskInit為主task函數(shù)
函數(shù)主要功能是初始化剛才那兩個(gè)MQTT客戶端,確保它們能夠成功連接到服務(wù)器,并進(jìn)行周期性的發(fā)布消息以實(shí)現(xiàn)與服務(wù)器的通信。代碼中還進(jìn)行了設(shè)備聯(lián)網(wǎng)檢查及庫的兼容性驗(yàn)證,確保在合適環(huán)境下運(yùn)行。
具體步驟包括:
使用sys.waitUntil讓系統(tǒng)等待網(wǎng)絡(luò)連接就緒;
使用mobile.imei()獲取模塊IMEI號后賦值給device_id作為設(shè)備ID;
代碼檢查是否存在有可用的MQTT庫。若不存在,進(jìn)入一個(gè)無限循環(huán),每秒打印一個(gè)日志信息,告知用戶未找到MQTT庫;
分別啟動(dòng)兩個(gè)MQTT客戶端,并等待與服務(wù)器成功連接的確認(rèn);
設(shè)定要發(fā)布的數(shù)據(jù)及qos(服務(wù)質(zhì)量)等級,qos為1表示消息至少會(huì)被傳遞一次;
使用一個(gè)無限循環(huán),每隔3秒檢查MQTT客戶端是否準(zhǔn)備好,并發(fā)送帶有時(shí)間戳的數(shù)據(jù)到指定的主題。
6)此sys.taskInit的主要功能是,每隔3秒打印一次Lua程序和操作系統(tǒng)的內(nèi)存使用情況。
3.3 示例效果
Client 1:
Client 2:
4. MQTT SSL不帶證書鏈接示例
4.1 main.lua說明
在main.lua中我們需要調(diào)用ssl_mqtt,代碼參考如下:
4.2 ssl_mqtt.lua說明
1)在代碼開頭部分,根據(jù)自己的服務(wù)器修改對應(yīng)參數(shù)。
特別注意:
MQTT SSL不帶證書鏈接與帶證書鏈接為同一個(gè)文件,我們本節(jié)教程是MQTT SSL不帶證書鏈接,因此要將mqtt_isssl的值改為true ,大家可自行參考下方代碼進(jìn)行修改。
2)其余代碼部分就與MQTT單鏈接示例中的single_mqtt.lua 代碼相同,同樣為避免重復(fù)信息過多,影響閱讀感受,大家可轉(zhuǎn)到上文2.2 single_mqtt.lua說明進(jìn)行了解。
4.3 示例效果
5. MQTT SSL帶證書鏈接示例
5.1 main.lua說明
在main.lua中我們依舊需要調(diào)用ssl_mqtt,代碼參考如下:
5.2 ssl_mqtt.lua說明
1)在代碼開頭部分,依舊需要大家根據(jù)自己的服務(wù)器進(jìn)行修改對應(yīng)參數(shù)。
不過需要注意的是,本次是使用MQTT SSL帶證書鏈接,所以需要將mqtt_isssl的值改為table;
另外需要注意的是,既然是帶證書鏈接,那么肯定是需要準(zhǔn)備好證書文件了,大家在使用自己的服務(wù)器時(shí),一定要準(zhǔn)備好對應(yīng)的證書文件才行,證書文件建議直接放在 LuatOS-Air201demomqtt 文件夾下,證書文件路徑根據(jù)代碼中示例自行修改。
在燒錄時(shí),要將證書文件作為腳本文件一同燒錄到模組中。詳細(xì)燒錄教程,大家可自行參考:
https://docs.openluat.com/Luatools/
2)其余代碼部分就與MQTT單鏈接示例中的single_mqtt.lua代碼相同,為避免重復(fù)信息過多,影響閱讀感受,大家可轉(zhuǎn)到上文
2.2 single_mqtt.lua說明進(jìn)行了解。
5.3 示例效果
分享完畢,歡迎關(guān)注
審核編輯 黃宇
-
MQTT
+關(guān)注
關(guān)注
5文章
648瀏覽量
22393 -
LuatOS
+關(guān)注
關(guān)注
0文章
59瀏覽量
1919
發(fā)布評論請先 登錄
相關(guān)推薦
評論