嵌入式设备MQTT服务部署-mosquitto

引言

        本文主要阐述通过交叉编译mosquitto库,然后在嵌入式设备上部署MQTT服务器,能够接收其他子设备的MQTT消息信息。

        以下各个库的版本信息:

        mosquitto-2.0.18

        openssl-1.1.0l

      (cJSON基本都是一样的,随便下载就可以了)

交叉编译mosquitto

        首先交叉编译openssl、cJSON,这是其依赖库,然后再编译mosquitto。(注意以下的交叉编译方法只限定上述版本的库

openssl

  • 首先写一个脚本文件如下:
#!/bin/sh
LDLIBS="-ldl -lpthread" ./config no-asm no-shared no-threads  --prefix=/data/luh/library/openssl/950 --cross-compile-prefix=aarch64-linux-gnu-sigmastar-10.2.1-

        其中 --prefix表述安装路径,--cross-compile-prefix表示交叉编译链,其他都可以不用管。

  • 然后运行此脚本文件。
  • 运行之后会出现Makefile,在make之前删除Makefile中所有的-m64,然后再make运行。

       注意:在make的时候可能会卡住不动,此时保持卡住页面不动,打开另一个会话界面再次make即可,结束后make install就可以了。

cJSON

  • 编译

        进入主目录,输入下述命令:

make CC=aarch64-linux-gnu-gcc CXX=aarch64-linux-gnu-g++

        此处改为自己的交叉编译链就可以了。 

  • 安装:
make DESTDIR=$PWD install

DESTDIR:表示安装路径,将$PWD改为自己的安装路径即可。

mosquitto

  • 配置:

        进入主目录,在config.mk中添加下述路径(cJSON和openssl头文件以及库的路径):

CFLAGS += -I/data/luh/library/openssl/950/include
LDFLAGS += -L/data/luh/library/openssl/950/lib -lssl -lcrypto -ldl
CFLAGS += -I/data/luh/library/cJSON/950/include/cjson/
LDFLAGS += -L/data/luh/library/cJSON/950/lib/

prefix?=/data/luh/library/mosquitto/950

        其中prefix是安装路径,上述配置的在config.mk中 位置如下:

  • 编译:
make CC=aarch64-linux-gnu-sigmastar-10.2.1-gcc CXX=aarch64-linux-gnu-sigmastar-10.2.1-g++

        选择自己的交叉编译链即可。

  • 安装:
make install

注意:

若遇见报错,找不到dlopen等错误:
进入相应的目录,重新执行命令,添加-dl重新编译即可。

 

部署到设备

        交叉编译mosquitto会得到下述文件:

        将所有的文件复制到嵌入式设备中,或者mount挂载到设备目录下。

配置文件

        在任意目录写一个运行配置文件如下所示:

# Place your local configuration in /etc/mosquitto/conf.d/
#
# A full description of the configuration file is at
# /usr/share/doc/mosquitto/examples/mosquitto.conf.example

listener 11883 0.0.0.0
user root
allow_anonymous true

pid_file /var/run/mosquitto.pid

persistence true
persistence_location /tmp

log_dest file /tmp/mosquitto.log

include_dir /mnt/mosquitto/etc/mosquitto/conf.d

这个配置文件包含了 Mosquitto MQTT 服务器的基本设置,下面逐行解释:

3. listener 11883 0.0.0.0: 设置 Mosquitto 服务器监听所有网络接口(通过 0.0.0.0 指定)上的端口 11883。这意味着任何设备都可以通过此端口与服务器建立连接。

4. user root: 设置运行 Mosquitto 服务时使用的用户为 root。这通常不是一个安全的做法,因为通常推荐使用一个权限较低的专用用户账户来运行服务以减少潜在的安全风险。

5. allow_anonymous true: 允许匿名用户连接到 MQTT 服务器。这意味着客户端无需提供用户名和密码即可连接并发布、订阅消息。

6. pid_file /var/run/mosquitto.pid: 指定 Mosquitto 服务运行时生成的进程 ID 文件位置。

7. persistence true: 开启持久化模式,意味着在服务器重启后,一些会话状态和保留消息等信息会被保存下来。

8. persistence_location /tmp: 设置持久化数据存储的位置,在本例中是 /tmp 目录。

9. log_dest file /tmp/mosquitto.log: 指定日志输出方式为写入文件,并设定日志文件的路径为 /tmp/mosquitto.log。

10. include_dir /mnt/mosquitto/etc/mosquitto/conf.d/: 指定包含其他配置文件的目录,当 Mosquitto 启动时,会加载此目录下的所有 .conf 结尾的文件作为附加配置。

注意:上述的配置可以自行选择必要的选项进行配置。

运行测试

        进入sbin目录下运行mosquitto:

./mosquitto -c /mnt/mosquitto/etc/mosquitto/mosquitto.conf

        然后进入bin分别运行下述命令,进行订阅和发布:

        订阅主题hello:

./mosquitto_sub -v -t hello -p 11883

        向主题hello中发布world消息: 

./mosquitto_pub -t hello -m world -p 11883

         发布world后能够在订阅方看到world

  • 11
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值