0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

MQTT开发基础介绍

瑞萨嵌入式小百科 来源:瑞萨MCU小百科 2025-02-07 13:51 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

13.6.2 MQTT协议形象理解

使用电视台、记者、观众三个角色来类比更容易理解:

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

电视台:在MQTT里被称为服务器(broker)。

有如下作用:

①接受来自客户的网络连接;//记者/观众连接进电视台

②接受客户发布的应用信息;//接受记者发布的消息

③处理来自客户端的订阅和退订请求;//处理观众的订阅、退订请求

④向订阅的客户转发应用程序消息;//给观众转发记者报道的消息

记者和观众都是客户端,记者也可以当观众,观众也可以当记者。

有如下作用:

①发布信息;//publish,记者

②订阅消息;//Subscribe,观众

③退订或删除消息;

④断开与服务器连接

13.6.3 PC MQTT工具使用

1.安装软件

软件在网盘目录下:

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

在PC上,需要运行MQTT服务器软件emqx、MQTT客户端软件MQTTX。

对于emqx,把“emqx-5.3.0-windows-amd64.zip”解压到一个无中文的目录即可。假设解压到了“d:abc”下。

对于MQTTX,双击安装“MQTTX-Setup-1.7.2-x64.exe”即可。

2.启动与停止MQTT服务

假设emqx安装目录为“D:abcemqx-5.3.0-windows-amd64”,在命令行执行以下命令启动MQTT服务:

左右滑动查看完整内容

D:abcemqx-5.3.0-windows-amd64inemqx start

然后可通过浏览器访问“http://localhost:18083”以访问 EMQX Dashboard管理控制台,进行设备连接与相关指标监控管理。默认用户名为“admin”,密码为“public”

如果要停止MQTT服务,在命令行下执行如下命令:

左右滑动查看完整内容

D:abcemqx-5.3.0-windows-amd64inemqx stop

3.使用MQTT客户端

运行MQTTX后,如下图操作建立连接:

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

建立连接后,如下图操作订阅主题(比如“/topic/humiture”):

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

然后,可以自己给自己发布消息,如下图操作:

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

13.6.4 MQTT测试程序

本节源码位于如下目录:

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

paho.mqtt.c.tar.bz2是库、示例代码。

mqtt_test是本节对应的源码。

测试程序“mqtt_test.c”核心源码如下:

1.定义一些参数

左右滑动查看完整内容

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

代码如下:

左右滑动查看完整内容

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行,创建一个客户端。

第71行,设置回调函数:连接断开时的回调函数、收到消息的回调函数、消息发布成功后的回调函数。

第78~81行,设置用户名、密码。

第82行,连接broker。

3.订阅消息

代码如下:

左右滑动查看完整内容

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 }

当接收到订阅的消息时,前面第71行设置的“收到消息的回调函数”被调用,代码如下:

左右滑动查看完整内容

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 }

这个函数仅仅是把消息打印出来。

4.发布消息

代码如下:

左右滑动查看完整内容

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行:设置消息。消息保存在buf里。

第119行:发布消息。

