【MQTT】mosquitto 的 “下载、交叉编译、使用” 详细教程,手把手搭建一个MQTT Broker

本文主要是介绍【MQTT】mosquitto 的 “下载、交叉编译、使用” 详细教程,手把手搭建一个MQTT Broker,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

😁博客主页😁:🚀https://blog.csdn.net/wkd_007🚀
🤑博客内容🤑:🍭嵌入式开发、Linux、C语言、C++、数据结构、音视频🍭
⏰发布时间⏰:2024-05-11 00:26:45

本文未经允许,不得转发!!!

目录

  • 🎄一、概述
  • 🎄二、mosquitto 的下载
  • 🎄三、mosquitto 的交叉编译
    • ✨3.1 openssl 的下载、交叉编译
    • ✨3.2 cJSON 的下载、交叉编译
    • ✨3.3 mosquitto 交叉编译
  • 🎄四、mosquitto 的使用教程
    • ✨4.1 mosquitto 部署到嵌入式开发板
    • ✨4.2 运行 mosquitto (MQTT Broker)
    • ✨4.3 运行 mosquitto_sub 订阅消息
    • ✨4.4 运行 mosquitto_pub 发布消息
  • 🎄五、总结


在这里插入图片描述

在这里插入图片描述

🎄一、概述

本文介绍如何使用 mosquitto 搭建一个 MQTT Broker。

Eclipse Mosquitto是一个开源(EPL/EDL许可)消息代理,它实现了MQTT协议版本 5.0、3.1.1和3.1。Mosquito 是轻量级的,适用于从低功耗单板计算机到全服务器的所有设备。

MQTT协议提供了一种使用发布/订阅模型执行消息传递的轻量级方法。这使得它适用于物联网消息传递,例如使用低功率传感器或移动设备,如手机、嵌入式计算机或微控制器。

Mosquitto项目还提供了一个用于实现MQTT客户端的C库,以及非常流行的Mosquitto_pub和Mosquitto_sub命令行MQTT客户端。

Mosquito是Eclipse基金会的一部分,是iot.Eclipse.org项目。开发由Cedalo推动。

关于 的更多内容,可以参考其官网:https://mosquitto.org/


在这里插入图片描述

🎄二、mosquitto 的下载

mosquitto 的下载地址:https://mosquitto.org/download/

如果不想下载最新版本的,也可以在其GitHub路径去下载:https://github.com/eclipse/mosquitto/tags

本文是直接在官网下载的,下载的版本是:mosquitto-2.0.18.tar.gz

在这里插入图片描述


在这里插入图片描述

🎄三、mosquitto 的交叉编译

在编译 mosquitto-2.0.18.tar.gz 之前需要先编译其依赖库:openssl库 和 cJSON库。

✨3.1 openssl 的下载、交叉编译

本文下载的是 openssl-OpenSSL_1_1_1g.tar.gz
下载地址:https://codeload.github.com/openssl/openssl/tar.gz/refs/tags/OpenSSL_1_1_1g
为什么使用这么旧的版本,因为这个我之前编译过,而且使用没问题。

编译步骤:

  • 1、解压缩

    tar zxf openssl-OpenSSL_1_1_1g.tar.gz
    
  • 2、进入目录,并配置输出目录和交叉编译器, (linux-generic32表示是32位操作系统,个别文章加了这个选项就不用去掉 -m64,我这里行不通)

    cd openssl-OpenSSL_1_1_1g/
    ./config no-asm shared no-async --prefix=`pwd`/ssl_result  --cross-compile-prefix=aarch64-mix210-linux-
    
  • 3、执行下面命令,删除Makefile文件的 -m64

    sed -i 's/-m64//' Makefile
    

    执行后,可以避免出现这个编译错误:aarch64-mix210-linux-gcc: error: unrecognized command line option '-m64'

  • 4、编译、安装

    make && make install
    

成功编译后,在openssl-OpenSSL_1_1_1g/目录会生成一个ssl_result目录,可以看到里面生成的库:
在这里插入图片描述


