当前位置: 首页 > news >正文

一款轻量级的通信协议---MQTT (内含Linux环境搭建)

目录

MQTT

MQTT的关键特点:

应用场景

Linux环境搭建:

1. 安装mosquitto

2. Linux下客户端进行通信

3. PC端和Linux下进行通信

安装MQTT. fx

4. MQTT.fx的使用

1. 点击连接

​编辑

2. 连接成功

3. 订阅主题或者给别的主题发送消息 

遇到的问题:

总结:


MQTT

MQTT(Message Queuing Telemetry Transport,消息队列遥测传输)是一种轻量级的发布/订阅(publish-subscribe)网络协议,它为低带宽和高延迟或不可靠的网络设计,非常适合物联网(IoT)设备之间的通信。MQTT协议基于TCP/IP协议栈,但在设计上特别注重低功耗和带宽优化,使其成为资源受限设备的理想选择。

MQTT的关键特点:

  1. 发布/订阅模型:MQTT使用主题(topic)的概念,允许设备订阅感兴趣的主题,并接收所有针对这些主题发布的消息。发送方(发布者)不需要知道谁是消息的接收者,接收方(订阅者)也不需要知道消息来自哪个发送方。

  2. 轻量级:MQTT协议的头部非常小,这使得它在网络条件不佳的环境下也能高效运行。此外,MQTT客户端可以最小化内存占用和网络流量。

  3. 断线重连:MQTT客户端可以在断线后自动尝试重新连接到服务器,确保即使在网络不稳定的情况下也能保持通信。

  4. 服务质量级别:MQTT提供了三个服务质量(QoS)级别,允许用户根据消息的重要性和网络条件选择合适的传输策略:

    • QoS 0:最多一次交付,消息可能丢失。
    • QoS 1:至少一次交付,确保消息至少被接收一次,但可能多次。
    • QoS 2:恰好一次交付,确保消息只被精确地接收一次。
  5. 保留消息:MQTT支持保留消息功能,即使在订阅者离线时,服务器也会保存最后一条消息,以便订阅者上线后立即收到。

  6. 小体积:MQTT协议的设计考虑到了资源受限的设备,其编码简单,减少了设备上的处理负载。

应用场景

1. 物联网(IoT)设备管理

MQTT广泛应用于家庭自动化、工业自动化、农业监控、智慧城市等领域。例如,智能灯泡、温湿度传感器、安防摄像头等设备可以通过MQTT协议与云平台或控制中心进行通信,实现远程监控和控制。

2. 实时数据流处理

MQTT可用于实时数据流的采集和传输,如实时股票市场数据、交通流量监控、健康监测设备的数据传输等,这些场景要求数据的实时性和准确性。

3. 移动应用与云同步

移动应用程序经常使用MQTT与后端服务器进行通信,尤其是在需要实时更新和通知的场景下,如聊天应用、实时位置共享、在线游戏等。

4. 车联网(V2X)通信

在车联网领域,车辆与车辆、车辆与基础设施之间的通信可以通过MQTT实现,用于实时交通状况更新、紧急情况广播、自动驾驶汽车的信息交换等。

Linux环境搭建:

1. 安装mosquitto

这里推荐大家去用apt下载,如果没有网络的话在去源码编译下载,源码编译会遇到许多坑,例如老版本的一些mosquitto源码包可能需要老版本的openssl。

apt install mosquitto

 安装客户端

sudo apt install mosquitto-clients

运行 mosquitto

mosquitto -v

此时就是运行成功的状态了。

2. Linux下客户端进行通信

  首先我们先订阅一个主题,别人往这个订阅的主题发消息我们就可以收到,现在订阅的是 bbxwg

mosquitto_sub -v -t bbxwg

  我们现在往这个被订阅的主题发消息。

mosquitto_pub -t bbxwg-m woshidashuaige 

3. PC端和Linux下进行通信

我们日常开发中大部分应该都会涉及到Linux和Windows之间的通信,MQTT也不例外。在PC端中有一个专门为MQTT制作的软件。

安装MQTT. fx


