引子:很久以前就知道MQTT协议了,也知道该协议主要应用到物联网上,具备很多特点,但是一直是处于不知其意状态。今天有幸看到了一篇博文,然后自己将该博文里面的内容操作了一遍,同时将手上的CC3200开发板连接到CloudMQTT代理服务器上,以CC3200为客户端,订阅三个主题(控制三个LED灯),发布两个主题(按键SW2,SW3)。当然这也是有参考文献的,很久之前就做过实验,不过那时都是似懂非懂,今天重新理了一下,感觉大快人心。

参考博文:

1.MQTT学习笔记——MQTT协议体验 Mosquitto安装和使用

2.一步一步学习CC3200与MQTT服务器通讯

通过第一篇博文,可以直观的理解MQTT协议的通信模型,如图1所示:
图1:MQTT模型
这是一个很具体的应用模型,从中可以发现,整个框架中有三个角色: 服务器代理,订阅者,发布者。
在应用过程中:1、服务器代理首先搭好桥,供接下来的二者使用。2、订阅者向服务器进行主题订阅。3,发布者开始想服务器发布订阅者预定的主题消息。 注意,1必须先操作,否则后面两步无法执行。2,3谁先操作没关系,一般来说先操作2。就像从水库里接水一样,先准备好水桶再开龙头。
接下来是在操作中的截图,我在图片中进行了相关的解释。
图2是当发布者发布消息后,MQTT协议的执行过程。
图2
图3为订阅者订阅主题,发布者发布主题,这二者与服务器的交互信息。
图3
进行完上面的试验后,会找到了一点感觉,趁热打铁,使用CC3200进行试验,同时去看代码是如何实现的。
本实验中,将CC3200作为客户端,注意客户端既可以发布消息,也可以订阅消息。使用 CloudMQTT作为服务器代理,在使用它之前,需要进行先关的申请注册,得到相关信息,如图4
图4
相关的数据在代码中会使用到。这里具体如何更改代码不做详细讲解,很简单,根据提供的参考博文可以完成。我们这里主要看代码是如何实现发布,订阅功能的。其实这个过程,就是将上面第一个实验的过程用代码实现。
首先看代码中的宏定义:
#define SERVER_ADDRESS          "m13.cloudmqtt.com"
//#define PORT_NUMBER             1883
#define PORT_NUMBER             17020

#define MAX_BROKER_CONN         1

#define SERVER_MODE             MQTT_3_1
/*Specifying Receive time out for the Receive task*/
#define RCV_TIMEOUT             30

/*Background receive task priority*/
#define TASK_PRIORITY           3

/* Keep Alive Timer value*/
#define KEEP_ALIVE_TIMER        25

/*Clean session flag*/
#define CLEAN_SESSION           true

/*Retain Flag. Used in publish message. */
#define RETAIN                  1

/*Defining Publish Topic*/
#define PUB_TOPIC_FOR_SW3       "/cc3200/ButtonPressEvtSw3"
#define PUB_TOPIC_FOR_SW2       "/cc3200/ButtonPressEvtSw2"

/*Defining Number of topics*/
#define TOPIC_COUNT             3

/*Defining Subscription Topic Values*/
#define TOPIC1                  "/cc3200/ToggleLEDCmdL1"
#define TOPIC2                  "/cc3200/ToggleLEDCmdL2"
#define TOPIC3                  "/cc3200/ToggleLEDCmdL3"

/*Defining QOS levels*/
#define QOS0                    0
#define QOS1                    1
#define QOS2                    2

