国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

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】歡迎添加關注!文章轉載請注明出處。

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

    關注

    60

    文章

    2963

    瀏覽量

    45883
  • OpenHarmony
    +關注

    關注

    33

    文章

    3952

    瀏覽量

    21095

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

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

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    基于凌羽派的OpenHarmony北向應用開發:Hello World 示例應用

    本示例是基于OpenHarmony開發的第一個簡單應用,用于展示如何創建、構建和部署一個基本的應用程序。環境配置如下所示:API:18SDK:OpenHarmony-v5.
    的頭像 發表于 02-25 10:23 ?157次閱讀
    基于凌羽派的<b class='flag-5'>OpenHarmony</b>北向應用<b class='flag-5'>開發</b>:Hello World 示例應用

    基于LuatOS的MQTT物聯網通信全解

    在構建物聯網終端設備時,通信協議的選擇直接決定系統的穩定性與擴展性。LuatOS通過內置MQTT客戶端支持,使開發者能以極少代碼實現設備上云。本文將從協議原理到代碼實現,全面解析基于LuatOS
    的頭像 發表于 01-29 19:42 ?171次閱讀
    基于LuatOS的<b class='flag-5'>MQTT</b>物聯網通信全解

    #OpenHarmony HDC調試

    OpenHarmony
    視美泰
    發布于 :2026年01月16日 09:46:28

    #OpenHarmony 開發環境準備

    OpenHarmony
    視美泰
    發布于 :2026年01月16日 09:44:31

    #OpenHarmony 鏡像燒錄

    OpenHarmony
    視美泰
    發布于 :2026年01月16日 09:42:36

    #OpenHarmony 系統概述

    OpenHarmony
    視美泰
    發布于 :2026年01月16日 09:39:20

    DR1平臺Linux應用開發指南:含GDB調試、Python及MQTT實戰

    本文為創龍科技DR1 系列評估板 Linux 應用開發手冊,系統講解開發環境搭建、GDB 調試、多類型應用案例及 MQTT 通信實現。核心內容包括 LinuxSDK 與工具鏈配置、GDB 遠程調試
    的頭像 發表于 01-05 16:48 ?4539次閱讀
    DR1平臺Linux應用<b class='flag-5'>開發</b>指南:含GDB調試、Python及<b class='flag-5'>MQTT</b>實戰

    Air780EPM嵌入式開發:LuatOS下的MQTT通信實踐

    通過LuatOS腳本在Air780EPM開發板上實現MQTT通信,是物聯網設備開發中高效且便捷的解決方案。 一、MQTT 協議詳解 ? 1.1 什么是
    的頭像 發表于 09-30 16:11 ?1822次閱讀
    Air780EPM嵌入式<b class='flag-5'>開發</b>:LuatOS下的<b class='flag-5'>MQTT</b>通信實踐

    LuatOS嵌入式開發實戰:Air780EPM與MQTT通信

    ?本教程聚焦于LuatOS在Air780EPM開發板上的應用,演示如何通過腳本實現MQTT協議通信,助力物聯網設備快速聯網。 一、MQTT 協議詳解 ? 1.1 什么是 MQTT
    的頭像 發表于 09-29 18:10 ?520次閱讀
    LuatOS嵌入式<b class='flag-5'>開發</b>實戰:Air780EPM與<b class='flag-5'>MQTT</b>通信

    【創龍TL3562-MiniEVM開發板試用體驗】--MQTT通訊

    本篇講述開發MQTT通訊。 MQTT(Message Queuing Telemetry Transport,消息隊列遙測傳輸協議),是一種基于發布訂閱(Publish/Subscribe)模式
    發表于 08-17 22:45

    實戰指南:AirTalk+MQTT實現雙向語音對講的開發全流程

    開發支持雙向語音對講的AirTalk應用?本文以實戰為導向,講解如何利用MQTT協議的發布/訂閱模式實現實時通信。從設備連接、主題設計到語音數據采集與推送,結合示例代碼和配置參數,助你一步步搭建
    的頭像 發表于 07-28 17:41 ?924次閱讀
    實戰指南:AirTalk+<b class='flag-5'>MQTT</b>實現雙向語音對講的<b class='flag-5'>開發</b>全流程

    請問下,openharmony支持哪一款龍芯的開發板?有沒有開源的龍芯的openharmony源碼?

    想買個2k0300的開發板學習龍芯和openharmony,愣是沒有看到提供openharmony源碼的,也沒與看到開源的代碼。gitee上,openharmony的龍芯sig倉庫也是
    發表于 04-26 13:06

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

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

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

    本文介紹OpenHarmony5.0 DevEco Studio開發工具安裝與配置,鴻蒙北向開發入門必備!由觸覺智能Purple Pi OH鴻蒙開發板演示。搭載了瑞芯微RK3566四核
    的頭像 發表于 03-28 18:05 ?1622次閱讀
    鴻蒙北向<b class='flag-5'>開發</b><b class='flag-5'>OpenHarmony</b>5.0 DevEco Studio<b class='flag-5'>開發</b>工具安裝與配置

    MQTT物聯網平臺有哪些?有哪些功能?

    (IoT)。關于MQTT物聯網平臺及其功能,可以歸納如下: MQTT物聯網平臺 MQTT物聯網平臺通過提供一種標準化的協議和平臺,實現了消息的可靠傳輸、設備連接管理、數據存儲和分析等功能,方便
    的頭像 發表于 03-15 14:23 ?1454次閱讀
    <b class='flag-5'>MQTT</b>物聯網平臺有哪些?有哪些功能?