✨3.2 cJSON 的下载、交叉编译

cJSON库是C语言编写的,用来解析JSON信息的库,本文使用的是 cJSON-1.7.17.tar.gz
下载地址:https://codeload.github.com/DaveGamble/cJSON/tar.gz/refs/tags/v1.7.17
cJSON 的编译很简单,可以使用下面shell脚本编译,将下面shell脚本保存成cJSON_install.sh,与下载的cJSON-1.7.17.tar.gz放在同一目录,直接执行cJSON_install.sh编译即可:

#! /bin/shexport CJSON_VER=cJSON-1.7.17
CROSSS_COMPILE_TOOL=aarch64-mix210-linux-# 1.解压缩
rm ${CJSON_VER} -rf
tar zxf ${CJSON_VER}.tar.gz# 2.编译
cd ${CJSON_VER}# 2.1 修改安装目录路径
sed -i '/PREFIX ?= /a PREFIX ?= $(PWD)\/..\/${CJSON_VER}_result' Makefile
sed -i '/PREFIX ?= \/usr\/local/d' Makefilemake CC=${CROSSS_COMPILE_TOOL}gcc
make install
cd ..

编译过程图:
在这里插入图片描述


✨3.3 mosquitto 交叉编译

编译步骤:

  • 1、解压缩、进入源码目录:

    tar zxf mosquitto-2.0.18.tar.gz
    cd mosquitto-2.0.18
    
  • 2、修改config.mk,指定依赖库的头文件路径、库路径,并且指定安装目。
    config.mk 的 146 行,在ARCH:=$(shell uname -p)语句下面添加下面语句:

    # 指定ssl库、cJSON库的头文件和库文件
    CFLAGS += -I/home/samba/01_libCompile/013_mqtt/MQTT_Broker/result_dir/ssl_result/include -I/home/samba/01_libCompile/013_mqtt/MQTT_Broker/result_dir/cJSON-1.7.17_result/include
    LDFLAGS+= -L/home/samba/01_libCompile/013_mqtt/MQTT_Broker/result_dir/ssl_result/lib -L/home/samba/01_libCompile/013_mqtt/MQTT_Broker/result_dir/cJSON1.7.17_result/lib -lssl -lcrypto -dl# 指定安装目录
    DESTDIR=/home/samba/01_libCompile/013_mqtt/MQTT_Broker/result_dir/mosquitto-2.0.18_result
    

    没有添加上面语句,或者添加不正确的话,会报编译错误:../config.h:61:12: fatal error: openssl/opensslconf.h: No such file or directory
    注意:
    1、指定的路径必须使用绝对路径,因为这个config.mk可能被其他层级的Makefile包括,不使用绝对路径会出错。
    2、-lssl -lcrypto -dl这几个选项也要加,不然链接时可能会报错。
    3、DESTDIR目录一定要指定,不然make install的时候可能会安装到根目录去。

  • 3、编译、安装

    make CC=aarch64-mix210-linux-gcc CXX=aarch64-mix210-linux-g++
    make install
    

编译完成后,可以看到如下的几个文件:
在这里插入图片描述


在这里插入图片描述

🎄四、mosquitto 的使用教程

✨4.1 mosquitto 部署到嵌入式开发板

我这个是交叉编译,是要部署到嵌入式开发板的,如果读者是在Ubuntu等Linux发行版系统部署的话,也可以参考,主要就是让依赖的动态库可以被找到。

将前面已编译 openssl、cJSON、mosquitto 目录放到一块,我这里是放在 mosquitto_result_dir 目录,如下:
在这里插入图片描述

然后将整个目录复制到嵌入式开发板。


✨4.2 运行 mosquitto (MQTT Broker)

