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/mqtt

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

scp -r book@192.168.137.12:/home/book/linux/tool/mqtt/paho.mqtt.c/build-cross/src /home/root/tool/mqtt

 scp -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

成功!

所以开发板路径为

/home/root/tool/mqtt/install/include    //头文件
/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     10000L

int 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,显示发送成功

电脑成功收到:

测试成功!

  • 7
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
当使用i.MX6ULL开发板学习MQTT时,您可以按照以下步骤进行计划: 1. 硬件准备: - 购买i.MX6ULL开发板,并确保其与您的计算机连接正常。 - 确保您具备基本的硬件知识,例如如何连接传感器或外设到开发板上。 2. 环境搭建: - 安装适用于i.MX6ULL开发板的操作系统,例如Linux发行版。 - 配置网络连接以便开发板能够访问互联网。 3. MQTT基础知识: - 了解MQTT协议的基本概念、工作原理和消息发布/订阅模型。 - 学习MQTT客户端的使用方法,例如Paho MQTT。 4. 开发工具选择: - 选择适合i.MX6ULL开发板的编程语言,例如C/C++或Python。 - 选择一个MQTT客户端来简化与MQTT代理的通信。 5. 编写代码: - 在开发板上编写代码以连接到MQTT代理,并实现消息发布和订阅功能。 - 使用所选的编程语言和MQTT客户端进行开发。 - 可以尝试使用传感器或外设与MQTT通信,以加深对MQTT的理解。 6. 测试和调试: - 测试您的代码是否能够成功连接到MQTT代理并进行消息发布和订阅。 - 调试任何可能出现的错误或问题,确保代码的稳定性和可靠性。 7. 扩展和应用: - 尝试扩展您的应用程序,例如实现更复杂的消息处理或与其他服务的集成。 - 探索MQTT在物联网应用中的应用场景,例如远程监控、设备控制等。 8. 学习资源: - 查阅MQTT的官方文档和规范,深入了解其更高级的特性和用法。 - 参考在线教程、博客文章或书籍,以获取更多关于MQTT和嵌入式开发的知识。 请注意,这只是一个大致的计划,您可以根据自己的需求和兴趣进行调整和扩展。祝您学习愉快!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值