IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> 华为云IoT智慧物流案例09 | 应用端MQTT开发(Openssl+Paho-MQTT) 构建嵌入式硬件与服务器的MQTT通信 -> 正文阅读

[嵌入式]华为云IoT智慧物流案例09 | 应用端MQTT开发(Openssl+Paho-MQTT) 构建嵌入式硬件与服务器的MQTT通信

华为云IoT智慧物流案例08 | 应用端MQTT开发(Openssl) 构建嵌入式硬件与服务器的MQTT通讯

第一章 交叉编译Openssl

一、Openssl
作用:
目标是保证两个应用间通信的保密性和可靠性,可在服务器端和用户端同时实现支持。已经成为Internet上保密通讯的工业标准。
SSL能使用户/服务器应用之间的通信不被攻击者窃听,并且始终对服务器进行认证,还可选择对用户进行认证。SSL协议要求建立在可靠的传输层协议(TCP)之上。
下载链接:https://www.openssl.org/source/
openssl
交叉编译Openssl
1. 创建交叉编译后的库路径文件夹
在这里插入图片描述
2. 解压openssl压缩包后配置其config编译条件
./config配置生成Makefile,-shared 表示生成动态库,也可通过参数 -prefix=xxx 自行指定安装目录,如下不配置则为默认安装路径
open

3. 命令:./config no-asm -shared --prefix=/home/wgpcgr/libs_build/openssl/build_arm no-async
配置
4. 修改OpensslMakefile文件,配置其make的编译器

vim Makefile

修改编译器:arm-linux-gnueabihf-gcc/arm-linux-gnueabihf-g++
修改
搜索-m64选项并删除,共两处(否则make后会报错)

:/-m64

在这里插入图片描述
5.makemake install
会安装在./config时指定的路径
安装完成后如下图
在这里插入图片描述

第二章 Paho mqtt客户端

下载链接:http://www.eclipse.org/paho/index.php?page=downloads.php
paho
1. 解压后在VS Code打开,修改Makefile文件
-指定交叉编译器arm-linux-gnueabihf-gcc

  • 指定openssl路径
    makefile
    2. 打开路径:MQTTPacket/sample/pub0sub1.c
    填入华为云平台MQTT地址(iot-mqtts.cn-north-4.myhuaweicloud.com)与端口号(1883
    地址
    3. 填入自己的三元组信息clientID、username、password
    三元组
    4. 填入自己的订阅和发布Topic
    topic
    5. 更改第一个参数payload要传入的消息(json字段)通过命令行的方式输入(通过命令行测试客户端通讯,后边QT应用开发时程序设计依据这个传入json数据)
	//char* payload = "{\"a\":60}";  这里改为命令行输入
	char* payload = argv[1];   //第一个参数 为json格式的数据包

在这里插入图片描述

6. make编译输出文件
在这里插入图片描述
7. scp库文件到开发板并且配置好客户端所依赖的库文件及库路径
scp
此次我存放库文件到路径:/usr/local/paho-mqtt
配置库路径:vi /etc/ld.so.conf ,添加上自己的库路径
添加完后输入命令 /sbin/ldconfig 缓存路径配置
库
缓存

8. scp发送至开发板测试MQTT客户端能否正常通讯
scp
9. 运行客户端文件并写入json数据进行测试(step.5 将输入第一个参数作为json数据发送)
命令:

./pub0sub1 {"test":123}

可以看到json数据已经发送给了华为云平台,我们打开华为云平台查看追踪消息
mqtt
10. 华为云平台显示MQTT客户端所上报的json数据,验证客户端与平台间的通讯成功
验证

第三章 完善QT应用,通过Qprocess与外部软件(MQTT客户端)交互

1. 添加控件open_btn进行控制
在这里插入图片描述
2. 通过定时处理串口数据函数封装json数据
根据json上报数据的格式
定义Json::A B C root writer
A["service_id"] = "Sensor";
//将service_id与自己定义的物模型的服务ID相对应
B["Temperature"] = temperature; B["Humidity"] = humidity; B["Light"] = light;
//将获取的传感器数据与自己的属性ID相对应
A["properties"]=B;
//将B的json数据打包封装成A的格式
append writerjson数据封装,格式化为字符串
QString将格式化后的字符串转为QString字符串
qDebug打印出转化后的QString字符串

Json::Value root;
        Json::Value A;
        Json::Value B;
        Json::Value C;
        Json::FastWriter writer;

        B["Longitude"] = gpsLong;
        B["Latitude"] = gpslat;
        A["service_id"] = "Track";
        A["properties"]=B;
        root["services"].append(A);

        B["Temperature"] = temperature;
        B["Humidity"] = humidity;
        B["Light"] = light;
        A["service_id"] = "Sensor";
        A["properties"]=B;
        root["services"].append(A);

        std::string json_file = writer.write(root);
        QString qstr = QString::fromStdString(json_file);   //std::string 转QString
        qDebug() << "mqtt--->start--->" << qstr;

在这里插入图片描述
在这里插入图片描述
3. 打开串口读取数据按钮时定时调用gpsparse函数
在这里插入图片描述

4.QProcess开启线程,实现Qt应用调用MQTT客户端

QProcess *process = new QProcess(); //开启新线程,调用MQTT

在这里插入图片描述
5.

  • QString定义mqtt客户端文件的名字
  • 定义QStringList列表类型设置后面process要传递给这个外部程序的参数
  • 设置外部文件的路径(相对于Qt执行程序的相对路径,也可以改成绝对路径)
  • 设置传递的参数为QString(实时变化的参数,json数据
QString str_exe;
QStringList args;
str_exe = "./pub0sub1";       //相对于Qt执行程序的相对路径,也可以改成绝对路径
args << qstr;                 //传递的参数,可以改成实时变化的

在这里插入图片描述
在这里插入图片描述

6. process->start启动外部程序(MQTT客户端,设置跟随主程序退出而退出)
str_exe:要启动的外部程序
args:QStringList类型,设置要传递给这个外部程序的参数

process->start(str_exe,args); // 外部程序启动后,将随主程序的退出而退出。

在这里插入图片描述

在这里插入图片描述
7. 编译构建应用且传输至开发板测试
在这里插入图片描述
在这里插入图片描述
8. 应用运行效果:
打开串口按钮button后串口打印json数据(QString类型)
在这里插入图片描述
请添加图片描述

9. 华为云平台数据实时接收显示成功
在这里插入图片描述
请添加图片描述

技术指导:
华为云社区与华为云学院:https://edu.huaweicloud.com/

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2021-08-05 17:31:05  更:2021-08-05 17:31:11 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/27 9:30:26-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码
数据统计