在编译结果目录mosquitto-2.0.18_result/usr/local/sbin 中存在 mosquitto 的可执行文件,mosquitto 就是我们要部署的 MQTT Broker(MQTT 代理),将它运行之后,我们就可以通过MQTT客户端进行发布/订阅了。

  • 首先,设置 LD_LIBRARY_PATH 环境变量,添加依赖库的路径,执行如下语句(路径根据你自己的设置):
    export LD_LIBRARY_PATH=/nfsroot/mosquitto_result_dir/ssl_result/lib:$LD_LIBRARY_PATH
    
  • 然后,添加 mosquitto 配置文件,在当前目录新建文件mosquitto.conf,内容如下:
    # 设置 Mosquitto 服务器监听所有网络接口(通过 0.0.0.0 指定)上的 1883 端口.
    listener 1883 0.0.0.0# 设置运行 Mosquitto 服务时使用的用户为 root。
    # 这通常不是一个安全的做法,因为通常推荐使用一个权限较低的专用用户账户来运行服务以减少潜在的安全风险。
    user root# 允许匿名用户连接到 MQTT 服务器。这意味着客户端无需提供用户名和密码即可连接并发布、订阅消息。
    allow_anonymous true# 指定 Mosquitto 服务运行时生成的进程 ID 文件位置。
    #pid_file /var/run/mosquitto.pid# 开启持久化模式,意味着在服务器重启后,一些会话状态和保留消息等信息会被保存下来
    #persistence true# 设置持久化数据存储的位置,在本例中是 /tmp 目录。
    #persistence_location /tmp# 指定日志输出方式为写入文件,并设定日志文件的路径为 /tmp/mosquitto.log。
    #log_dest file /tmp/mosquitto.log# 指定包含其他配置文件的目录,当 Mosquitto 启动时,会加载此目录下的所有 .conf 结尾的文件作为附加配置。
    #include_dir /mnt/mosquitto/etc/mosquitto/conf.d/#max_inflight_messages 1024
    #max_queued_messages 5120
    #message_size_limit 2048000
    #set_tcp_nodelay true
    
  • 最后,运行 mosquitto-c 是指定 mosquitto 配置文件mosquitto.conf 的路径(根据自己的设置):
    ./mosquitto -c /nfsroot/mosquitto_result_dir/mosquitto-2.0.18_result/usr/local/sbin/mosquitto.conf 
    
    在这里插入图片描述

✨4.3 运行 mosquitto_sub 订阅消息

mosquitto_sub 是一个MQTT客户端,实现了订阅消息的功能,使用步骤:

  • 1、在嵌入式开发板重新打开一个命令行窗口,设置 LD_LIBRARY_PATH 环境变量,具体路径看自己的目录:
    export LD_LIBRARY_PATH=/nfsroot/mosquitto_result_dir/mosquitto-2.0.18_result/usr/local/lib/:/nfsroot/mosquitto_result_dir/cJSON-1.7.17_result/lib/:$LD_LIBRARY_PATH
    
  • 2、运行 mosquitto_sub 订阅消息,命令如下,-v表示打印发布的消息,-h 指定运行MQTT Broker的主机ip,-t 指定要订阅的主题(Topic):
    ./mosquitto_sub -v -h 192.168.3.227 -t /server/fromArm
    

✨4.4 运行 mosquitto_pub 发布消息

mosquitto_pub 也是一个MQTT客户端,实现了发布消息的功能,使用步骤:

  • 1、在嵌入式开发板重新打开一个命令行窗口,设置 LD_LIBRARY_PATH 环境变量,具体路径看自己的目录:
    export LD_LIBRARY_PATH=/nfsroot/mosquitto_result_dir/mosquitto-2.0.18_result/usr/local/lib/:/nfsroot/mosquitto_result_dir/cJSON-1.7.17_result/lib/:$LD_LIBRARY_PATH
    
  • 2、运行 mosquitto_pub 发布消息,命令如下,-h 指定运行MQTT Broker的主机ip,-t 指定要发布的主题(Topic),-m 指定要发送的消息,
    ./mosquitto_pub -h 192.168.3.227 -t /server/fromArm -m {"data":"hello world!"}
    
    也可以使用-f选项指定文件,将文件内容发布:
    ./mosquitto_pub -h 192.168.3.227 -t /server/fromArm -f 
    

