C/C++开发,基于IBM纯 c标准MQTT源码,实现纯C语言访问阿里云物联网平台开发案例

本文详细介绍了如何使用C语言基于IBM的MQTT库连接阿里云物联网平台,涵盖了MQTT协议背景、阿里云平台操作、MQTT工程设计及程序编译测试。内容包括MQTT的特性、阿里云物联网平台的免费实例限制,以及通过MQTT.fx模拟设备进行连接、订阅和发布消息的步骤。
摘要由CSDN通过智能技术生成

目录

一、MQTT协议简介

二、阿里云物联网平台

       2.1  阿里云平台及公共实例

        2.2 创建测试MQTT协议的产品及设备

         2.3 阿里云物联网平台MQTT测试

三、MQTT工程设计

        3.1工程结构

        3.2 源码设计及实现

四、程序编译及测试

        4.1 编译指令

        4.2 编译过程如下:

        4.3 程序测试

 五、附件


一、MQTT协议简介

        MQTT 是一种基于发布/订阅模式的轻量级消息传输协议,专门针对低带宽和不稳定网络环境的物联网应用而设计,可以用极少的代码为联网设备提供实时可靠的消息服务。MQTT 协议广泛应用于物联网、移动互联网、智能硬件、车联网、智慧城市、远程医疗、电力、石油与能源等领域。MQTT 协议由 Andy Stanford-Clark (IBM)和 Arlen Nipper(Arcom,现为 Cirrus Link)于 1999 年发布。 按照 Nipper 的介绍,MQTT 必须具备以下几点:

  •     简单容易实现
  •     支持 QoS(设备网络环境复杂)
  •     轻量且省带宽(因为那时候带宽很贵)
  •     数据无关(不关心 Payload 数据格式)
  •     有持续地会话感知能力(时刻知道设备是否在线)

        MQTT 原名是 MQ TT,其全称为: MQ Telemetry Transport,是九十年代早期Arlen Nipper在参与 Conoco Phillips 公司的一个原油管道数据采集监控系统(pipeline SCADA system)时开发的一个实时数据传输协议。它的目的在于让传感器通过带宽有限的 VSAT ,与 IBM 的 MQ Integrator 通信。由于 Nipper 是遥感和数据采集监控专业出身,所以按业内惯例取了 MQ TT 这个字。        

        新发布的MQTT 5.0 版本在 3.1.1 版本基础上增加了会话/消息延时、原因码、主题别名、用户属性、回话过期、消息过期、流量控制、遗嘱遗愿、共享订阅等更加符合现代物联网应用需求的特性,提高了大型系统的性能、稳定性与可扩展性。目前,MQTT 5.0 经过多年的发展,凭借其轻量高效、可靠的消息传递、海量连接支持、安全的双向通信等优点已成为物联网行业的首选协议,得益于MQTT具有以下特点。

        【1】轻量高效,节省带宽

        MQTT 将协议本身占用的额外消耗最小化,消息头部最小只需要占用 2 个字节,可稳定运行在带宽受限的网络环境下。同时,MQTT 客户端只需占用非常小的硬件资源,能运行在各种资源受限的边缘端设备上。
        【2】可靠的消息传递

        MQTT 协议提供了 3 种消息服务质量等级(Quality of Service),保证了在不同的网络环境下消息传递的可靠性。

        1)QoS 0:消息最多传递一次。如果当时客户端不可用,则会丢失该消息。发布者发送一条消息之后,就不再关心它有没有发送到对方,也不设置任何重发机制;

        2)  QoS 1:消息传递至少 1 次。 包含了简单的重发机制,发布者发送消息之后等待接收者的 ACK,如果没收到 ACK 则重新发送消息。这种模式能保证消息至少能到达一次,但无法保证消息重复;

        3) QoS 2:消息仅传送一次。设计了重发和重复消息发现机制,保证消息到达对方并且严格只到达一次。

        4)除了 QoS 之外,MQTT 还提供了清除会话(Clean Session)机制。对于那些想要在重新连接后,收到离线期间错过的消息的客户端,可在连接时设置关闭清除会话,此时服务端将会为客户端存储订阅关系及离线消息,并在客户端再次上线后发送给客户端。
        【3】海量连接支持

        MQTT 协议从诞生之时便考虑到了日益增长的海量物联网设备,得益于其优秀的设计,基于 MQTT 的物联网应用及服务可轻松具备高并发、高吞吐、高可扩展能力。连接海量的物联网设备,离不开 MQTT 服务器的支持。目前,MQTT 服务器中支持并发连接数最多的是 EMQX。最近发布的 EMQX 5.0 通过一个 23 节点的集群达成了 1 亿 MQTT 连接+每秒 100 万消息吞吐,这使得 EMQX 5.0 成为目前为止全球最具扩展性的 MQTT 服务器。
        【4】安全的双向通信

        依赖于发布订阅模式,MQTT 允许在设备和云之间进行双向消息通信。发布订阅模式的优点在于:发布者与订阅者不需要建立直接连接,也不需要同时在线,而是由消息服务器负责所有消息的路由和分发工作。安全性是所有物联网应用的基石,MQTT 支持通过 TLS/SSL 确保安全的双向通信,同时 MQTT 协议中提供的客户端 ID、用户名和密码允许我们实现应用层的身份验证和授权。
        【5】在线状态感知

        为了应对网络不稳定的情况,MQTT 提供了心跳保活(Keep Alive)机制。在客户端与服务端长时间无消息交互的情况下,Keep Alive 保持连接不被断开,若一旦断开,客户端可即时感知并立即重连。

        同时,MQTT 设计了遗愿(Last Will) 消息,让服务端在发现客户端异常下线的情况下,帮助客户端发布一条遗愿消息到指定的 MQTT 主题。

        另外,部分 MQTT 服务器如 EMQX 也提供了上下线事件通知功能,当后端服务订阅了特定主题后,即可收到所有客户端的上下线事件,这样有助于后端服务统一处理客户端的上下线事件。

