我們今天分享的是關(guān)于Air201之MQTT快速入門,學(xué)習(xí)了本文后,相信大家對(duì)其都有深刻的認(rèn)識(shí)。
本指南教你通過(guò)使用腳本代碼,對(duì)Air201模組進(jìn)行MQTT鏈接操作。
操作例程包括:
MQTT單鏈接
MQTT多鏈接
MQTT SSL不帶證書(shū)鏈接
MQTT SSL帶證書(shū)鏈接
大家可根據(jù)自身需求,選擇對(duì)應(yīng)的例程學(xué)習(xí)。
1. 搭建環(huán)境
新同學(xué)建議先看前期的基礎(chǔ)知識(shí)相關(guān)教程,更有助于理解和操作。
本章所需要用到的腳本存于LuatOS-Air201demomqtt文件夾中;若沒(méi)有找到該腳本,可能代碼并非最新,請(qǐng)根據(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工具配置 ▼
下載好軟件后,根據(jù)下方圖中操作指示填寫(xiě)信息:
填寫(xiě)好信息,點(diǎn)擊右上角【連接】。
下一步,開(kāi)始添加訂閱主題和發(fā)布消息主題:
這里,要特別注意一下主題格式。
訂閱主題格式
要求默認(rèn)為:/luatos/pub/ 加模組的IMEI號(hào)
例如:
/luatos/pub/864536071785271
發(fā)布主題格式
要求默認(rèn)為:/luatos/sub/ 加模組的IMEI號(hào)
例如:
/luatos/sub/864536071785271
MQTTX配置已經(jīng)完成,現(xiàn)在開(kāi)始正式學(xué)習(xí)。學(xué)成之后便可通過(guò)MQTT進(jìn)行自由通信了,實(shí)際效果如下圖所示:
2.MQTT單鏈接示例
2.1 main.lua說(shuō)明
在main.lua中我們需要調(diào)用single_mqtt,代碼參考如下:
2.2 single_mqtt.lua說(shuō)明
下面將對(duì)single_mqtt.lua中的代碼進(jìn)行簡(jiǎn)單說(shuō)明,并指導(dǎo)大家修改指定參數(shù),以便順利進(jìn)行MQTT單鏈接操作。
1)在代碼開(kāi)頭部分,根據(jù)自己的服務(wù)器修改指定的參數(shù)。
需要注意的是user_name和password在有些服務(wù)器上是可以不傳入的,或者是對(duì)傳入的值沒(méi)有要求限制。
要根據(jù)實(shí)際服務(wù)器要求來(lái)填寫(xiě)。
2)此task實(shí)現(xiàn)的是MQTT的連接、訂閱消息、發(fā)布消息的流程。
要先等待網(wǎng)絡(luò)就緒之后,才可進(jìn)行MQTT后續(xù)操作。
待網(wǎng)絡(luò)就緒之后,根據(jù)代碼編寫(xiě)情況此時(shí)client_id、pub_topic和sub_topic會(huì)發(fā)生變化,會(huì)覆蓋掉代碼開(kāi)頭部分時(shí)的配置,這點(diǎn)需要注意。device_id為模組的IMEI號(hào)。
3)此task的功能為模組每3秒向服務(wù)器發(fā)送一次數(shù)據(jù):
4)此代碼可實(shí)現(xiàn)mqtt-uart透?jìng)鳎么诠ぞ呓o服務(wù)器發(fā)消息或者接收來(lái)自服務(wù)器的消息。
注意:要使用串口1,且波特率為9600。
5)此task是通過(guò)使用rtos.meminfo()查詢內(nèi)存信息,并進(jìn)行打印。
RTOS庫(kù)詳細(xì)信息請(qǐng)參考:
RTOS底層操作庫(kù)
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透?jìng)鲗?shí)現(xiàn)效果圖如下所示:
3. MQTT多鏈接示例
3.1 main.lua說(shuō)明
在main.lua中我們需要調(diào)用multilink_mqtt,代碼參考如下:
3.2 multilink_mqtt.lua說(shuō)明
1)在代碼開(kāi)頭部分,請(qǐng)根據(jù)自己的服務(wù)器修改指定的參數(shù)。
特別說(shuō)明:
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客戶端對(duì)象。
具體步驟包括:
使用mqtt.create創(chuàng)建一個(gè)MQTT客戶端對(duì)象,并將其存儲(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號(hào);
使用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)識(shí),可能出現(xiàn)的值有"conack"(連接確認(rèn))、"recv"(接收消息)、"sent"(發(fā)送完成)、"disconnect"(服務(wù)器斷開(kāi)連接)等,再根據(jù)不同事件類型執(zhí)行不同的功能;
調(diào)用connect方法連接到MQTT服務(wù)器。
4)此mqtt_client2函數(shù)主要功能是創(chuàng)建并配置一個(gè)MQTT客戶端2(client2),并鏈接到指定的MQTT服務(wù)器。
代碼內(nèi)容與mqtt_client1類似,此處不再?gòu)?fù)述。
5)此sys.taskInit為主task函數(shù)
函數(shù)主要功能是初始化剛才那兩個(gè)MQTT客戶端,確保它們能夠成功連接到服務(wù)器,并進(jìn)行周期性的發(fā)布消息以實(shí)現(xiàn)與服務(wù)器的通信。代碼中還進(jìn)行了設(shè)備聯(lián)網(wǎng)檢查及庫(kù)的兼容性驗(yàn)證,確保在合適環(huán)境下運(yùn)行。
具體步驟包括:
使用sys.waitUntil讓系統(tǒng)等待網(wǎng)絡(luò)連接就緒;
使用mobile.imei()獲取模塊IMEI號(hào)后賦值給device_id作為設(shè)備ID;
代碼檢查是否存在有可用的MQTT庫(kù)。若不存在,進(jìn)入一個(gè)無(wú)限循環(huán),每秒打印一個(gè)日志信息,告知用戶未找到MQTT庫(kù);
分別啟動(dòng)兩個(gè)MQTT客戶端,并等待與服務(wù)器成功連接的確認(rèn);
設(shè)定要發(fā)布的數(shù)據(jù)及qos(服務(wù)質(zhì)量)等級(jí),qos為1表示消息至少會(huì)被傳遞一次;
使用一個(gè)無(wú)限循環(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不帶證書(shū)鏈接示例
4.1 main.lua說(shuō)明
在main.lua中我們需要調(diào)用ssl_mqtt,代碼參考如下:
4.2 ssl_mqtt.lua說(shuō)明
1)在代碼開(kāi)頭部分,根據(jù)自己的服務(wù)器修改對(duì)應(yīng)參數(shù)。
特別注意:
MQTT SSL不帶證書(shū)鏈接與帶證書(shū)鏈接為同一個(gè)文件,我們本節(jié)教程是MQTT SSL不帶證書(shū)鏈接,因此要將mqtt_isssl的值改為true ,大家可自行參考下方代碼進(jìn)行修改。
2)其余代碼部分就與MQTT單鏈接示例中的single_mqtt.lua 代碼相同,同樣為避免重復(fù)信息過(guò)多,影響閱讀感受,大家可轉(zhuǎn)到上文2.2 single_mqtt.lua說(shuō)明進(jìn)行了解。
4.3 示例效果
5. MQTT SSL帶證書(shū)鏈接示例
5.1 main.lua說(shuō)明
在main.lua中我們依舊需要調(diào)用ssl_mqtt,代碼參考如下:
5.2 ssl_mqtt.lua說(shuō)明
1)在代碼開(kāi)頭部分,依舊需要大家根據(jù)自己的服務(wù)器進(jìn)行修改對(duì)應(yīng)參數(shù)。
不過(guò)需要注意的是,本次是使用MQTT SSL帶證書(shū)鏈接,所以需要將mqtt_isssl的值改為table;
另外需要注意的是,既然是帶證書(shū)鏈接,那么肯定是需要準(zhǔn)備好證書(shū)文件了,大家在使用自己的服務(wù)器時(shí),一定要準(zhǔn)備好對(duì)應(yīng)的證書(shū)文件才行,證書(shū)文件建議直接放在 LuatOS-Air201demomqtt 文件夾下,證書(shū)文件路徑根據(jù)代碼中示例自行修改。
在燒錄時(shí),要將證書(shū)文件作為腳本文件一同燒錄到模組中。詳細(xì)燒錄教程,大家可自行參考:
https://docs.openluat.com/Luatools/
2)其余代碼部分就與MQTT單鏈接示例中的single_mqtt.lua代碼相同,為避免重復(fù)信息過(guò)多,影響閱讀感受,大家可轉(zhuǎn)到上文
2.2 single_mqtt.lua說(shuō)明
進(jìn)行了解。
5.3 示例效果
今天的分享就到這
歡迎關(guān)注
審核編輯 黃宇
-
代碼
+關(guān)注
關(guān)注
30文章
4824瀏覽量
69035 -
MQTT
+關(guān)注
關(guān)注
5文章
653瀏覽量
22689
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
GPS/LBS/Wi-Fi定位,全安排!—合宙Air201資產(chǎn)定位模組LuatOS快速入門04
![GPS/LBS/Wi-Fi定位,全安排!—合宙<b class='flag-5'>Air201</b>資產(chǎn)定位模組LuatOS<b class='flag-5'>快速</b><b class='flag-5'>入門</b>04](https://file1.elecfans.com/web2/M00/06/23/wKgZombiZu2AapYTAAHolrA5H_4680.png)
Air780E/Air780EP/Air780EQ/Air201模塊遇到死機(jī)問(wèn)題如何分析
![<b class='flag-5'>Air</b>780E/<b class='flag-5'>Air</b>780EP/<b class='flag-5'>Air</b>780EQ/<b class='flag-5'>Air201</b>模塊遇到死機(jī)問(wèn)題如何分析](https://file1.elecfans.com/web2/M00/FD/20/wKgZomaYcZGAIdfqAABembvJ4Po238.png)
合宙 Air780E/Air780EP/Air780EQ/Air201模塊遇到死機(jī)問(wèn)題如何分析
![合宙 <b class='flag-5'>Air</b>780E/<b class='flag-5'>Air</b>780EP/<b class='flag-5'>Air</b>780EQ/<b class='flag-5'>Air201</b>模塊遇到死機(jī)問(wèn)題如何分析](https://file1.elecfans.com/web2/M00/FD/20/wKgZomaYcZGAIdfqAABembvJ4Po238.png)
合宙Air201定位模組,千萬(wàn)不要忘記設(shè)置這個(gè)......
![合宙<b class='flag-5'>Air201</b>定位模組,千萬(wàn)不要忘記設(shè)置這個(gè)......](https://file1.elecfans.com/web2/M00/01/8B/wKgZoma16MWAZF4WAADwKaXvNwM469.png)
遠(yuǎn)程控制,就是這么簡(jiǎn)單—合宙Air201資產(chǎn)定位模組LuatOS快速入門03
![遠(yuǎn)程控制,就是這么簡(jiǎn)單—合宙<b class='flag-5'>Air201</b>資產(chǎn)定位模組LuatOS<b class='flag-5'>快速</b><b class='flag-5'>入門</b>03](https://file1.elecfans.com/web2/M00/07/0F/wKgaombiZLSAVXhTAAFdTzjs9PI193.png)
玩轉(zhuǎn)擴(kuò)展庫(kù),溫濕度傳感器篇!—合宙Air201資產(chǎn)定位模組LuatOS快速入門05
![玩轉(zhuǎn)擴(kuò)展庫(kù),溫濕度傳感器篇!—合宙<b class='flag-5'>Air201</b>資產(chǎn)定位模組LuatOS<b class='flag-5'>快速</b><b class='flag-5'>入門</b>05](https://file1.elecfans.com/web2/M00/06/24/wKgZombiaS2ANxeSAAHg4DULaU8860.png)
資產(chǎn)定位 | 合宙Air201模組LuatOS快速入門01-hello world
![資產(chǎn)定位 | 合宙<b class='flag-5'>Air201</b>模組LuatOS<b class='flag-5'>快速</b><b class='flag-5'>入門</b>01-hello world](https://file1.elecfans.com/web2/M00/07/3A/wKgaombj56yAQ77SAAB57ivj9Ak605.png)
合宙Air201資產(chǎn)定位模組LuatOS快速入門:GPS/LBS/Wi-Fi定位,全安排!?
![合宙<b class='flag-5'>Air201</b>資產(chǎn)定位模組LuatOS<b class='flag-5'>快速</b><b class='flag-5'>入門</b>:GPS/LBS/Wi-Fi定位,全安排!?](https://file1.elecfans.com/web2/M00/07/4B/wKgaombkzy-ADn4aACaacZ_3_dU313.png)
你要的錄音&播放錄音功能,直接用!Air201資產(chǎn)定位模組LuatOS快速入門
![你要的錄音&播放錄音功能,直接用!<b class='flag-5'>Air201</b>資產(chǎn)定位模組LuatOS<b class='flag-5'>快速</b><b class='flag-5'>入門</b>](https://file1.elecfans.com/web2/M00/06/60/wKgZombkyvaAUaWlABZH07LDusM007.png)
Air201模組教程:SPI通信與外部Flash的連接之道!
![<b class='flag-5'>Air201</b>模組教程:SPI通信與外部Flash的連接之道!](https://file1.elecfans.com/web2/M00/0C/AF/wKgaomc6F8GANI1dAAUySozHA5M860.png)
Air201公開(kāi)但沒(méi)全公開(kāi)?你要的資料在這里!
![<b class='flag-5'>Air201</b>公開(kāi)但沒(méi)全公開(kāi)?你要的資料在這里!](https://file1.elecfans.com/web3/M00/01/13/wKgZPGdQRmyAGuqFAAl6QAc9R-I568.png)
定位模組Air201——快速實(shí)現(xiàn)打電話!
![定位模組<b class='flag-5'>Air201</b>——<b class='flag-5'>快速</b>實(shí)現(xiàn)打電話!](https://file1.elecfans.com/web3/M00/02/80/wKgZO2df0smAGY1vAAWHVRnfHbg744.png)
評(píng)論