imx6ull/linux应用编程学习(15) 移植MQTT客户端库/测试

1. 准备开发环境

确保你的Ubuntu系统已经安装了必要的工具和依赖项。打开终端并运行以下命令:

sudo apt update
sudo apt install build-essential cmake git

2. 获取MQTT库

git clone https://github.com/eclipse/paho.mqtt.c.git
cd paho.mqtt.c

3. 编译MQTT库

mkdir build
cd build
cmake ..
make
sudo make install

4. 配置交叉编译

cd paho.mqtt.c
mkdir build-cross
cd build-cross
cmake -DCMAKE_SYSTEM_NAME=Linux -DCMAKE_SYSTEM_PROCESSOR=arm -DCMAKE_C_COMPILER=arm-linux-gnueabihf-gcc ..
make

5.传输和部署

编译完成后,将生成的库文件和相关的头文件传输到开发板

scp -r book@192.168.137.12:/home/book/linux/tool/mqtt/paho.mqtt.c/build-cross/src/libpaho-mqtt3c.so /home/root/tool/mqttscp -r book@192.168.137.12:/home/book/linux/tool/mqtt/paho.mqtt.c/build-cross/src/libpaho-mqtt3a.so /home/root/tool/mqttscp -r book@192.168.137.12:/home/book/linux/tool/mqtt/paho.mqtt.c/build-cross/src /home/root/tool/mqttscp -r book@192.168.137.12:/home/book/linux/tool/mqtt/paho.mqtt.c/src /home/root/tool/mqtt/include

注意

其库文件位置:

ubuntu:

/home/book/linux/tool/mqtt/paho.mqtt.c/build-cross/src

开发板:

/home/root/tool/mqtt/src

其头文件位置:

ubuntu:

/home/book/linux/tool/mqtt/paho.mqtt.c/src

开发板:

/home/root/tool/mqtt/include/src

但是这样子是不是觉得很乱,所以我们将其进行调整

在ubuntu的paho.mqtt.c创建install文件夹,文件夹内创建lib和include

将头文件存入include库文件存入lib

所以在ubuntu,头文件和库文件路径为:

/home/book/linux/tool/mqtt/paho.mqtt.c/install/include    //头文件
/home/book/linux/tool/mqtt/paho.mqtt.c/install/lib      //库文件

然后对开发板也进行修改

在mqtt文件夹执行(头文件)