二、阿里云物联网平台

       2.1  阿里云平台及公共实例

        阿里云物联网平台提供安全可靠的设备连接通信能力,支持设备数据采集上云,规则引擎流转数据和云端数据下发设备端。此外,也提供方便快捷的设备管理能力,支持物模型定义,数据结构化存储,和远程调试、监控、运维。阿里云物联网平台据2022年3月给出其物联网平台市场份额占比37%。

        目前(2022年12月),  阿里云物联网平台的新版公共实例是不收取费用的,注册物联网平台就能开通使用,只是有以下约束:

        【1】仅能开通华东2(上海)服务上

        【2】同时在线设备数规模为50

        【3】可创建设备数规模为500

        【4】消息通信及规则引擎TPS规模为5条/秒

        【5】不支持弹性扩容、视频服务、数据服务、自定域名、自定协议等等高级功能。

        可将关于MQTT协议本身支持,公共实例是能实现的,这对于本文测试MQTT通信已经足够。

        2.2 创建测试MQTT协议的产品及设备

        【1】注册阿里云账号(https://www.aliyun.com

        【2】登录阿里云,进入控制台,找到物联网平台

        【2】进入物联网平台,开通并进入公共实例配置页面

         【3】展开设备管理,选择产品页面,点击创建产品按钮

         【4】配置产品属性

         【5】创建产品完成后,在该界面点击前往添加设备,切换到添加设备页面

         【6】配置设备信息

         【7】设备创建成功

         2.3 阿里云物联网平台MQTT测试

        【1】进入如何使用MQTT协议模拟设备快速接入物联网平台_物联网平台-阿里云帮助中心页面,下载MQTT.fx软件(按自身操作系统匹配下载对于版本),并安装。

         【2】安装并打开MQTT.fx,点击设置进入配置页面

         【3】新建一个连接,下图所标注的6处,需要去阿里云物联网平台获得相关信息完成填写。

         【4】在物联网平台设备页面,选择刚创建好的设备,进入设备管理页面,查看MQTT连接参数。

         【5】将连接相关信息填写到上面MQTT.fx新创建连接上去(下

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

py_free-物联智能

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值