【MQTT】通过mosquitto库连接阿里云远程上报温度

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

目录

前言

一、创建阿里云产品

二、下载mosquitto库

1.下载源码

2.解压源码

3.进入源码目录,编译下载安装

三、连接阿里云

1.MQTT初始化

2.MQTT清除

3.新建客户端

4.释放客户端

5.设置账号密码

6.确认连接回调函数

7.连接MQTT代理/服务器

8.网络事件循环处理

9.发布主题

10.断开MQTT代理/服务器

主函数代码如下

总结


前言

        Mosquitto库是一个开源的消息代理项目,用于实现MQTT(Message Queuing Telemetry Transport)协议。MQTT是一种轻量级的通信协议,适用于低带宽、高延迟或不稳定网络环境下的物联网设备通信。Mosquitto库提供了MQTT协议的服务器和客户端实现,可以用于构建物联网应用和设备之间的通信。Mosquitto库支持多种平台和编程语言,并提供了丰富的功能和灵活的配置选项。


一、创建阿里云产品

如何创建产品的详细过程可查看我上篇文章介绍,链接如下:

http://t.csdnimg.cn/M61SI

二、下载mosquitto库

1.下载源码

wget http://mosquitto.org/files/source/mosquitto-1.6.10.tar.gz

2.解压源码

tar -zxvf mosquitto-1.6.10.tar.gz

3.进入源码目录,编译下载安装

cd mosquitto-1.6.10/
make
sudo make install

三、连接阿里云

主要用到的API如下:

1.MQTT初始化

int mosquitto_lib_init(void)
功能:
使用mosquitto库函数前,要先初始化,使用之后就要清除。清除函数;int mosquitto_lib_cleanup()
返回值:MOSQ_ERR_SUCCESS

2.MQTT清除

int mosquitto_lib_cleanup(void)
功能:
使用MQTT之后,清除工作
返回值MOSQ_ERR_SUCCESS

3.新建客户端

struct mosquitto *mosquitto_new(const char * id, bool clean_session, void * obj)
参数
id:如果为NULL,将生成一个随机客户端ID。如果id为NULL,clean_session必须为true。
clean_session:设置为true以指示代理在断开连接时清除所有消息和订阅,设置为false以指示其保留它们,客户端将永远不会在断开连接时丢弃自己的传出消息就是断开后是否保留订阅信息true/false
obj:用户指针,将作为参数传递给指定的任何回调
返回
成功时返回结构mosquitto的指针,失败时返回NULL,询问errno以确定失败的原因:ENOMEM内存不足。EINVAL输入参数无效。 

4.释放客户端

void mosquitto_destroy(struct mosquitto * mosq)
功能
释放客户端
参数:mosq: struct mosquitto指针

5.设置账号密码

<think>好的,我现在需要向用户解释MQTT是什么意思,并且要举例子说明。首先,我得确保自己正确理解MQTT的概念。MQTT的全称是Message Queuing Telemetry Transport,也就是消息队列遥测传输协议。它是一个轻量级的发布/订阅模式的消息传输协议,专为低带宽、高延迟或不稳定的网络环境设计。主要用于物联网设备之间的通信。 接下来,我需要想如何用简单的例子来说明MQTT的工作原理。可能需要用生活中的场景来比喻,比如智能家居中的温度传感器和手机应用之间的通信。用户可能对物联网应用比较熟悉,所以这个例子应该容易理解。 然后,我需要分解MQTT的关键组成部分:发布者、订阅者、代理服务器(Broker)。比如,温度传感器作为发布者,将数据发送到Broker,手机应用作为订阅者从Broker获取数据。这个过程需要说明发布和订阅的主题(Topic)机制,比如传感器发布到“home/temperature”主题,手机订阅该主题就能收到更新。 另外,要提到MQTT的优势,比如轻量级、低功耗、适合不稳定网络,这些特点为什么适合物联网设备。可能还需要对比其他协议,比如HTTP,说明MQTT在特定场景下的优势。 还要注意用户可能的疑问点,比如MQTT如何保证消息可靠传输,可能涉及QoS等级(0,1,2),但例子中是否需要详细说明?可能简要提到即可,避免复杂化。 最后,总结一下MQTT的典型应用场景,比如智能家居、工业传感器、车联网等,让用户知道它的实际应用价值。 现在需要检查是否有遗漏的部分,比如是否需要提到MQTT基于TCP/IP,或者它的标准化组织OASIS,但可能对于例子来说,这些不是重点。保持例子简单明了是关键。 可能还需要考虑用户的技术水平,如果用户是初学者,避免使用过多专业术语,用比喻和实际例子来解释。确保步骤清晰,逻辑连贯,让用户能够轻松跟随。</think>MQTT(Message Queuing Telemetry Transport)是一种**轻量级通信协议**,专为物联网设备在低带宽、不稳定网络环境下高效传输数据而设计。其核心是**发布/订阅模式**,通过代理服务器(Broker)实现设备间解耦通信。以下通过一个**智能家居场景**具体说明: --- ### 🌡️ 示例:家庭温度监控系统 1. **设备角色分配** - **发布者**:安装在客厅的温度传感器(每秒检测温度) - **订阅者**:用户的手机APP、空调控制器 - **代理服务器**:云端MQTT Broker(如Mosquitto、EMQX) 2. **主题(Topic)定义** 设定专属通信频道:`home/livingroom/temperature` 3. **工作流程** - **步骤1**:温度传感器将25℃数据发布到`home/livingroom/temperature`主题 ```python # 传感器发布消息示例 client.publish("home/livingroom/temperature", "25°C") ``` - **步骤2**:Broker立即将消息转发给所有订阅该主题的设备 - **步骤3**:手机APP弹出通知"客厅当前温度25℃",空调自动调节为制冷模式 --- ### 🔑 MQTT核心优势 | 特性 | 传统HTTP对比 | 物联网适用场景 | |-------------|-----------------------|----------------------| | 低带宽消耗 | 无冗余头信息 | 2G/窄带物联网 | | 长连接 | 避免频繁握手 | 智能电表远程抄表 | | QoS分级传输 | 支持消息到达确认 | 工业设备告警 | | 离线缓存 | Broker存储未接收消息 | 移动车辆数据上报 | --- ### 🚀 典型应用场景 1. **共享单车**:百万级单车通过MQTT上报位置与状态 2. **石油管道监测**:沙漠中传感器通过卫星链路传输压力数据 3. **智能农业**:田间湿度传感器触发灌溉系统自动浇水 > 📌 关键技术点:MQTT over TCP/IP协议栈,默认端口1883(未加密)/8883(SSL加密),支持遗嘱消息(Last Will)提醒设备异常离线。 通过这种高效的异步通信机制,MQTT已成为物联网领域的**事实标准协议**,阿里云IoT、AWS IoT Core等主流平台均提供MQTT接入支持。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

热爱跑流水灯

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

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

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

打赏作者

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

抵扣说明:

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

余额充值