在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

OpenHarmony開發之MQTT講解

OpenAtom OpenHarmony ? 來源:未知 ? 2022-11-15 22:50 ? 次閱讀

點擊藍字 ╳ 關注我們


開源項目 OpenHarmony
是每個人的 OpenHarmony

王維平

OpenHarmony知識體系工作組


以下內容來自嘉賓分享,不代表開放原子開源基金會觀點
相信MQTT這個名稱大家都不陌生,物聯網的開發必然會遇到MQTT相關知識的應用。那么什么是MQTT?它有什么特點?它能解決什么問題?它是如何工作的?OpenAtom OpenHarmony(以下簡稱“OpenHarmony”)的物聯網開發者要如何使用及驗證MQTT功能?接下來的內容將一一為你解答。下圖為MQTT通信模型。


什么是MQTT

MQTT(Message Queuing Telemetry Transport消息隊列遙測傳輸)是一種物聯網協議,是一種客戶端與服務端架構的發布/訂閱模式的消息傳輸協議,旨在為低帶寬和不穩定的網絡環境中的物聯網設備提供可靠的網絡服務。MQTT是專門針對物聯網開發的輕量級傳輸協議。MQTT協議針對低帶寬網絡,低計算能力的設備,做了特殊的優化,使得其能適應各種物聯網應用場景。目前它已廣泛應用于車聯網、智能家居、即時聊天應用和工業互聯網等領域。

MQTT的基本原理

在MQTT通訊中,有兩個最為重要的角色。它們分別是服務端和客戶端。

MQTT服務端
MQTT服務端通常是一臺服務器。它是MQTT信息傳輸的樞紐,負責將MQTT客戶端發送來的信息傳遞給MQTT客戶端。MQTT服務端還負責管理MQTT客戶端。確保客戶端之間的通訊順暢,保證MQTT消息得以正確接收和準確投遞。

MQTT客戶端
MQTT客戶端可以向服務端發布信息,也可以從服務端收取信息。我們把客戶端發送信息的行為稱為“發布”信息。而客戶端要想從服務端收取信息,則首先要向服務端“訂閱”信息。“訂閱”信息這一操作很像我們在視頻網站訂閱某一部電視劇。當這部電視劇上新后,視頻網站會向訂閱了該劇的用戶發送信息,告訴他們有新劇上線了。

MQTT主題
剛剛我們在講解MQTT客戶端訂閱信息時,使用了用戶在視頻網站訂閱電視劇這個例子。在MQTT通訊中,客戶端所訂閱的肯定不是一部部電視劇,而是一個個“主題”。MQTT服務端在管理MQTT信息通訊時,就是使用“主題”來控制的。
為了便于您更好理解服務端是如何通過主題來控制客戶端之間的信息通訊,我們來看看下圖示例:


以上圖示中一共有三個MQTT客戶端。它們分別是汽車、手機電腦。在管理MQTT通訊時,MQTT服務端使用了“主題”來對信息進行管理。比如上圖所示,假設我們需要利用手機和電腦獲取汽車的速度,那么我們首先要利用電腦和手機向MQTT服務器訂閱主題“汽車速度”。接下來,當汽車客戶端向服務端的“汽車速度”主題發布信息后,服務端就會首先檢查以下都有哪些客戶端訂閱了“汽車速度”這一主題的信息。當它發現訂閱了該主題的客戶端有一個手機和一臺電腦,于是服務端就會將剛剛收到的“汽車速度”信息轉發給訂閱了該主題的手機和電腦客戶端。
以上實例中,汽車是“汽車速度”主題的發布者,而手機和電腦則是該主題的訂閱者。
值得注意的是,MQTT客戶端在通訊時,往往角色不是單一的。它既可以作為信息發布者也可以同時作為信息訂閱者。如下圖所示:


上圖中的所有客戶端都是圍繞“空調溫度”這一主題進行通訊的。對于“空調溫度”這一主題,手機和電腦客戶端成為了MQTT信息的發布者而汽車則成為了MQTT信息的訂閱者(接收者)。
(以上講解參考鏈接:太極創客http://www.taichi-maker.com/homepage/esp8266-nodemcu-iot/iot-tuttorial/mqtt-tutorial/2-mqtt-basics/)
可以看到,針對不同的主題,MQTT客戶端可以切換自己的角色。它們可能對主題A來說是信息發布者,但是對于主題B就成了信息訂閱者。

MQTT客戶端開發流程

以下采用小熊派的Paho MQTT樣例,簡要說明MQTT的開發流程。
樣例代碼在OpenHarmony源碼目錄/device/board/bearpi/bearpi_hm_nano/app/D5_iot_mqtt,源碼下載路徑參考文章末尾。開發應用主要涉及以下幾個API應用:


MQTT的流程主要由四個步驟組成:
1、創建客戶端對象;
2、連接服務器;
3、訂閱主題;
4、發布主題。
//訂閱的回調函數
void messageArrived(MessageData *data)
{
printf("Message arrived on topic %.*s: %.*s ", data->topicName->lenstring.len,
data->topicName->lenstring.data, data->message->payloadlen, data->message->payload);
}
//主流程函數
static void MQTTDemoTask(void)
{
WifiConnect("BearPi", "123456789");
printf("Starting ... ");
int rc, count = 0;
MQTTClient client;


NetworkInit(&network);
printf("NetworkConnect ... ");


NetworkConnect(&network, MQTT_SERVERIP, MQTT_SERVERPORT);//本地電腦作為消息代理 此處為電腦IP
printf("MQTTClientInit ... ");
//1-------------創建客戶端對象
MQTTClientInit(&client, &network, MQTT_CMD_TIMEOUT_MS, sendBuf, sizeof(sendBuf), readBuf, sizeof(readBuf));


MQTTString clientId = MQTTString_initializer;
clientId.cstring = "bearpi";


MQTTPacket_connectData data = MQTTPacket_connectData_initializer;
data.clientID = clientId;
data.willFlag = 0;
data.MQTTVersion = MQTT_VERSION;
data.keepAliveInterval = MQTT_KEEP_ALIVE_MS;
data.cleansession = 1;


printf("MQTTConnect ... ");
//2-------------連接服務端
rc = MQTTConnect(&client, &data);
if (rc != 0) {
printf("MQTTConnect: %d ", rc);
NetworkDisconnect(&network);
MQTTDisconnect(&client);
osDelay(MQTT_DELAY_2S);
}


printf("MQTTSubscribe ... ");
//3-------------訂閱主題substopic
rc = MQTTSubscribe(&client, "substopic", MQTT_QOS, messageArrived);
if (rc != 0) {
printf("MQTTSubscribe: %d ", rc);
osDelay(MQTT_DELAY_2S);
}
while (++count) {
MQTTMessage message;
char payload[30];


message.qos = MQTT_QOS;
message.retained = 0;
message.payload = payload;
(void)sprintf_s(payload, sizeof(payload), "message number %d", count);
message.payloadlen = strlen(payload);
//4------------發布pubtopic主題
if ((rc = MQTTPublish(&client, "pubtopic", &message)) != 0) {
printf("Return code from MQTT publish is %d ", rc);
NetworkDisconnect(&network);
MQTTDisconnect(&client);
}
osDelay(MQTT_DELAY_500_MS);
}
}
小熊派開發板MQTT客戶端代碼一直循環發送主題為pubtopic的信息,信息內容為("message number %d", count),每次信息count++;
同時開發板客戶端也在訂閱主題為substopic的信息,一旦接收到substopic信息就會調用回調函數,串口打印出substopic主題的內容。

MQTT實操驗證

如何驗證MQTT客戶端代碼是否正常?驗證過程主要涉及以下幾點:
1、下載消息代理Mosquitto軟件,并配置Mosquitto;
2、下載EclipsePahoMQTT工具,并用該工具創建一個客戶端,我們簡稱客戶A;
3、修改小熊派客戶端MQTT代碼相關配置,與第一步配置Mosquitto相匹配,小熊派客戶端我們簡稱客戶B。
簡要說明下本次驗證中涉及的各個模塊的作用:

1、消息代理Mosquitto:可以理解為它就是MQTT服務器,所有客戶端的消息(發布/訂閱)都是與它通信;它負責接收及分發所有信息;
2、EclipsePahoMQTT工具創建的客戶端A:我們用來與小熊派創建的客戶端B進行信息交互(發布/訂閱)。

詳細細節:
1、下載消息代理Mosquitto軟件,并配置Mosquitto:
(1)點擊下載網址(https://mosquitto.org/download/),選擇合適的版本,并安裝(記錄安裝路徑);


(2)安裝好后,配置Mosquitto,并開啟Mosquitto服務:

在Mosquitto軟件的安裝路徑找到mosquitto.conf,打開并作如下修改:

192.168.120.137是本電腦的IP;1883指本次用來驗證的服務端口號(本電腦IP192.168.120.137可以有多個服務端口);allow_anonymous true指允許客戶端匿名登錄;
修改配置后,在安裝目錄打開命令窗口,輸入.mosquitto -c .mosquitto.conf -v。服務器啟動成功后,如下圖顯示mosquitto version 2.0.11 starting.


2、下載EclipsePahoMQTT工具,創建客戶端A,并連接服務器:


3、修改小熊派客戶端MQTT代碼相關配置,與第一步配置Mosquitto相匹配,小熊派客戶端我們簡稱客戶B:

修改連接端代碼:
NetworkConnect(&network, 192.168.120.137, 1883);//本地電腦作為消息代理 此處為電腦IP Mosquitto相匹配

4、燒錄代碼,并操作(發布訂閱)通信:
客戶端B做了兩件事情:1、一直循環發送主題為pubtopic的信息,信息內容是("message number %d", count);2、訂閱了主題為substopic的信息,一旦服務器有該主題信息就會發送給客戶端B,客戶端B會把substopic的內容打印。
客戶端A也做了兩件事:1、訂閱主題為pubtopic的信息;2、發布一條主題為substopic的信息,內容為“Hello OpenHarmony!”。
結合客戶端B(小熊派開發板)部分代碼:
printf("Starting ...
");
NetworkInit(&network);
printf("NetworkConnect ... ");
NetworkConnect(&network, MQTT_SERVERIP, MQTT_SERVERPORT);//本地電腦作
printf("MQTTClientInit ... ");
//1-------------創建客戶端對象
MQTTClientInit(&client, &network, MQTT_CMD_TIMEOUT_MS, sendBuf, sizeof(sendBuf), readBuf, sizeof(readBuf));


printf("MQTTConnect ... ");
//2-------------連接服務端
rc = MQTTConnect(&client, &data);

printf("MQTTSubscribe ... ");
//3-------------訂閱主題substopic
rc = MQTTSubscribe(&client, "substopic", MQTT_QOS, messageArrived);
(void)sprintf_s(payload, sizeof(payload), "message number %d", count);
//4------------循環發布pubtopic主題 內容為message number+connt的計數值
MQTTPublish(&client, "pubtopic", &message)
//訂閱的回調函數輸出以下內容
printf("Message arrived on topic %.*s: %.*s ", data->topicName->lenstring.len,
data->topicName->lenstring.data,data->message->payloadlen,data->message->payload);

客戶B:開發板燒錄好代碼后,電腦串口工具連接開發板,會有連接MQTT及訂閱的信息(參照以上代碼),如下圖:


客戶A:顯示如下圖:


總結

本文從講解MQTT它是什么?原理是什么?到MQTT的應用開發(API函數接口調用例程),再到MQTT的驗證(Mosquitto軟件及EclipsePahoMQTT工具的使用)三個方面介紹了MQTT。希望通過本文介紹讓大家對MQTT有個感性認識。
需要說明的是通常我們使用的是MQTT的解決方案,即MQTT的一系列操作被封裝了,例如知識體系的智慧家居樣例,在與華為IOT平臺通信中,它們內部實現是基于MQTT協議搭建的。(智慧家居與華為IOT平臺的相關介紹,請查看文末鏈接)
本文章是OpenHarmony知識體系工作組(相關鏈接在文章末尾)為廣大開發者分享的文章。同時知識體系工作組結合日常生活,給開發者規劃了各種場景的Demo樣例,如智能家居場景、影音娛樂場景、運動健康場景等;歡迎廣大開發者一同參與OpenHarmony的開發,一起完善樣例,相互學習,相互進步。

相關鏈接

小熊派開發板學習路徑:

https://growing.openharmony.cn/mainPlay/learnPathMaps?id=19

小熊派開發板MQTT文檔:

https://gitee.com/bearpi/bearpi-hm_nano/blob/master/applications/BearPi/BearPi-HM_Nano/sample/D5_iot_mqtt/README.md

Windows + mosquitto搭建MQTT Broker:

https://blog.csdn.net/wallace89/article/details/125617330

OpenHarmony源碼獲取:

https://gitee.com/openharmony/docs/blob/master/zh-cn/device-dev/get-code/sourcecode-acquire.md

OpenHarmony三方庫MQTT:

https://gitee.com/openharmony-tpc/talkweb_mqtt

OpenHarmony知識體系工作組智慧家居開發樣例

https://gitee.com/openharmony-sig/knowledge_demo_smart_home

使用MQTT協議連華為IOT平臺

https://gitee.com/bearpi/bearpi-hm_nano/blob/master/applications/BearPi/BearPi-HM_Nano/sample/D6_iot_cloud_oc/README.md





原文標題:OpenHarmony開發之MQTT講解

文章出處:【微信公眾號:OpenAtom OpenHarmony】歡迎添加關注!文章轉載請注明出處。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 鴻蒙
    +關注

    關注

    57

    文章

    2464

    瀏覽量

    43603
  • OpenHarmony
    +關注

    關注

    26

    文章

    3802

    瀏覽量

    17708

原文標題:OpenHarmony開發之MQTT講解

文章出處:【微信號:gh_e4f28cfa3159,微信公眾號:OpenAtom OpenHarmony】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    基于小凌派RK2206開發板:OpenHarmony如何使用IoT接口控制ADC外設

    1、案例簡介本案例主要講解如何在小凌派-RK2206開發板上使用IoT庫的ADC接口,進行ADC編程開發。例程內容為創建一個任務,讀取按鍵的ADC值,并打印到串口。例程源代碼:https
    的頭像 發表于 04-10 16:00 ?194次閱讀
    基于小凌派RK2206<b class='flag-5'>開發</b>板:<b class='flag-5'>OpenHarmony</b>如何使用IoT接口控制ADC外設

    鴻蒙北向開發OpenHarmony4.1 DevEco Studio開發工具安裝與配置

    OpenHarmony4.1 DevEco Studio開發工具安裝與配置,鴻蒙北向開發入門必備!
    的頭像 發表于 02-07 17:35 ?510次閱讀
    鴻蒙北向<b class='flag-5'>開發</b><b class='flag-5'>OpenHarmony</b>4.1 DevEco Studio<b class='flag-5'>開發</b>工具安裝與配置

    MQTT協議深度應用:Air780E模組AT指令的創新實踐

    今天我講解的是關于4G模組AT指令MQTT應用,有興趣的朋友可以閱讀本文深度學習。
    的頭像 發表于 11-11 09:30 ?1567次閱讀
    <b class='flag-5'>MQTT</b>協議深度應用:Air780E模組AT指令的創新實踐

    OpenHarmony應用開發精品課程重磅來襲

    第一階段為期兩個月的10期課程,多位資深技術專家為你講解原理、分享經驗,帶領你一塊進行代碼實操,助力你從小白進階成為OpenHarmony應用開發高手。
    的頭像 發表于 11-02 08:03 ?447次閱讀
    <b class='flag-5'>OpenHarmony</b>應用<b class='flag-5'>開發</b>精品課程重磅來襲

    MQTT應用:Air780EP低功耗4G模組AT開發

    本文應各位大佬邀請,詳細講解Air780EP模組MQTT應用的多個AT命令。
    的頭像 發表于 10-25 17:27 ?575次閱讀
    <b class='flag-5'>MQTT</b>應用:Air780EP低功耗4G模組AT<b class='flag-5'>開發</b>

    觸覺智能Purple Pi OH鴻蒙開發板成功適配OpenHarmony5.0 Release,開啟新征程

    觸覺智能Purple Pi OH鴻蒙開發板,成功適配OpenHarmony5.0 Release版本!為大家帶來OpenHarmony5.0特性講解!關注觸覺智能,為大家帶來更多
    的頭像 發表于 10-25 10:51 ?781次閱讀
    觸覺智能Purple Pi OH鴻蒙<b class='flag-5'>開發</b>板成功適配<b class='flag-5'>OpenHarmony</b>5.0 Release,開啟新征程

    MQTT調試助手中文版(物聯網開發必備)

    MQTT調試助手中文版(物聯網開發必備)。?支持模擬設備鏈接各種MQTT云服務器、 ?阿里云、騰訊云、華為云、原子云、onenet等等。
    發表于 10-12 14:23 ?8次下載

    基于ArkTS語言的OpenHarmony APP應用開發:HelloOpenharmony

    1、程序簡介該程序是基于OpenHarmony標準系統編寫的UI應用類:HelloOpenHarmony。本案例是基于API9接口開發。本案例已在OpenHarmony凌蒙派-RK35
    的頭像 發表于 09-15 08:09 ?677次閱讀
    基于ArkTS語言的<b class='flag-5'>OpenHarmony</b> APP應用<b class='flag-5'>開發</b>:Hello<b class='flag-5'>Openharmony</b>

    OpenHarmony 明星開發板和應用招募啟動,等你來!

    為助力企業和開發者快速找到好用的開發板和應用,推動OpenHarmony生態發展,現啟動 “OpenHarmony 明星開發板和應用招募”評
    發表于 09-14 15:21

    基于ArkTS語言的OpenHarmony APP應用開發:簡易計數器

    例是基于API 9接口開發。 本案例已在OpenHarmony凌蒙派-RK3568開發板驗證通過,具體代碼可參考:https://gitee.com/Lockzhiner-Electronics
    發表于 09-14 13:38

    合宙Air780EP模塊——AT指令MQTT接入OneNET開發指南

    過程,Air780EP和MQTT是最佳拍檔,讓設備互聯變得輕松又靠譜。想不想試試這簡單又神奇的操作?那就來吧!本文詳細講解了基于合宙的Air80EP開發板,使用AT
    的頭像 發表于 08-19 16:40 ?2958次閱讀
    合宙Air780EP模塊——AT指令<b class='flag-5'>MQTT</b>接入OneNET<b class='flag-5'>開發</b>指南

    MQTT應用看這篇!合宙Air780EP_LuatOS_MQTT應用指南

    Air780EP 是合宙的低功耗4G模組之一,支持LuatOS的腳本二次開發,即使是不太懂技術的老板,也能輕松使用 Air780EP開發產品。 本文應各位大佬邀請,詳細講解了Air780EP 的
    的頭像 發表于 08-08 17:13 ?2557次閱讀
    <b class='flag-5'>MQTT</b>應用看這篇!合宙Air780EP_LuatOS_<b class='flag-5'>MQTT</b>應用指南

    名單公布!【書籍評測活動NO.38】OpenHarmony開發與實踐 | 基于紅莓RK2206開發

    未聯系,視為放棄本次試用評測資格! 本書特色 本書從系統概述、內核、適配移植、IoT組件開發、SimpleGUI顯示和開發示例等方面,詳細講解基于OpenHarmony的嵌入式系統
    發表于 07-19 10:57

    OpenHarmony開機優化

    、磁盤I/O等,并以圖表形式展示出來。 使用方法 參考文檔:OpenHarmony性能調優工具—boochart_小~Q-Laval社區 通過Bootchart工具,開發者可以深入了解系統的啟動過程,并
    發表于 07-01 16:39

    鴻蒙OpenHarmony【集成三方SDK】 (基于Hi3861開發板)

    OpenHarmony致力于打造一套更加開放完善的IoT生態系統,為此OpenHarmony規劃了一組目錄,用于將各廠商的SDK集成到OpenHarmony中。本文檔基于Hi3861開發
    的頭像 發表于 04-24 15:11 ?1339次閱讀
    鴻蒙<b class='flag-5'>OpenHarmony</b>【集成三方SDK】 (基于Hi3861<b class='flag-5'>開發</b>板)
    主站蜘蛛池模板: susu成人影院 | 夜夜操夜夜爱 | 深夜动态福利gif进出粗暴 | 欧日韩视频777888 | 午夜私人影院 | 羞羞影院男女午夜爽爽影视 | 久久伦子沙发 | 婷婷综合久久中文字幕 | www.五月激情| 午夜欧美日韩 | 亚洲色图激情 | 欧美黄色片在线观看 | 亚州视频一区 | 色屋在线 | 欧美成人猛男性色生活 | 亚洲一级毛片免费在线观看 | 激情网婷婷 | 国产成人综合日韩精品婷婷九月 | 夜夜操天天射 | 黄色大片三级 | 美女视频很黄很暴黄是免费的 | 天天看天天碰 | 成年男人永久免费看片 | 久久国产香蕉一区精品 | 井野雏田小樱天天被调教 | 四虎国产欧美成人影院 | 欧美在线一区二区三区 | aaaa日本| 一区二区三区亚洲 | xxxx日本69xxxxx | 国产片一级特黄aa的大片 | 91大神精品在线观看 | 爱操综合| 色综合天天综一个色天天综合网 | 五月婷婷综合激情 | 高清精品女厕在线观看 | 1000又爽又黄禁片 | 椎名空中文字幕一区二区 | 手机在线看片你懂得 | 老师啊灬啊灬用力啊快224视频 | 2021久久精品国产99国产精品 |