因为最新版本的软件需要Licence,所以这里为大家找到了一些免费的版本,链接如下。
百度网盘:
只有1.7的版本,无需许可证(推荐)
Windows版(64位) https://pan.baidu.com/s/13v0ROf1dOzu2tXqmw3iBMg 提取码:r9f7
Windows版(32位) https://pan.baidu.com/s/1kqbh3_43SYR7of0PZw9SGA 提取码:kf9t
苹果电脑mac os https://pan.baidu.com/s/1nfE6_sSbyq5USNphlpKqwA 提取码:pa6v

转载于:不会嵌入式的摆烂王

4. MQTT.fx的使用

1. 点击连接
2. 连接成功

3. 订阅主题或者给别的主题发送消息 

到这里基本上就完成了MQTT基本上的一些通信。当然这只是MQTT比较简单的一种用法,它还可以被当成一种库在我编程中去使用,在次我就不多赘述了。

遇到的问题:

当我apt install下载了软件后,发现软件在运行的时候自动占用1883这个端口,导致我在开启的时候会提示端口已被占用

这时候需要我们去改一下他的一些配置文件。

vi /etc/mosquitto/mosquitto.conf

 加上下面 这两个配置,应该是将本身的端口号改一下,网上解释说是配置成无用户密码校验和无TLS连接。

listener 1883
allow_anonymous true 

当然在编译中可能也会遇到很多的问题,首先应该是各种插件不存在,这个很好解决,我们可以去百度一下直接下载对应的插件就好,但是有的时候也会遇到openssl版本不对,需要老版本,这就就比较麻烦一些 。下面是我源码编译安装遇到的一些问题,希望可以帮助到大家。

总结:

MQTT这款轻量级的通信协议我认非常适合那些性能低下的设备而准备的,也就是我们嵌入式中的一些硬件,这两者的契合度是非常大的。以上是本人的一些浅显的了解,如有错误还请指正。

相关文章:

一款轻量级的通信协议---MQTT (内含Linux环境搭建)

目录 MQTT MQTT的关键特点: 应用场景 Linux环境搭建: 1. 安装mosquitto 2. Linux下客户端进行通信 3. PC端和Linux下进行通信 安装MQTT. fx 4. MQTT.fx的使用 1. 点击连接 ​编辑 2. 连接成功 3. 订阅主题或者给别的主题发送消息 遇到的问…...

记netty本地客户端断线无法自动重连 or 远程客户端自动重连本地服务端

记netty客户端断线无法自动完成重连 or 服务端无法让客户端断线重连 引场景案例bootstrap 引 netty既能开发socket服务端,也可开发客户端,实现连接的全双工通信。在客户端断线重启后,可自动重连服务端。 场景 本地代码既有socket客户端也有…...

UNIAPP_在js文件中使用i18n国际化

导入 import { initVueI18n } from dcloudio/uni-i18n import messages from /locale/index const { t } initVueI18n(messages) 使用 t(config.request.i001)....

第三节:如何理解Spring的两个特性IOC和AOP(自学Spring boot 3.x第一天)

大家好,我是网创有方,接下来教大家如何理解Spring的两个特性IOC和AOP。本节有点难,大家多理解。 IOC(控制反转) 定义与核心思想: IOC,全称Inversion of Control,即控制反转。 其核…...

【51单片机】串口通信(发送与接收)

文章目录 前言串口通信简介串口通信的原理串口通信的作用串口编程的一些概念仿真图如何使用串口初始化串口串口模式波特率配置 发送与接收发送接收 示例代码 总结 前言 在嵌入式系统的开发中,串口通信是一种常见且重要的通信方式。它以其简单、稳定的特性在各种应用…...

【AI研发工具包】sklearn教程(Scikit-learn)

目录 1. 引言 2. 安装sklearn 3. 导入sklearn 4. 加载数据集 5. 数据预处理 6. 训练模型 7. 评估模型 8. 保存和加载模型 9. 自定义数据 10. 深入sklearn 11. 注意事项 1. 引言 Scikit-learn(简称sklearn)是Python中一个非常流行的机器学习库…...

数位DP——AcWing 1081. 度的数量

数位DP 定义 数位DP是一种动态规划技巧,特别适用于处理与数字的位操作相关的问题,如数字序列的计数、数字的生成等问题。它通过将问题分解为对每一位数字的独立考虑,从而简化问题复杂度,实现高效求解。 数位DP的核心思想是将原…...

