一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

MQTT開發(fā)基礎(chǔ)介紹

瑞薩MCU小百科 ? 來源:瑞薩MCU小百科 ? 2025-02-07 13:51 ? 次閱讀

13.6.2 MQTT協(xié)議形象理解

使用電視臺、記者、觀眾三個角色來類比更容易理解:

af06f254-e509-11ef-9310-92fbcf53809c.png

電視臺:在MQTT里被稱為服務(wù)器(broker)。

有如下作用:

①接受來自客戶的網(wǎng)絡(luò)連接;//記者/觀眾連接進(jìn)電視臺

②接受客戶發(fā)布的應(yīng)用信息;//接受記者發(fā)布的消息

③處理來自客戶端的訂閱和退訂請求;//處理觀眾的訂閱、退訂請求

④向訂閱的客戶轉(zhuǎn)發(fā)應(yīng)用程序消息;//給觀眾轉(zhuǎn)發(fā)記者報(bào)道的消息

記者和觀眾都是客戶端,記者也可以當(dāng)觀眾,觀眾也可以當(dāng)記者。

有如下作用:

①發(fā)布信息;//publish,記者

②訂閱消息;//Subscribe,觀眾

③退訂或刪除消息;

④斷開與服務(wù)器連接

13.6.3 PC MQTT工具使用

1.安裝軟件

軟件在網(wǎng)盤目錄下:

af15e6d8-e509-11ef-9310-92fbcf53809c.png

在PC上,需要運(yùn)行MQTT服務(wù)器軟件emqx、MQTT客戶端軟件MQTTX。

對于emqx,把“emqx-5.3.0-windows-amd64.zip”解壓到一個無中文的目錄即可。假設(shè)解壓到了“d:abc”下。

對于MQTTX,雙擊安裝“MQTTX-Setup-1.7.2-x64.exe”即可。

2.啟動與停止MQTT服務(wù)

假設(shè)emqx安裝目錄為“D:abcemqx-5.3.0-windows-amd64”,在命令行執(zhí)行以下命令啟動MQTT服務(wù):

左右滑動查看完整內(nèi)容

D:abcemqx-5.3.0-windows-amd64inemqx start

然后可通過瀏覽器訪問“http://localhost:18083”以訪問 EMQX Dashboard管理控制臺,進(jìn)行設(shè)備連接與相關(guān)指標(biāo)監(jiān)控管理。默認(rèn)用戶名為“admin”,密碼為“public”

如果要停止MQTT服務(wù),在命令行下執(zhí)行如下命令:

左右滑動查看完整內(nèi)容

D:abcemqx-5.3.0-windows-amd64inemqx stop

3.使用MQTT客戶端

運(yùn)行MQTTX后,如下圖操作建立連接:

af20038e-e509-11ef-9310-92fbcf53809c.png

建立連接后,如下圖操作訂閱主題(比如“/topic/humiture”):

af2ac72e-e509-11ef-9310-92fbcf53809c.png

然后,可以自己給自己發(fā)布消息,如下圖操作:

af36b3fe-e509-11ef-9310-92fbcf53809c.png

13.6.4 MQTT測試程序

本節(jié)源碼位于如下目錄:

af4506fc-e509-11ef-9310-92fbcf53809c.png

paho.mqtt.c.tar.bz2是庫、示例代碼。

mqtt_test是本節(jié)對應(yīng)的源碼。

測試程序“mqtt_test.c”核心源碼如下:

1.定義一些參數(shù)

左右滑動查看完整內(nèi)容

22 #define ADDRESS "tcp://192.168.5.10:1883"
23 #define CLIENTID "ExampleClientSub"
24 #define TOPIC_SUBSCRIBE "/iot/down"
25 #define TOPIC_PUBLISH "/iot/up"
26 #define QOS 1
27 #define TIMEOUT 10000L
28
29 #define USER_NAME "100ask"
30 #define PASSWORD "100ask"

2.連接broker

代碼如下:

左右滑動查看完整內(nèi)容