第125行:等待消息发送完毕。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 服务器
    +关注

    关注

    13

    文章

    10093

    浏览量

    90888
  • 客户端
    +关注

    关注

    1

    文章

    305

    浏览量

    17415
  • MQTT
    +关注

    关注

    5

    文章

    721

    浏览量

    24786
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    MQTT协议介绍之二:连接

    在机智云的整个架构里面,如上图,GAgent实现了从模块到云端的数据交互,其实GAgent里面就是用MQTT协议实现的,可见MQTT协议的重要性。今天介绍MQTT的发布、订阅和取消订阅
    发表于 08-25 19:57

    MQTT协议介绍之一:发布/订阅

    MQTT协议的内容。这里先介绍MQTT信息和协议背景。MQTT介绍MQTT是客户端服务器发布/订
    发表于 08-25 19:58

    什么是MQTTMQTT功能介绍

    RT-ThreadMQTT客户端功能特点MQTT简述MQTT功能介绍MQTT客户端MQTT协议中的方法
    发表于 03-30 07:06

    如何利用RT-Thread开发的PahoMQTT软件包与MQTT服务器进行通信?

    本教程就是介绍如何利用 RT-Thread 开发的 Paho MQTT 软件包与 MQTT 服务器进行通信的。
    发表于 03-30 08:09

    哪位大神可以详细介绍一下MQTT API吗?

    MQTT API介绍
    发表于 04-02 07:24

    MQTT协议介绍与移植笔记

    # 硬件智能之 MQTT协议介绍与移植笔记(一)##MQTT是什么?MQTT(MessageQueuing Telemetry Transport Protocol)即全称消息队列遥感
    发表于 08-20 07:08

    MQTT协议及其应用开发介绍

    物联网是指什么?物联网通信协议包括哪些?MQTT协议是由哪些部分组成的?
    发表于 09-24 07:44

    OpenHarmony开发MQTT讲解

    相信MQTT这个名称大家都不陌生,物联网的开发必然会遇到MQTT相关知识的应用。那么什么是MQTT?它有什么特点?它能解决什么问题?它是如何工作的?OpenAtom OpenHarmo
    发表于 11-16 12:05

    寻找银弹倒计时:首个 MQTT开发板众筹最后 3 天

    小e开发板自众筹开始便受到业内的高度关注——小e开发板拥有基于IBM的MQTT协议开发MQTT+技术,这是打破物联网产品
    发表于 08-04 16:30 1789次阅读
    寻找银弹倒计时:首个 <b class='flag-5'>MQTT</b><b class='flag-5'>开发</b>板众筹最后 3 天

    快速开发MQTT(二)初识MQTT

    基本介绍 在上篇文章《快速开发MQTT(一)电子工程师眼中的MQTT》中,对比了串口连接和TCP连接,我们知道实现了连接和数据收发之后,接下来就是要考虑数据的封装、组包的事了。 比如U
    的头像 发表于 01-10 11:15 5939次阅读

    Linux应用开发【第十六章】MQTT协议分析应用开发

    文章目录 16 MQTT协议分析应用开发 16.1 mqtt协议介绍 16.1.1 概述 16.1.2 特点 16.1.3 应用 16.2 mqtt
    的头像 发表于 12-10 19:32 1231次阅读
    Linux应用<b class='flag-5'>开发</b>【第十六章】<b class='flag-5'>MQTT</b>协议分析应用<b class='flag-5'>开发</b>

    OpenHarmony开发MQTT讲解

    MQTT这个名称大家都不陌生,物联网的开发必然会遇到MQTT相关知识的应用。那么什么是MQTT?它有什么特点?它能解决什么问题?它是如何工作的?OpenAtom OpenHarmony
    的头像 发表于 11-15 22:50 1553次阅读

    全志T3开发板 ARM CortexA7——MQTT通信协议

    本文主要介绍基于T3处理器的MQTT通信协议开发案例,讲解内容主要包括了MQTT通信协议简介、概述、应用场景以及Mosquitto工具安装、mqtt
    发表于 06-09 14:50 6次下载

    MQTT调试助手中文版(物联网开发必备)

    MQTT调试助手中文版(物联网开发必备)。 支持模拟设备链接各种MQTT云服务器、  阿里云、腾讯云、华为云、原子云、onenet等等。
    发表于 10-12 14:23 9次下载

    MQTT介绍

    一、什么是MQTT 物联网(IoT)发展迅猛,传感器、网关、云平台之间如何高效通信成了核心问题。MQTT(Message Queuing Telemetry Transport)作为一种轻量级
    的头像 发表于 07-14 09:34 3502次阅读
    <b class='flag-5'>MQTT</b><b class='flag-5'>介绍</b>