2024下半年必追国漫片单,谁将问鼎巅峰?

随着2024年上半年的落幕,国漫市场再度迎来了百花齐放的盛况。从经典续作到全新IP,从玄幻到科幻,每一部作品都以其独特的魅力吸引着观众的目光。本期为大家盘点下半年值得一看的国漫佳作,大胆预测,谁将成为这场神仙打架…...

信息发布小程序h5 uniapp thinkphp

纯手工uniapp thinkphp 全开源打造 信息发布小程序 一、概述 信息发布小程序是一种基于微信平台的小程序应用,旨在为用户提供便捷的信息发布与展示服务。用户可以通过该小程序快速发布各类信息,如招聘、寻物、公告等,同时也可以浏览和搜索…...

Windows定时任务执行脚本

场景:由于网络波动原因导致云数据库没连接上,从而导致某个流程引擎链接不上数据库从而导致该流程引擎服务挂了,网络恢复后 数据库链接正常,但是该引擎服务还是中止状态。 解决方案:在Windows中新建一个定时任务&#…...

优维“统一开放平台”:开放、开发、集成、客制化

基于丰富完善的产品体系,优维重磅推出了统一开放平台。这款由优维自主设计与研发,集数据开发、能力开放、能力集成、客制化为一体的统一开放平台,具备应用市场、应用开发、连接能力、采控平台、API集市、开发者工具等功能模块,可为…...

ChatGPT新纪元:揭秘GPT-4o的多模态能力

GPT-4o登场 探索ChatGPT的多模态创新 今日凌晨,OpenAI向全球宣布了AI发展的新篇章——GPT-4o,每次OpenAI发布重大更新时,尽管令人兴奋,但也不免使众多初创公司的梦想破灭。 GPT-4o的命名中的“o”象征着“omni”——全能的代表。…...

泰勒斯威夫特2022年纽约大学毕业典礼演讲:NYU‘s 2022 Commencement Speaker Taylor Swift

NYU’s 2022 Commencement Speaker Taylor Swift Link: https://www.youtube.com/watch?vOBG50aoUwlI Singer, songwriter, producer, and director Taylor Swift received a Doctor of Fine Arts, honoris causa, at the Commencement for the Class of 2022 and delivered …...

(四)SvelteKit教程:调用外部 API 获取数据