cp -r include/src/* /home/root/tool/mqtt/install/include

然后再执行(库文件)

 cp -r src/* /home/root/tool/mqtt/install/lib

成功!

测试:

我们接下来编写测试程序,实现开发板作为客户端,向电脑发送消息

其中电脑mqtt设置为:

主机名/服务器地址:broker.hivemq.com

端口:1883

客户端id:429266196527478f9112b1b5dbc4ad8d(自己定就行)

点击apply后关掉

连接后,将主题定为led

订阅led

之后在开始编写程序啦!

在ubuntu系统,创建一个test存放我们的程序文件,

touch CMakeLists.txt,创建CMakeLists.txt文件

cmake_minimum_required(VERSION 3.5)
project(mqtt_test)# 添加包含头文件目录,在ubuntu编译,所以是ubuntu上的目录
include_directories(/home/book/linux/tool/mqtt/paho.mqtt.c/install/include)# 添加可执行文件,相对于${CC} -o mqtt_test mqtt_test.c,当然还是不一样的,
add_executable(mqtt_test mqtt_test.c)# 链接MQTT库,第一个mqtt_test是之后生成的文件名字,和上条语句对应,后面则是库文件目录/libpaho-mqtt3c.so 根据手册得libpaho-mqtt3c.so是同步模式mqtt库
target_link_libraries(mqtt_test /home/book/linux/tool/mqtt/paho.mqtt.c/install/lib/libpaho-mqtt3c.so)

具体里面有注释。

touch  toolchain-arm.cmake,创建toolchain-arm.cmake文件

##################################
# 配置 ARM 交叉编译
##################################
set(CMAKE_SYSTEM_NAME Linux) # 设置目标系统名字
set(CMAKE_SYSTEM_PROCESSOR arm) # 设置目标处理器架构# 指定交叉编译器
set(TOOLCHAIN_DIR /home/book/usr/local/arm/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/bin)
set(CMAKE_C_COMPILER ${TOOLCHAIN_DIR}/arm-linux-gnueabihf-gcc)
set(CMAKE_CXX_COMPILER ${TOOLCHAIN_DIR}/arm-linux-gnueabihf-g++)# 为编译器添加编译选项
set(CMAKE_C_FLAGS "-march=armv7-a -mfpu=neon -mfloat-abi=hard -mcpu=cortex-a7")
set(CMAKE_CXX_FLAGS "-march=armv7-a -mfpu=neon -mfloat-abi=hard -mcpu=cortex-a7")# 设置查找路径模式
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
##################################
# end
##################################

里面交叉编译器路径改为自己的路径

touch mqtt_test.c,创建mqtt_test.c文件

#include <stdio.h>
#include <string.h>
#include "MQTTClient.h"#define ADDRESS     "tcp://broker.hivemq.com:1883"
#define CLIENTID    "a8612686ad69471daffc67a538def753"
#define TOPIC       "led"
#define PAYLOAD     "Hello World!"
#define QOS         1
#define TIMEOUT     10000Lint main(int argc, char* argv[])
{MQTTClient client;MQTTClient_connectOptions conn_opts = MQTTClient_connectOptions_initializer;int rc;MQTTClient_create(&client, ADDRESS, CLIENTID, MQTTCLIENT_PERSISTENCE_NONE, NULL);conn_opts.keepAliveInterval = 20;conn_opts.cleansession = 1;if ((rc = MQTTClient_connect(client, &conn_opts)) != MQTTCLIENT_SUCCESS){printf("Failed to connect, return code %d\n", rc);return rc;}MQTTClient_message pubmsg = MQTTClient_message_initializer;MQTTClient_deliveryToken token;pubmsg.payload = PAYLOAD;pubmsg.payloadlen = strlen(PAYLOAD);pubmsg.qos = QOS;pubmsg.retained = 0;MQTTClient_publishMessage(client, TOPIC, &pubmsg, &token);printf("Waiting for up to %d seconds for publication of %s\n""on topic %s for client with ClientID: %s\n",(int)(TIMEOUT/1000), PAYLOAD, TOPIC, CLIENTID);rc = MQTTClient_waitForCompletion(client, token, TIMEOUT);printf("Message with delivery token %d delivered\n", token);MQTTClient_disconnect(client, 10000);MQTTClient_destroy(&client);return rc;
}

意思为:网址为tcp://broker.hivemq.com:1883,注意加上tcp因为是利用tcp协议进行连接的,端口1883,

客户端id:a8612686ad69471daffc67a538def753,这个自己定义,意思是开发板创建的客户端id为a8612686ad69471daffc67a538def753。

指定主题为:led     ,发送消息为“hello world”

传输质量为1     超时设为10000L。

后创建build文件夹,然后进入

执行cmake 

cmake -DCMAKE_SYSTEM_NAME=Linux -DCMAKE_SYSTEM_PROCESSOR=arm -DCMAKE_C_COMPILER=arm-linux-gnueabihf-gcc ..

含义:

-DCMAKE_SYSTEM_NAME=Linux

-D 选项用于传递定义给 CMake。在这里,它定义了 CMAKE_SYSTEM_NAME 变量为 Linux,告诉 CMake 构建的目标系统是 Linux。

-DCMAKE_SYSTEM_PROCESSOR=arm

这个选项定义了 CMAKE_SYSTEM_PROCESSOR 变量为 arm,告诉 CMake 构建目标处理器架构是 ARM。

-DCMAKE_C_COMPILER=arm-linux-gnueabihf-gcc

这个选项定义了 CMAKE_C_COMPILER 变量为 arm-linux-gnueabihf-gcc,指定使用的交叉编译器是 arm-linux-gnueabihf-gcc

..

这个选项表示要使用的 CMakeLists.txt 文件所在的上级目录。也就是说,当前命令是在 build 目录中执行的,而 CMakeLists.txt 文件在其上级目录。

当然,如果你环境配置好的话也可以直接用cmake ../

然后make

发现已经生成了mqtt_test

利用scp传入开发板。

scp -r book@192.168.137.12:/home/book/project/APP/app/33_mqtt/test/build/mqtt_test /home/root/mqtt_test

执行./mqtt_test,显示发送成功

电脑成功收到:

测试成功!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/3226312.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

苹果开发者取消自动续费

文档&#xff1a;https://support.apple.com/zh-cn/118428 如果没有找到订阅&#xff0c;那就是账号不对 取消订阅后&#xff0c;就不会自动续费了&#xff0c;如果不放心&#xff0c;可以把付款绑定的方式也取消

TQZC706开发板教程:在ZC706+ADRV9009硬件平台运行ADI Linux

本教程使用2024-06-18的ADI镜像文件&#xff0c;创建ZC706ADRV9009的linux工程进行测试。 首先需要下载ADI的镜像文件下载地址如所示&#xff1a; https://wiki.analog.com/resources/tools-software/linux-software/adi-kuiper_images/release_notes#r2_patch_1 烧写完成后若…

50斤的东西寄什么快递最便宜?邮寄物品最便宜的方法分享

作为一个电商创业者&#xff0c;我经常需要寄送大量商品。寄送50斤左右的东西时&#xff0c;选择哪个快递公司最便宜成了我们关注的重点。今天&#xff0c;我将分享一些实用的寄快递省钱技巧和打包建议&#xff0c;帮助大家在快递费用上省下一大笔。云木寄快递 首先&#xff0…

小红书矩阵源码(多账号发布+批量剪辑视频+一键分发)

在数字化时代&#xff0c;社交媒体已成为品牌推广和个人表达的重要渠道。小红书作为国内领先的生活分享社区&#xff0c;其矩阵源码的出现&#xff0c;为多账号运营提供了前所未有的便利。本文将深入探讨小红书矩阵源码如何通过多账号发布、批量剪辑视频、一键分发以及持续迭代…

windows10设置环境变量Path步骤

1、鼠标右键“我的电脑”&#xff0c;点击“属性”&#xff0c;打开控制面板窗口&#xff0c;如图&#xff1a; 2、点击“高级系统设置”&#xff0c;弹出设置窗口&#xff0c;如图&#xff1a; 3、点击底部的“环境变量”&#xff0c;弹出环境变量窗口&#xff0c;如图&#x…

[CTF]-PWN:House of Cat堆题型综合解析

原理&#xff1a; 调用顺序&#xff1a; exit->_IO_wfile_jumps->_IO_wfile_seekoff->_IO_switch_to_wget_mode _IO_wfile_seekoff源码&#xff1a; off64_t _IO_wfile_seekoff (FILE *fp, off64_t offset, int dir, int mode) {off64_t result;off64_t delta, new…

android13 cat /proc/cupinfo没有Serial问题

1.前言 我们有些客户是使用cpuinfo节点去获取系统的cpuid的,如下: cat /proc/cupinfo processor : 0 BogoMIPS : 48.00 Features : fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics fphp asimdhp cpuid asimdrdm lrcpc dcpop asimddp CPU impleme…

tensorflow之欠拟合与过拟合,正则化缓解

过拟合泛化性弱 欠拟合解决方法&#xff1a; 增加输入特征项 增加网络参数 减少正则化参数 过拟合的解决方法&#xff1a; 数据清洗 增大训练集 采用正则化 增大正则化参数 正则化缓解过拟合 正则化在损失函数中引入模型复杂度指标&#xff0c;利用给w增加权重&#xff0c;…

滥用云服务进行传播的恶意软件越来越多

由于云服务提供了传统方式所不具备的可扩展性、匿名性和容错性&#xff0c;攻击者越来越多地开始利用云服务来存储、分发和建立 C&C 信道&#xff0c;例如 VCRUM 存储在 AWS 上或 SYK Cryptor 通过 DriveHQ 进行分发。 过去的一个月内&#xff0c;研究人员一直在监控使用这…

入门PHP就来我这(高级)20 ~ 事务处理

有胆量你就来跟着路老师卷起来&#xff01; -- 纯干货&#xff0c;技术知识分享 路老师给大家分享PHP语言的知识了&#xff0c;旨在想让大家入门PHP&#xff0c;并深入了解PHP语言。 接着上篇我们来看下PDO数据库的事务处理。 1 PDO中的事务处理 1.1 事务相关概念 事务&#…

仕考网:公务员考试面试时间一般多长?

公务员考试主要分为笔试与面试两个阶段&#xff0c;其中面试是笔试通过的下一关&#xff0c;面试的具体安排通常由相关考试机构或招录单位负责发布并通知考生。 公务员面试的持续时间一般在30分钟至1小时之间&#xff0c;具体时长可能因地区和招录单位的不同而有所变化。常见的…

qq通讯录如何关闭?一键操作,让通讯录的人看不到我

在当今社交网络盛行的时代&#xff0c;qq通讯录是我们与朋友、家人和同事保持联系的重要工具之一。然而&#xff0c;有时我们可能希望保持一些隐私&#xff0c;不希望所有人都能看到我们的动态或在线状态。针对这种情况&#xff0c;QQ提供了关闭通讯录的功能&#xff0c;使得我…

科普文:从Redis1.0到Redis7.0的发展历程来理解为什么Redis钟爱单线程

概叙 Redis 作为一款流行的开源数据库&#xff0c;每个版本都在不断的迭代和升级&#xff0c;新增了丰富的特性和功能&#xff0c;解决了更多实际应用场景中的问题&#xff0c;提高了 Redis 的性能和可靠性。 总体来说&#xff0c;Redis 的演化之路可以分为以下几个阶段&#x…

51单片机嵌入式开发:7、 STC89C52RC 外部中断INT0和INT1 操作

STC89C52RC 外部中断INT0和INT1 操作 1 外部中断1.1 外部中断1.2 中断介绍 2 STC89C52外部中断2.1 外部中断引脚2.2 外部中断寄存器说明 3 STC89C52外部中断演示3.1 电平触发外部中断3.2 边沿触发外部中断3.3 Protues仿真 4 外部中断总结 1 外部中断 1.1 外部中断 单片机外部…

抖音本地生活服务商怎么申请?附详细教程!

随着本地生活的发展潜力和行业前景的不断展现&#xff0c;本地生活服务商也逐渐成为了一大热门职业。在此背景下&#xff0c;作为拥有约8亿日活用户的抖音成为了人们选择平台时的优先考虑对象&#xff0c;而以抖音本地生活服务商怎么申请为代表的相关问题也因此在多个创业者群中…

点线面推进未来智造

如今&#xff0c;宁波拥有门类齐全的制造业体系&#xff0c;形成了以石油化工、汽车及零部件、电工电器、纺织服装等为支柱的产业集群。 宁波工业的发展并非一蹴而就&#xff0c;蓝卓总经理谭彰详细解读了宁波制造业的发展历程与当下目标&#xff0c;从工业小市到工业大市、工业…

微软发布Win11 21H2七月更新补丁KB5040431,快来体验!

系统之家于7月10日发出最新报道&#xff0c;微软为Win11 21H2用户发布了七月的安全更新补丁KB5040431。用户升级系统后&#xff0c;会发现版本号升至22000.3079。此次更新针对远程桌面MultiPoint Server在争用条件会导致服务停止响应等多个问题进行修复。接下来跟随小编看看此次…

VirtualBox NAT网络模式

设置网络模式 右键网络设置 查看此时IP SSH连接 端口转发设置 ssh连接 samba文件共享 虚拟机上samba服务启动运行了&#xff0c;但由于windows无法连接虚拟机IP&#xff0c;即samba访问的入口堵了&#xff0c;无法像访问本地磁盘一样通过samba通道访问虚拟机 替代方案——多…

BGOV 2024强势回归:汇聚百位嘉宾,共创科技商贸新篇章

本周四至五BGOV强势回归&#xff0c;汇聚过百位来自知名机构和龙头企业的重量级演讲嘉宾&#xff0c;举行逾80场紧贴创科和商贸发展趋势的会议&#xff1b;一连两天的展览会涵盖多项热门主题科技&#xff0c;为各行各业提供数码转型的最佳方案和成功案例&#xff0c;助企业建设…

Web3知识图谱,一篇读完

这张图展示了区块链生态系统的架构和主要组件。以下是对图中内容的概括总结&#xff1a; 基础层&#xff1a; 底层基础设施&#xff1a;包括光纤网络、P2P网络、非对称加密、哈希算法、默克尔树和随机数生成。共识机制&#xff1a; PoW&#xff08;工作量证明&#xff09;: 比特…