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://www.mzph.cn/pingmian/44208.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【SVN的使用- SVN的基本命令-SVN命令简写-注意事项-解决冲突 Objective-C语言】

一、SVN的更新命令:update 1.服务器如果新建了一个文件夹,yuanxing,版本变成6了, 我现在本地还只有三个文件夹,版本5, 终端里边,我们敲一个svn update, 我这儿就多了一个yuanxing文件夹, 这个就是更新,就是把服务器最新的代码下载下来, 假设服务器上大家提交了这…

KNIME 5.2.5 版本界面切换

1、安装完KNIME后&#xff0c;点击“Create workflow in your local space.” 2、发现是这个样子 4、进行切换。点击“menu”&#xff0c;最后点击“Switch to classic user interfaceto” 5、最终显示结果&#xff1a;

补光灯LED照明 2.7V4.2V5V升60V80V100V升压恒流芯片IC-H6902B

H6902B升压恒流芯片IC确实是一款为LED照明应用设计的稳定且可靠的解决方案。这款芯片具有以下几个显著特点&#xff1a; 高效率&#xff1a;效率高达95%以上&#xff0c;这意味着在驱动LED灯时&#xff0c;电源到LED的能量转换效率非常高&#xff0c;减少了能量损失&#xff0…

centos磁盘空间满了-问题解决

报错问题解释&#xff1a; CentOS系统在运行过程中可能会出现磁盘空间不足的错误。这通常发生在以下几种情况&#xff1a; 系统日志文件或临时文件过大导致磁盘空间不足。 安装了大量软件或文件而没有清理无用文件。 有可能是某个进程占用了大量磁盘空间。 问题解决方法&a…

必看!微信小程序必备证书!

微信小程序必备SSL证书。在日益增长的数字经济中&#xff0c;微信小程序已成为商家与消费者之间重要的交互平台。由于其便捷性和广泛的用户基础&#xff0c;越来越多的企业选择通过小程序来提供服务。然而&#xff0c;在开发和部署微信小程序时&#xff0c;确保数据安全是一个不…

Ubuntu22.04.4 LTS系统/安装Anaconda【GPU版】

安装过程 1.wget命令行下载 下载Anaconda并保存文件至本地指定目录 wget -c https://repo.anaconda.com/archive/Anaconda3-2023.09-0-Linux-x86_64.sh -P ~/Downloads/anaconda3 查看是否下载好了 2.安装Anaconda 2.1 bash命令安装 bash后面是anaconda3下载好的路径 bash …

学生选课管理系统(Java+MySQL)

技术栈 Java: 用于实现系统的核心业务逻辑。MySQL: 作为关系型数据库&#xff0c;用于存储系统中的数据。JDBC: 用于Java程序与MySQL数据库之间的连接和交互。Swing GUI: 用于创建图形用户界面&#xff0c;提升用户体验。 系统功能 我们的学生选课管理系统主要针对学生和管理…

vue3源码(六)渲染原理-runtime-core

1.依赖关系 runtime-dom 依赖于runtime-core,runtime-core 依赖于reactivity和sharedruntime-core提供跨平台的渲染方法createRenderer&#xff0c;用户可以自己传递节点渲染的渲染方法renderOptions&#xff0c;本身不关心用户使用什么APIruntime-dom提供了为浏览器而生的渲染…

MSI打包后门成安装包

目录 浏览器下载地址 启动>next 选择后门所在路径&#xff0c;和生成安装包后存放路径 next>Hidden 配置变量 Look up随便找个伪装&#xff0c;然后点击一下Creat New ​注册表Registry导入 ​点击否&#xff0c;不购买专业版 ​安装包生成成功​编辑 浏览器下…

(自用)共享单车服务器(一):服务器项目配置

项目目录结构 conf:用来存放配置文件 git:用来存放从git上克隆的项目 src:用来存放项目源文件 test:用来存放测试文件 third:用来存放第三方头文件、第三方库 安装iniparser(关于iniparser的使用需进一步学习) 1.项目目录中创建git文件夹&#xff0c;用于存放GitHub上克隆…

计算机网络-IGMPv1工作原理简介