(四)SvelteKit教程:调用 API 我们先按照如下的方式来构建api服务: step 1:npm i json-serverstep 2:在根目录下新建 db.json 文件,内部写入如下内容:{"users": [{"id": 1,"name…...

数据结构-分析期末选择题考点(排序)

何似清歌倚桃李 一炉沈水醉红灯 契子 ✨ 上一期给大家提供了大概会考的题型给老铁们复习的大致思路 这一期还会是一样,我将整理一下排序的题型以及解题方法给你们 由于时间还很多,我就慢慢总结吧,一天一章的样子,明天总结串、后天…...

Python:探索高效、智能的指纹识别技术(简单易懂)

目录 概括 导入库 函数一 参数: 函数二 函数三 主函数 运行结果 src: model_base 7.bmp ​编辑 总结 概括 指纹识别是一种基于人体生物特征的身份验证技术。它通过捕捉和分析手指上的独特纹路和细节特征,实现高准确度的身份识别。…...

『SD』AI绘画,不会写提示词怎么办?

提示词 有没有想过,为什么你用 SD 生成的猫是长这样的。 而其他人可以生成这样的猫。 虽然生成的都是猫,但猫与猫之间还是有差距的。 如果你的提示词只是“cat”,那大概率就会出现本文第一张图的那个效果。而如果你加上一些形容词&#xff…...

搭建大型分布式服务(四十二)SpringBoot 无代码侵入实现多Kafka数据源整合插件发布

系列文章目录 文章目录 系列文章目录前言MultiKafkaStarter [V2.2]一、功能特性二、快速开始(生产端)三、快速开始(消费端)四、其它特性五、变更记录六、参考文章 前言 在分布式服务的架构演进中,消息队列作为核心组件…...

Python 学习路线及技巧

一、学习路线 1. 基础阶段 ● 学习 Python 的语法基础,如变量、数据类型、运算符、控制流等。 ● 掌握常用的 Python 标准库,如 os、sys、re、datetime 等。 ● 通过编写简单的程序来巩固基础,如计算器、字符串处理等。 2. 进阶阶段 ● 深入…...

计算机网络知识整理笔记

目录 1.对网络协议的分层? 2.TCP/IP和UDP之间的区别? 3.建立TCP连接的三次握手? 4.断开TCP连接的四次挥手? 5.TCP协议如何保证可靠性传输? 6.什么是TCP的拥塞控制? 7.什么是HTTP协议? 8…...

C++初阶-list的底层

目录 1.std::list实现的所有代码 2.list的简单介绍 2.1实现list的类 2.2_list_iterator的实现 2.2.1_list_iterator实现的原因和好处 2.2.2_list_iterator实现 2.3_list_node的实现 2.3.1. 避免递归的模板依赖 2.3.2. 内存布局一致性 2.3.3. 类型安全的替代方案 2.3.…...

dedecms 织梦自定义表单留言增加ajax验证码功能

增加ajax功能模块&#xff0c;用户不点击提交按钮&#xff0c;只要输入框失去焦点&#xff0c;就会提前提示验证码是否正确。 一&#xff0c;模板上增加验证码 <input name"vdcode"id"vdcode" placeholder"请输入验证码" type"text&quo…...

Module Federation 和 Native Federation 的比较

前言 Module Federation 是 Webpack 5 引入的微前端架构方案&#xff0c;允许不同独立构建的应用在运行时动态共享模块。 Native Federation 是 Angular 官方基于 Module Federation 理念实现的专为 Angular 优化的微前端方案。 概念解析 Module Federation (模块联邦) Modul…...

【数据分析】R版IntelliGenes用于生物标志物发现的可解释机器学习

禁止商业或二改转载&#xff0c;仅供自学使用&#xff0c;侵权必究&#xff0c;如需截取部分内容请后台联系作者! 文章目录 介绍流程步骤1. 输入数据2. 特征选择3. 模型训练4. I-Genes 评分计算5. 输出结果 IntelliGenesR 安装包1. 特征选择2. 模型训练和评估3. I-Genes 评分计…...

算法笔记2

1.字符串拼接最好用StringBuilder&#xff0c;不用String 2.创建List<>类型的数组并创建内存 List arr[] new ArrayList[26]; Arrays.setAll(arr, i -> new ArrayList<>()); 3.去掉首尾空格...

服务器--宝塔命令

一、宝塔面板安装命令 ⚠️ 必须使用 root 用户 或 sudo 权限执行&#xff01; sudo su - 1. CentOS 系统&#xff1a; yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh2. Ubuntu / Debian 系统…...

Mysql8 忘记密码重置,以及问题解决

1.使用免密登录 找到配置MySQL文件&#xff0c;我的文件路径是/etc/mysql/my.cnf&#xff0c;有的人的是/etc/mysql/mysql.cnf 在里最后加入 skip-grant-tables重启MySQL服务 service mysql restartShutting down MySQL… SUCCESS! Starting MySQL… SUCCESS! 重启成功 2.登…...

基于IDIG-GAN的小样本电机轴承故障诊断

目录 🔍 核心问题 一、IDIG-GAN模型原理 1. 整体架构 2. 核心创新点 (1) ​梯度归一化(Gradient Normalization)​​ (2) ​判别器梯度间隙正则化(Discriminator Gradient Gap Regularization)​​ (3) ​自注意力机制(Self-Attention)​​ 3. 完整损失函数 二…...

MySQL:分区的基本使用

目录 一、什么是分区二、有什么作用三、分类四、创建分区五、删除分区 一、什么是分区 MySQL 分区&#xff08;Partitioning&#xff09;是一种将单张表的数据逻辑上拆分成多个物理部分的技术。这些物理部分&#xff08;分区&#xff09;可以独立存储、管理和优化&#xff0c;…...

Rust 开发环境搭建

环境搭建 1、开发工具RustRover 或者vs code 2、Cygwin64 安装 https://cygwin.com/install.html 在工具终端执行&#xff1a; rustup toolchain install stable-x86_64-pc-windows-gnu rustup default stable-x86_64-pc-windows-gnu ​ 2、Hello World fn main() { println…...