下面是订阅、发布消息的过程:
在这里插入图片描述


在这里插入图片描述

🎄五、总结

本文介绍了 MQTT Broker 开源库 mosquitto 的下载、交叉编译、使用教程,如果想了解 mosquitto ,一定会有帮助。

在这里插入图片描述
如果文章有帮助的话,点赞👍、收藏⭐,支持一波,谢谢 😁😁😁

参考:
https://blog.csdn.net/weixin_45459266/article/details/136804799

这篇关于【MQTT】mosquitto 的 “下载、交叉编译、使用” 详细教程,手把手搭建一个MQTT Broker的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/978032

相关文章

springboot security使用jwt认证方式

《springbootsecurity使用jwt认证方式》:本文主要介绍springbootsecurity使用jwt认证方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地... 目录前言代码示例依赖定义mapper定义用户信息的实体beansecurity相关的类提供登录接口测试提供一

go中空接口的具体使用

《go中空接口的具体使用》空接口是一种特殊的接口类型,它不包含任何方法,本文主要介绍了go中空接口的具体使用,具有一定的参考价值,感兴趣的可以了解一下... 目录接口-空接口1. 什么是空接口?2. 如何使用空接口?第一,第二,第三,3. 空接口几个要注意的坑坑1:坑2:坑3:接口-空接口1. 什么是空接

springboot security快速使用示例详解

《springbootsecurity快速使用示例详解》:本文主要介绍springbootsecurity快速使用示例,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝... 目录创www.chinasem.cn建spring boot项目生成脚手架配置依赖接口示例代码项目结构启用s

Python如何使用__slots__实现节省内存和性能优化

《Python如何使用__slots__实现节省内存和性能优化》你有想过,一个小小的__slots__能让你的Python类内存消耗直接减半吗,没错,今天咱们要聊的就是这个让人眼前一亮的技巧,感兴趣的... 目录背景:内存吃得满满的类__slots__:你的内存管理小助手举个大概的例子:看看效果如何?1.

java中使用POI生成Excel并导出过程

《java中使用POI生成Excel并导出过程》:本文主要介绍java中使用POI生成Excel并导出过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录需求说明及实现方式需求完成通用代码版本1版本2结果展示type参数为atype参数为b总结注:本文章中代码均为

springboot简单集成Security配置的教程

《springboot简单集成Security配置的教程》:本文主要介绍springboot简单集成Security配置的教程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,... 目录集成Security安全框架引入依赖编写配置类WebSecurityConfig(自定义资源权限规则

Spring Boot3虚拟线程的使用步骤详解

《SpringBoot3虚拟线程的使用步骤详解》虚拟线程是Java19中引入的一个新特性,旨在通过简化线程管理来提升应用程序的并发性能,:本文主要介绍SpringBoot3虚拟线程的使用步骤,... 目录问题根源分析解决方案验证验证实验实验1:未启用keep-alive实验2:启用keep-alive扩展建

MySQL Workbench 安装教程(保姆级)

《MySQLWorkbench安装教程(保姆级)》MySQLWorkbench是一款强大的数据库设计和管理工具,本文主要介绍了MySQLWorkbench安装教程,文中通过图文介绍的非常详细,对大... 目录前言:详细步骤:一、检查安装的数据库版本二、在官网下载对应的mysql Workbench版本,要是

使用Java实现通用树形结构构建工具类

《使用Java实现通用树形结构构建工具类》这篇文章主要为大家详细介绍了如何使用Java实现通用树形结构构建工具类,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录完整代码一、设计思想与核心功能二、核心实现原理1. 数据结构准备阶段2. 循环依赖检测算法3. 树形结构构建4. 搜索子

Python下载Pandas包的步骤

《Python下载Pandas包的步骤》:本文主要介绍Python下载Pandas包的步骤,在python中安装pandas库,我采取的方法是用PIP的方法在Python目标位置进行安装,本文给大... 目录安装步骤1、首先找到我们安装python的目录2、使用命令行到Python安装目录下3、我们回到Py