57 int main(int argc, char* argv[])
58 {
59 MQTTClient client;
60 MQTTClient_connectOptions conn_opts = MQTTClient_connectOptions_initializer;
61 int rc;
62
63 if ((rc = MQTTClient_create(&client, ADDRESS, CLIENTID,
64 MQTTCLIENT_PERSISTENCE_NONE, NULL)) != MQTTCLIENT_SUCCESS)
65 {
66 printf("Failed to create client, return code %d
", rc);
67 rc = EXIT_FAILURE;
68 goto exit;
69 }
70
71 if ((rc = MQTTClient_setCallbacks(client, NULL, connlost, msgarrvd, delivere
d)) != MQTTCLIENT_SUCCESS)
72 {
73 printf("Failed to set callbacks, return code %d
", rc);
74 rc = EXIT_FAILURE;
75 goto destroy_exit;
76 }
77
78 conn_opts.keepAliveInterval = 20;
79 conn_opts.cleansession = 1;
80 conn_opts.username = USER_NAME;
81 conn_opts.password = PASSWORD;
82 if ((rc = MQTTClient_connect(client, &conn_opts)) != MQTTCLIENT_SUCCESS)
83 {
84 printf("Failed to connect, return code %d
", rc);
85 rc = EXIT_FAILURE;
86 goto destroy_exit;
87 }

第63行,創(chuàng)建一個客戶端。

第71行,設(shè)置回調(diào)函數(shù):連接斷開時(shí)的回調(diào)函數(shù)、收到消息的回調(diào)函數(shù)、消息發(fā)布成功后的回調(diào)函數(shù)。

第78~81行,設(shè)置用戶名、密碼。

第82行,連接broker。

3.訂閱消息

代碼如下:

左右滑動查看完整內(nèi)容

91 if ((rc = MQTTClient_subscribe(client, TOPIC_SUBSCRIBE, QOS)) != MQTTCLIENT_SU
CCESS)
92 {
93 printf("Failed to subscribe, return code %d
", rc);
94 rc = EXIT_FAILURE;
95 }

當(dāng)接收到訂閱的消息時(shí),前面第71行設(shè)置的“收到消息的回調(diào)函數(shù)”被調(diào)用,代碼如下:

左右滑動查看完整內(nèi)容

40 int msgarrvd(void *context, char *topicName, int topicLen, MQTTClient_message *mes
sage)
41 {
42 printf("Message arrived
");
43 printf(" topic: %s
", topicName);
44 printf(" message: %.*s
", message->payloadlen, (char*)message->payload);
45 MQTTClient_freeMessage(&message);
46 MQTTClient_free(topicName);
47 return 1;
48 }

這個函數(shù)僅僅是把消息打印出來。

4.發(fā)布消息

代碼如下:

左右滑動查看完整內(nèi)容

98 int ch;
99 int cnt = 0;
100 MQTTClient_message pubmsg = MQTTClient_message_initializer;
101 char buf[100];
102 MQTTClient_deliveryToken token;
103
104 while (1)
105 {
106 ch = getchar();
107
108 if (ch =='Q' || ch == 'q')
109 {
110 break;
111 }
112
113 sprintf(buf, "publish %d", cnt++);
114 pubmsg.payload = buf;
115 pubmsg.payloadlen = (int)strlen(buf);
116 pubmsg.qos = QOS;
117 pubmsg.retained = 0;
118
119 if ((rc = MQTTClient_publishMessage(client, TOPIC_PUBLISH, &pubmsg, &t
oken)) != MQTTCLIENT_SUCCESS)
120 {
121 printf("Failed to publish message, return code %d
", rc);
122 continue;
123 }
124
125 rc = MQTTClient_waitForCompletion(client, token, TIMEOUT);
126 printf("Message with delivery token %d delivered
", token); 
127 }

第100、113~117行:設(shè)置消息。消息保存在buf里。

第119行:發(fā)布消息。

第125行:等待消息發(fā)送完畢。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • 服務(wù)器
    +關(guān)注

    關(guān)注

    12

    文章

    9596

    瀏覽量

    86969
  • 客戶端
    +關(guān)注

    關(guān)注

    1

    文章

    296

    瀏覽量

    16936
  • MQTT
    +關(guān)注

    關(guān)注

    5

    文章

    662

    瀏覽量

    23358

原文標(biāo)題:MQTT開發(fā)基礎(chǔ)介紹——RZ MPU工業(yè)控制教程連載(54)

文章出處:【微信號:瑞薩MCU小百科,微信公眾號:瑞薩MCU小百科】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    MQTT協(xié)議介紹之二:連接

    在機(jī)智云的整個架構(gòu)里面,如上圖,GAgent實(shí)現(xiàn)了從模塊到云端的數(shù)據(jù)交互,其實(shí)GAgent里面就是用MQTT協(xié)議實(shí)現(xiàn)的,可見MQTT協(xié)議的重要性。今天介紹MQTT的發(fā)布、訂閱和取消訂閱
    發(fā)表于 08-25 19:57

    MQTT協(xié)議介紹之一:發(fā)布/訂閱

    MQTT協(xié)議的內(nèi)容。這里先介紹MQTT信息和協(xié)議背景。MQTT介紹MQTT是客戶端服務(wù)器發(fā)布/訂
    發(fā)表于 08-25 19:58

    什么是MQTT?MQTT功能介紹

    RT-ThreadMQTT客戶端功能特點(diǎn)MQTT簡述MQTT功能介紹MQTT客戶端MQTT協(xié)議中的方法
    發(fā)表于 03-30 07:06

    如何利用RT-Thread開發(fā)的PahoMQTT軟件包與MQTT服務(wù)器進(jìn)行通信?

    本教程就是介紹如何利用 RT-Thread 開發(fā)的 Paho MQTT 軟件包與 MQTT 服務(wù)器進(jìn)行通信的。
    發(fā)表于 03-30 08:09

    哪位大神可以詳細(xì)介紹一下MQTT API嗎?

    MQTT API介紹
    發(fā)表于 04-02 07:24

    MQTT協(xié)議介紹與移植筆記

    # 硬件智能之 MQTT協(xié)議介紹與移植筆記(一)##MQTT是什么?MQTT(MessageQueuing Telemetry Transport Protocol)即全稱消息隊(duì)列遙感
    發(fā)表于 08-20 07:08

    MQTT協(xié)議及其應(yīng)用開發(fā)介紹

    物聯(lián)網(wǎng)是指什么?物聯(lián)網(wǎng)通信協(xié)議包括哪些?MQTT協(xié)議是由哪些部分組成的?
    發(fā)表于 09-24 07:44

    OpenHarmony開發(fā)MQTT講解

    相信MQTT這個名稱大家都不陌生,物聯(lián)網(wǎng)的開發(fā)必然會遇到MQTT相關(guān)知識的應(yīng)用。那么什么是MQTT?它有什么特點(diǎn)?它能解決什么問題?它是如何工作的?OpenAtom OpenHarmo
    發(fā)表于 11-16 12:05

    基于STM32的節(jié)點(diǎn)端及開發(fā)環(huán)境介紹

    第一節(jié):基于STM32的節(jié)點(diǎn)端介紹? 硬件平臺,軟件開發(fā)環(huán)境? 第二節(jié):使用Paho MQTT客戶端協(xié)議棧直連阿里云IoT平臺? 適用于資源受限的節(jié)點(diǎn)設(shè)備? 第三節(jié):使用Linkkit C-SDK和TLS通過
    發(fā)表于 09-11 07:46

    尋找銀彈倒計(jì)時(shí):首個 MQTT開發(fā)板眾籌最后 3 天

    小e開發(fā)板自眾籌開始便受到業(yè)內(nèi)的高度關(guān)注——小e開發(fā)板擁有基于IBM的MQTT協(xié)議開發(fā)MQTT+技術(shù),這是打破物聯(lián)網(wǎng)產(chǎn)品
    發(fā)表于 08-04 16:30 ?1668次閱讀
    尋找銀彈倒計(jì)時(shí):首個 <b class='flag-5'>MQTT</b><b class='flag-5'>開發(fā)</b>板眾籌最后 3 天

    快速開發(fā)MQTT(二)初識MQTT

    基本介紹 在上篇文章《快速開發(fā)MQTT(一)電子工程師眼中的MQTT》中,對比了串口連接和TCP連接,我們知道實(shí)現(xiàn)了連接和數(shù)據(jù)收發(fā)之后,接下來就是要考慮數(shù)據(jù)的封裝、組包的事了。 比如U
    的頭像 發(fā)表于 01-10 11:15 ?5512次閱讀

    Linux應(yīng)用開發(fā)【第十六章】MQTT協(xié)議分析應(yīng)用開發(fā)

    文章目錄 16 MQTT協(xié)議分析應(yīng)用開發(fā) 16.1 mqtt協(xié)議介紹 16.1.1 概述 16.1.2 特點(diǎn) 16.1.3 應(yīng)用 16.2 mqtt
    的頭像 發(fā)表于 12-10 19:32 ?834次閱讀
    Linux應(yīng)用<b class='flag-5'>開發(fā)</b>【第十六章】<b class='flag-5'>MQTT</b>協(xié)議分析應(yīng)用<b class='flag-5'>開發(fā)</b>

    OpenHarmony開發(fā)MQTT講解

    MQTT這個名稱大家都不陌生,物聯(lián)網(wǎng)的開發(fā)必然會遇到MQTT相關(guān)知識的應(yīng)用。那么什么是MQTT?它有什么特點(diǎn)?它能解決什么問題?它是如何工作的?OpenAtom OpenHarmony
    的頭像 發(fā)表于 11-15 22:50 ?1237次閱讀

    全志T3開發(fā)板 ARM CortexA7——MQTT通信協(xié)議

    本文主要介紹基于T3處理器的MQTT通信協(xié)議開發(fā)案例,講解內(nèi)容主要包括了MQTT通信協(xié)議簡介、概述、應(yīng)用場景以及Mosquitto工具安裝、mqtt
    發(fā)表于 06-09 14:50 ?6次下載

    MQTT調(diào)試助手中文版(物聯(lián)網(wǎng)開發(fā)必備)

    MQTT調(diào)試助手中文版(物聯(lián)網(wǎng)開發(fā)必備)。?支持模擬設(shè)備鏈接各種MQTT云服務(wù)器、 ?阿里云、騰訊云、華為云、原子云、onenet等等。
    發(fā)表于 10-12 14:23 ?8次下載