STM32MP157移植MQTT记录

MQTT移植记录

前言

正点原子STM32MP157开发板移植MQTT,搞了半天遇到各种坑 学习记录移植过程遇到的问题

一、移植前准备

mosquitto下载
在这里插入图片描述

openssh下载
在这里插入图片描述

libuuid下载
在这里插入图片描述

cJson下载

二、libuuid移植(版本1.0.3)

1.解压进入目录

在这里插入图片描述

2.配置

配置输出目录和交叉编译工具

./configure --prefix=/home/zhousong/linux/mqtt2/build/libuuid CC=arm-none-linux-gnueabihf-gcc --host=arm-linux

在这里插入图片描述

3.编译安装

编译

make

在这里插入图片描述

安装

make install

在这里插入图片描述

4.安装结果

目标路径下生成的文件
在这里插入图片描述

三、openssl移植(版本3.0.14)

1.解压进入目录

在这里插入图片描述

2.配置

配置输出目录以及生成动态链接库

./config no-asm shared --prefix=/home/zhousong/linux/mqtt2/build/openssl
--prefix :指定 make install 后生成目录的路径,即新建的openssl目录
shared :生成动态链接库。
no-asm: 是在交叉编译过程中不使用汇编代码代码加速编译过程,原因是它的汇编代码 是对 arm 格式不支持的

在这里插入图片描述

修改Makefile配置交叉编译工具

在这里插入图片描述

修改Makefile去掉-m32和-m64(网上都这么说的我没看到m32)
可以使用命令也可以手动修改

sed -i "s/-m64//g" Makefile

在这里插入图片描述

3.编译安装

编译

make

在这里插入图片描述

安装

make install

在这里插入图片描述

4.安装结果

在这里插入图片描述

四、cJson移植(版本1.7.17)

好多文章都没写这个,一开始编译mosquitto就报缺少这个头文件。。。。。

1.解压进入目录

在这里插入图片描述

2.修改Makefile

修改安装目录
在这里插入图片描述

3.编译

编译时指定交叉编译工具

make CC=/usr/local/arm/gcc-arm-9.2-2019.12-x86_64-arm-none-linux-gnueabihf/bin/arm-none-linux-gnueabihf-gcc

在这里插入图片描述

4.安装

make install

在这里插入图片描述

5.安装结果

在这里插入图片描述

五、mosquitto移植(版本2.0.18)

1.解压进入目录

在这里插入图片描述

2.编译

编译时关闭WITH_SRVSRV、配置编译工具、头文件(前面编译出来的库)、动态链接(前面编译出来的库)

make WITH_SRVSRV=no CC=/usr/local/arm/gcc-arm-9.2-2019.12-x86_64-arm-none-linux-gnueabihf/bin/arm-none-linux-gnueabihf-gcc CXX=/usr/local/arm/gcc-arm-9.2-2019.12-x86_64-arm-none-linux-gnueabihf/bin/arm-none-linux-gnueabihf-g++ CFLAGS="-I /home/zhousong/linux/mqtt2/build/openssl/include -I /home/zhousong/linux/mqtt2/build/libuuid/include -I /home/zhousong/linux/mqtt2/build/cjson/include" LDFLAGS="-L /home/zhousong/linux/mqtt2/build/openssl/lib64 -L /home/zhousong/linux/mqtt2/build/libuuid/lib -L /home/zhousong/linux/mqtt2/build/cjson/lib  -lssl -lcrypto -luuid"

在这里插入图片描述

在这里插入图片描述

3.安装

安装选择安装路径(也可以在前面选择,与openssl libuuid一致)

make DESTDIR=/home/zhousong/linux/mqtt2/build/mqtt install

在这里插入图片描述

4.安装结果

在这里插入图片描述

六、目录结构

在这里插入图片描述

七、测试

1.将生成的目录文件放入nfs服务器

在这里插入图片描述

2.配置环境变量

修改文件/etc/profile,将如下加入到文件中

#mqtt
export MQTT_ROOT=/home/zhousong/mqtt/mqtt
export OPENSSL_ROOT=/home/zhousong/mqtt/openssl
export LIBUUID_ROOT=/home/zhousong/mqtt/libuuid
export CJSON_ROOT=/home/zhousong/mqtt/cjson
export PATH=$PATH:$MQTT_ROOT/usr/local/bin:$MQTT_ROOT/usr/local/sbin
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MQTT_ROOT/usr/local/lib:$OPENSSL_ROOT/lib64:$LIBUUID_ROOT/lib:$CJSON_ROOT/lib

在这里插入图片描述

3.测试

开启三个ssh远程连接
在这里插入图片描述
连接1,启动代理服务

mosquitto -v

在这里插入图片描述
查看进程,进程运行中
在这里插入图片描述
连接2,订阅主题为tiger的消息

mosquitto_sub -v -t tiger

查看进程
在这里插入图片描述
连接3,发布主题为tiger的消息

mosquitto_pub -t tiger -m hello!!!

在这里插入图片描述

八、实现多设备通信

前提是开发板能够联网
在这里插入图片描述

1.命令使用说明

发布消息:
使用 mosquitto_pub 命令来发布消息到 broker.emqx.io 上的指定主题。

mosquitto_pub -h broker.emqx.io -p <port> -u <username> -P <password> -t <topic> -m "<message>"
-h broker.emqx.io: MQTT 代理的主机名或IP地址。
-p <port>: MQTT 代理的端口号,默认是 1883-u <username>: 如果 MQTT 代理需要用户名认证,可以使用此选项指定用户名。
-P <password>: 对应的密码。
-t <topic>: 指定发布消息的主题。
-m "<message>": 要发布的消息内容,需用双引号包裹。

示例:

发布消息到 test/topic 主题:

mosquitto_pub -h broker.emqx.io -p 1883 -u your_username -P your_password -t "test/topic" -m "Hello, MQTT!"

订阅消息:
使用 mosquitto_sub 命令来订阅 broker.emqx.io 上的指定主题,并接收消息。

mosquitto_sub -h broker.emqx.io -p <port> -u <username> -P <password> -t <topic>
-h broker.emqx.io: MQTT 代理的主机名或IP地址。
-p <port>: MQTT 代理的端口号,默认是 1883-u <username>: 如果 MQTT 代理需要用户名认证,可以使用此选项指定用户名。
-P <password>: 对应的密码。
-t <topic>: 指定订阅的主题。

示例:

订阅 test/topic 主题:

mosquitto_sub -h broker.emqx.io -p 1883 -u your_username -P your_password -t "test/topic"

2.验证

开发板订阅tiger_msg的主题消息

mosquitto_sub -h broker.emqx.io -p 1883 -t "tiger_msg"

在这里插入图片描述

开发板发送主题消息

mosquitto_pub -h broker.emqx.io -p 1883 -t tiger_msg -m "I am Linux msg"

在这里插入图片描述

九、最后到这里就测试结束了

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值