一、IGMPv1的原理简介 前面我们大致了解了IGMP用于在连接组播组成员的组播路由器总通过交互IGMP报文生成IGMP组表项和IGMP路由表项。IGMP报文封装在IP报文中。到目前为止&#xff0c;IGMP有三个版本&#xff1a;IGMPv1、IGMPv2、IGMPv3。 今天主要学习IGMPv1的作用和工作原理。…

深度学习论文: LLaMA: Open and Efficient Foundation Language Models

深度学习论文: LLaMA: Open and Efficient Foundation Language Models LLaMA: Open and Efficient Foundation Language Models PDF:https://arxiv.org/pdf/2302.13971.pdf PyTorch: https://github.com/shanglianlm0525/PyTorch-Networks 1 概述 本文介绍了LLaMA&#xff0…

数据开源 | Magic Data大模型高质量十万轮对话数据集

能够自然的与人类进行聊天交谈&#xff0c;是现今的大语言模型 (LLM) 区别于传统语言模型的重要能力之一&#xff0c;近日OpenAI推出的GPT-4o给我们展示了这样的可能性。 对话于人类来说是与生俱来的&#xff0c;但构建具备对话能力的大模型是一项不小的挑战&#xff0c;收集高…

基于Android平台开发,仿头条新闻app

1. 项目模块功能思维导图 2. 项目涉及到的技术点 数据来源&#xff1a;聚合数据API使用okhttp网络请求框架获取api数据使用gson库解析json数据使用RecyclerViewadapter实现新闻列表使用SQLite数据库实现用户登录&#xff0c;注册&#xff0c;浏览历史记录使用SharedPreference…

【计算机网络仿真】b站湖科大教书匠思科Packet Tracer——实验17 开放最短路径优先OSPF

一、实验目的 1.验证OSPF协议的作用&#xff1b; 二、实验要求 1.使用Cisco Packet Tracer仿真平台&#xff1b; 2.观看B站湖科大教书匠仿真实验视频&#xff0c;完成对应实验。 三、实验内容 1.构建网络拓扑&#xff1b; 2.验证OSPF协议的作用。 四、实验步骤 1.构建网…

AutoMQ 与蚂蚁数科达成战略合作

近期&#xff0c;AutoMQ 与蚂蚁数科正式签署战略合作协议&#xff0c;将和蚂蚁数科云原生 PaaS 平台 SOFAStack 在产品研发、生态集成、市场合作、技术社区影响力等多方面开展深度合作。 AutoMQ 是业内领先的消息和流存储服务提供商&#xff0c;基于云原生基础设施重新设计了 …

解密 AI 客服:LangChain+ChatGPT 打造智能客服新时代

你需要了解 ChatGPT ChatGPT 是 OpenAI 开发的一种基于人工智能技术的自然语言处理模型。它可以通过对大量文本数据进行训练&#xff0c;自动生成高质量的回答和对话。ChatGPT 具有高效、准确、自然的特点&#xff0c;可以帮助人们更加高效地处理信息和交流。 ChatGPT 有很多…

el-from中校验,如果某一项需要另一项填写才能校验

使用validateField <el-form:model"params":rules"rules":scroll-to-error"true"ref"refrom"v-else><el-form-item label"用户姓名" prop"name"><el-input placeholder"请输入用户姓名"…

图片海报怎么做成二维码展示?二维码分享图片的制作技巧

怎么把图片的宣传海报做成二维码呢&#xff1f;在做活动或者产品宣传时&#xff0c;都会制作精美的图片海报&#xff0c;除了打印传单或者制作展板的方式来展示外&#xff0c;将海报图片生成二维码&#xff0c;通过分享二维码来实现图片海报的快速传播&#xff0c;能够有效提升…

大话光学原理:2.最短时间原理、“魔法石”与彩虹

一、最短时间原理 1662年左右&#xff0c;费马在一张信纸的边角&#xff0c;用他那著名的潦草笔迹&#xff0c;随意地写下了一行字&#xff1a;“光在两点间选择的路&#xff0c;总是耗时最少的。”这句话&#xff0c;简单而深邃&#xff0c;像是一颗悄然种下的种子&#xff0c…