【HAL库-STM32F103C8T6学习笔记备份】13、MQTT与云平台
MQTT与云平台是物联网系统的核心组件。MQTT协议作为轻量级消息传输协议,专为低功耗设备设计,支持发布/订阅模式,具有低带宽消耗、可靠传输等特点。云平台则作为数据中枢,提供设备管理、数据处理、存储和分析等功能。二者协作可实现设备联网、数据流转和价值挖掘。开源工具如EMQX可作为高性价比的MQTT代理服务器,通过与自制云平台结合,实现单片机与外部应用的通信。示例展示了如何通过封装WIFI模块函数实
MQTT与云平台
MQTT 与云平台简介
MQTT(Message Queuing Telemetry Transport,消息队列遥测传输)是一种轻量级、低带宽消耗的物联网(IoT)消息传输协议,而云平台(如物联网云平台)则是承载设备数据存储、处理、分析与应用开发的 “云端中枢”,二者结合是物联网系统实现 “设备联网 - 数据流转 - 价值挖掘” 的核心架构。
一、MQTT 协议:物联网的 “数据快递员”
MQTT 专为资源受限的设备(如传感器、嵌入式设备)和低带宽 / 高延迟网络(如 2G、LoRa)设计,核心是 “发布 / 订阅(Pub/Sub)” 模式,而非传统的 “点对点” 通信,能高效实现多设备间的消息分发。
1. 核心特点
- 轻量级:协议头部最小仅 2 字节,设备无需复杂计算资源即可解析,适合单片机、传感器等低成本设备;
- 低带宽消耗:仅传输必要的消息内容,避免冗余数据,尤其适合偏远地区或流量有限的场景;
- 可靠传输:支持 3 种服务质量(QoS)等级,满足不同场景需求:
- QoS 0:“最多一次”,消息发完即弃,适合非关键数据(如实时温湿度);
- QoS 1:“至少一次”,确保消息至少到达一次,适合需确保接收的数据(如设备指令);
- QoS 2:“恰好一次”,确保消息仅到达一次,适合不允许重复的数据(如设备计费信息);
- 断线重连与遗嘱消息:设备断网后可自动重连,“遗嘱消息” 能在设备意外离线时,向云端 / 其他设备告知状态(如 “设备离线”)。
2. 核心组件
- 发布者(Publisher):发送消息的设备 / 终端(如温度传感器上传数据);
- 订阅者(Subscriber):接收消息的对象(如云端平台、手机 APP);
- 代理服务器(Broker):消息 “中转站”,接收发布者的消息,按 “主题(Topic)” 分发给订阅该主题的订阅者(如阿里云 IoT 的 MQTT Broker、EMQX 等开源 Broker);
- 主题(Topic):消息的 “分类标签”,采用层级结构(如/home/livingroom/temperature),订阅者仅接收自己关注的主题消息,避免无关数据干扰。
二、云平台:物联网的 “数据中枢”
物联网云平台是部署在云端的 “基础设施 + 工具集”,负责对接 MQTT 协议传输的设备数据,完成数据存储、处理、分析、可视化,并支持开发者快速搭建物联网应用(如远程控制、设备监控、异常预警)。
1. 核心功能
- 设备管理:对接 MQTT Broker,实现设备的 “注册 - 上线 - 离线 - 升级 - 注销” 全生命周期管理,支持百万级甚至亿级设备接入;
- 数据接收与存储:接收 MQTT 协议传输的设备数据(如温湿度、设备状态),存储到时序数据库(如 InfluxDB、TimescaleDB)或关系型数据库(如 MySQL);
- 数据处理与分析:提供规则引擎(如阿里云 IoT 的 “规则引擎”、AWS IoT 的 “Rules”),支持实时过滤(如 “温度>30℃时触发预警”)、数据转换(如单位换算)、联动控制(如 “湿度低于 40% 时启动加湿器”);
- 应用开发支持:提供 API 接口、SDK 工具包,帮助开发者快速搭建 Web/APP 监控界面(如查看设备实时数据、历史曲线);
- 安全保障:通过账号密码、Token、SSL/TLS 加密等方式,确保 MQTT 消息传输不被窃取或篡改,防止非法设备接入。
2. 常见物联网云平台举例
- 阿里云 IoT:支持 MQTT 协议,提供设备管理、数据流转、AI 分析等能力,适合企业级物联网项目;
- 腾讯云 IoT Explorer:低代码开发平台,集成 MQTT Broker,适合快速搭建小型物联网应用;
- AWS IoT Core:全球分布式架构,支持 MQTT/HTTP 协议,适合跨国物联网部署;
- 华为云 IoT:侧重工业物联网场景,支持 MQTT 与工业协议(如 Modbus)的转换。
三、MQTT 与云平台的协作逻辑
二者是 “数据传输” 与 “数据处理” 的互补关系,典型协作流程如下:
- 设备接入:物联网设备(如智能灯)通过 MQTT 协议,向云平台的 MQTT Broker 发起连接(携带设备身份认证信息);
- 数据发布:设备作为 “发布者”,按预设主题(如/device/light1/status),将数据(如 “灯已开启”)通过 MQTT 发送给 Broker;
- 消息分发:云平台的 Broker 按 “主题匹配” 原则,将消息分发给订阅该主题的 “订阅者”(如云端的数据分析模块、用户的手机 APP);
- 数据处理:云平台接收数据后,存储到数据库,并通过规则引擎判断是否触发动作(如 “灯异常离线时,向 APP 推送告警”);
- 指令下发:用户通过 APP 发送控制指令(如 “关灯”),云平台作为 “发布者”,按主题(如/device/light1/control)将指令通过 MQTT 发给设备,设备执行指令后反馈状态。
国内大厂的物联网云平台基本都是付费形式的,但是其稳定性很强,如果日后开发商用产品时,可以尝试去使用,这里简单开发了一个测试平台
我们这里用到的MQTT中间件服务器是开源的EMQX
EMQX 是一款开源的分布式 MQTT 消息服务器(也称 MQTT broker),专注于高并发、低延迟的物联网(IoT)及实时消息通信场景,由中国团队 EMQ 研发并维护,目前已成为全球主流的 MQTT 服务器之一。
其核心特点可概括为三点:
- 强兼容性:完全遵循 MQTT 3.1/3.1.1/5.0 协议,同时支持 CoAP、LwM2M、WebSocket 等多种物联网协议,能适配海量异构设备(如传感器、嵌入式终端、手机 / PC 客户端);
- 高性能与高可用:单节点可支持百万级并发连接,通过集群部署可扩展至千万级规模,且具备自动故障转移、数据持久化(如存储到 Redis、MySQL)能力,保障消息不丢失;
- 灵活扩展与易用性:提供丰富的插件生态(如规则引擎、数据桥接、认证授权),支持云原生部署(K8s),并配有 Web 管理控制台,降低运维成本。
主要应用场景包括 IoT 设备联网(如智能家电、工业传感器)、实时数据传输(如车联网、监控系统)、消息推送(如 APP 实时通知)等,社区版可免费使用,企业版提供商业支持。
EMQX+自制云平台完成单片机通过MQTT协议和外部应用通讯,主打一个高性价比。
接下来,这里提供一个示例代码,用于连接MQTT
关于WIFI模块的驱动,前面说过了,这里不再阐述
创建项目,使能串口,以及配置自己需要的外设,需要的话做个串口重定向
修改main.c,封装WIFI模块发送函数和连接WIFI函数以及MQTT发送消息函数
再封装个接收函数
配置串口中断回显处理,方便调试
Main函数,调用封装的连接函数,参数分别是WIFI名称,WIFI密码,学号,后面两项是固定的,main是我们主要用于测试的订阅主题
主循环,调用发送消息函数,参数分别为发送消息的主题,发送的消息,后面两个为Qos和保留消息的参数,默认置0,(感兴趣的查资料,特别是Qos的概念)
保存,烧录,手机打开热点,串口调试查看
然后我们在浏览器打开我们的测试平台,直接连接并订阅主题
我们尝试一下发送消息
点击之后记得查看串口助手,单片机会收到消息
测试成功,可以参照控制WiFi模块时,添加一些命令
比如我这里设置了open和close做一些操作,发送测试一下
这里可以将回显light open改成打开、关闭led、蜂鸣器的操作,从而达到远程控制的目的
如有不当之处,还望批评指正,简单上传了一下学习的过程,相关资料和代码可v:xiaozhang_9520获取,从事前后端开发、PC软件开发、小程序开发,可合作交流、共同进步
更多推荐
所有评论(0)