上面定义了发布和订阅的主题,其他的参数,如QOS,可以看MQTT手册,这个时候去看手册,会轻松点。
下面是 作为客户端连接服务器代理的代码:
connect_config usr_connect_config[] =
{
    {
        {
            {
                SL_MQTT_NETCONN_URL,
                SERVER_ADDRESS,
                PORT_NUMBER,
                0,
                0,
                0,
                NULL
            },
            SERVER_MODE,
            true,
        },
        NULL,
        "user1",
        //NULL,
        //NULL,
        " User",
        " Password",
        
        true,
        KEEP_ALIVE_TIMER,
        {Mqtt_Recv, sl_MqttEvt, sl_MqttDisconnect},//huidiaohuanshu
        TOPIC_COUNT,
        {TOPIC1, TOPIC2, TOPIC3},
        {QOS2, QOS2, QOS2},
        {WILL_TOPIC,WILL_MSG,WILL_QOS,WILL_RETAIN},
        false
    }
最后看下主要的功能函数,具体代码不看,主要说下其功能。
1、Mqtt_Recv(void *app_hndl, const char  *topstr, long top_len, const void *payload,
          long pay_len, bool dup,unsigned char qos, bool retain);//cc3200作为客户端的接受函数,该函数内,会对接受的消息进行处理,来触发函数5,以实现控制LED的功能。

2、static void sl_MqttDisconnect(void *app_hndl);  //断开连接

3、void pushButtonInterruptHandler2();   //函数3,4都是CC3200按键时,进行发布的触发函数
4、void pushButtonInterruptHandler3();
5、void ToggleLedState(ledEnum LedNum);//led 处理函数
6、void TimerPeriodicIntHandler(void); ?//心跳函数,当服务器代码没有收到发布者和订阅者的消息时,服务器会与客户端会维持心跳连接
7、void MqttClient(void *pvParameters);//客户端程序,此程序功能为:
   1. Initializes network driver and connects to the default AP
   2. Initializes the mqtt library and set up MQTT connection configurations
   3. set up the button events and their callbacks(for publishing)
   4. handles the callback signals
现在展现实验结果(图5):
图5
可以看到,在web上发送/cc3200/ToggleLEDCmdL1 时,CC3200接到消息,并且LED1状态翻转。(当然你看不到,哈)
以上是MQTT协议应用的初步收获,这个经历激起了我的兴趣,希望你也是。
拓展阅读: http://www.hivemq.com/blog/mqtt-essentials-part-4-mqtt-publish-subscribe-unsubscribe

MQTT协议应用实例相关推荐

  1. MQTT协议学习:3、MQTT客户端实例

    MQTT协议学习:3.MQTT客户端实例 文章目录 MQTT协议学习:3.MQTT客户端实例 1. 前言 2. Paho MQTT (1). Go客户端实例 (2). Python客户端实例 (3). ...

  2. Android Mqtt协议(连接、发布、订阅)实例、亲测可用

    实现步骤: 1.项目根目录build.gradle中添加: allprojects {repositories {...maven{ url "https://repo.eclipse.or ...

  3. 基于mqtt协议的消息推送服务器,基于 MQTT 协议的推送服务

    一.简述 MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议),是一种基于发布/订阅(publish/subscribe)模式的"轻量级& ...

  4. 云服务器mqtt协议,云服务器mqtt协议

    云服务器mqtt协议 内容精选 换一换 IPv6的使用,可以有效弥补IPv4网络地址资源有限的问题.如果当前云服务器使用IPv4,那么启用IPv6后,云服务器可在双栈模式下运行,即云服务器可以拥有两个 ...

  5. 阿里云物联网平台 > 设备接入 > 使用开放协议自主接入 > MQTT协议接入 >

    MQTT-WebSocket连接通信 更新时间:2020-09-08 16:57:21 编辑我的收藏 本页目录 背景信息 操作步骤 物联网平台支持基于WebSocket的MQTT协议.您可以首先使用W ...

  6. 转:XMPP协议、MQTT协议、HTTP协议、CoAP协议的基本比较

    一.先看下相关国外的专业数据对四大协议的比较: Protocol                                    CoAP                         XMP ...

  7. mqtt协议 阿里云物联网平台

    mqtt协议 阿里云物联网平台 MQTT报文结构 MQTT---CONNECT连接服务器报文 固定报头 可变报头 有效载荷 客户端ID 用户名 密码 转换 通过网络调试助手连接阿里云服务器 远程主机地 ...

  8. ESP8266连接阿里云--MQTT协议

    ESP8266连接阿里云–MQTT协议   MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议),是一种基于发布/订阅(Publish/Subscr ...

  9. 【4G模块】中移物联ML302 + GD32F407 使用支持MQTT协议AT指令接入阿里云物联网平台

    目录 〇.目的.GD32.ML302相关简介 0.目的: 1.ML302: 2.LTE Cat.1: 3.GD32F407 一.GD芯片创建工程写驱动:LED.串口4.4G模块 1.创建工程 2.LE ...

最新文章

  1. LeetCode Decode String(栈和递归)
  2. Windows之Chocolatey:windows下的apt-get即Chocolatey简介、安装、使用方法之详细攻略
  3. OpenCV使用Kinect和其他OpenNI兼容的深度传感器
  4. EF增删查改加执行存储过程和sql语句,多种方法汇总
  5. xshell终端中文乱码解决
  6. 王者归来!C语言击败Python勇夺“2019年度编程语言”冠军
  7. python3和php7哪个好_性能是Flask的3倍!比PHP7还快!这个Python框架你值得拥有!
  8. Tomcat 或JBOSS java.lang.ArrayIndexOutOfBoundsException: 8192 解决方案【转】
  9. 国庆活动延长三天!快来领取你的数据技术嘉年华门票!
  10. ssm项目配置文件中的包扫描bean,排除特定bean的扫描
  11. Excel表中的数据导入到数据库中
  12. mongo与sql对比--来自网上
  13. WPF/Silverlight深度解决方案:(四)基于像素的图像合成(For WPF)
  14. Java方法重载注意事项
  15. base64的原理及优缺点
  16. BIM信息化综合管理运营平台、BIM模型、数据首页、工单管理、建设建筑、工单信息、设备管理、工地、设备台账、运维标准、巡检管理、巡检计划、巡检任务、维保管理、能耗管理、3d模型、文档管理、工作日报
  17. journalctl日志工具使用方法
  18. redis 中pipline,mset, mget使用对比
  19. 接地电阻检测项目带电检测技术方案
  20. Linux文件加密系统-eCryptfs

热门文章

  1. 消息中间件----内存数据库 Redis7(第3章 Redis 命令)
  2. [PL/SQL] 请教大家一个问题,存储过程中需要几个commit?
  3. java实现word文件和xml文件互转
  4. 操原作业(一)之Ubuntu编译新内核
  5. 解决Themida加壳程序在VMware虚拟机无法运行问题_HS_TMD
  6. android opengl es 圆锥纹理贴图
  7. 蓝色满天星中的小白兔
  8. 杜克大学计算机专业本科入学条件,杜克大学计算机专业基本信息详解以及入学要求汇总介绍...
  9. 小白也能看懂的网络基础 | 02 什么是连接设备?
  10. java咖啡标志_50个包含咖啡的创意LOGO设计