Qt MQTT学习笔记

2022年01月13日 阅读数:4
这篇文章主要向大家介绍Qt MQTT学习笔记,主要内容包括基础应用、实用技巧、原理机制等方面,希望对大家有所帮助。

1、MQTT 环境的搭建

一、MQTT 服务器搭建 ----(EMQ)

安装EMQ 参考博客连接linux

 https://blog.csdn.net/qq_35834171/article/details/98472992

2、QT MQTT客户端

参考博客连接web

	https://www.jianshu.com/p/fd70929661d5

3、知识点集合

一、MQTT -EMQ启动

EMQ文件 解压 目录 F:\QTMQTT\emqx
系统:window7
打开命令提示符窗口,切换磁盘 命令json

F:

切换目录命令浏览器

 cd F:\QTMQTT\emqx 

EMQ启动命令服务器

bin\emqx start

以后浏览器打开http://127.0.0.1:18083,输入默认用户名“admin”和默认密码“public”
在这里插入图片描述app

二、运行QT_mqtt demo

在这里插入图片描述

三、qt — MQTT调试助手

在这里插入图片描述
以上软件和程序均来自这位博主,很是感谢这位博主的开源精神。ide

 https://blog.csdn.net/qq153471503/article/details/102976431

基于QT-MQTT 与 EMQ的基础测试与学习本章结束,特别感谢如下两位博主的文档。svg

https://blog.csdn.net/qq_35834171/article/details/98472992
https://www.jianshu.com/p/fd70929661d5post

另外上传一份打包好的 MQTT调试助手
下载地址:学习

https://download.csdn.net/download/weixin_41694118/29945847

四、链接ONENET

地址:183.230.40.39
端口:6002
客户端ID:设备ID
用户名:产品ID
密码: Master-APIkey

订阅主题:
主题:topic 命名规则:
$sys/{pid}/{device-name}/dp/post/json/+
$sys/设备ID/设备名称/dp/post/json/+

发布主题:

五、json 数据解析,发送

json数据

{
    "address": null,
    "age": 80,
    "courses": [
        {
            "name": "Linx kenel development",
            "price": 7.7
        },
        {
            "name": "linux server development",
            "price": 8.8
        }
    ],
    "languages": [
        "C++",
        "C"
    ],
    "name": "milo",
    "phone": {
        "number": "185811885855",
        "type": "home"
    },
    "professional": {
        "computer": 3,
        "english": 4,
        "putonghua": 2
    },
    "vip": true
}

一、json数据生成代码

    QJsonObject professionalObj;
    professionalObj.insert("english",4);
    professionalObj.insert("putonghua",2);
    professionalObj.insert("computer",3);

QJsonArray languagesArr;
languagesArr.append("C++");
languagesArr.append("C");

QJsonObject phoneObj;
phoneObj.insert("number","185811885855");
phoneObj.insert("type","home");

QJsonObject coursesObj1;
coursesObj1.insert("name","Linx kenel development");
coursesObj1.insert("price",7.7);

QJsonObject coursesObj2;
coursesObj2.insert("name","linux server development");
coursesObj2.insert("price",8.8);

QJsonArray coursesArr;
coursesArr.append(coursesObj1);
coursesArr.append(coursesObj2);


QJsonObject rootObj;
rootObj.insert("name","milo");
rootObj.insert("age",80);
rootObj.insert("professional",professionalObj);
 rootObj.insert("languages",languagesArr);
rootObj.insert("phone",phoneObj);
rootObj.insert("courses",coursesArr);
rootObj.insert("vip",true);
rootObj.insert("address",QJsonValue::Null);

QJsonDocument doc;
doc.setObject(rootObj);
QByteArray byteArr = doc.toJson();

QString jsonStr = QString(byteArr);

qDebug()<<jsonStr;

QFile file("D:\\temp.json");
if(!file.open(QIODevice::WriteOnly | QIODevice::Text|QIODevice::Append)){
    qDebug()<<"can't open error";
}else{
    QTextStream steam(&file);
    steam<< jsonStr<<"\n";
    file.close();
}

二、json数据解析

void test()
{

QFile file("D:\\temp.json");
if(!file.open(QFile::ReadOnly)){
  return;
}
QByteArray byteArr = file.readAll();
QString jsonStr = QString(byteArr);
qDebug()<<jsonStr;


QJsonParseError err;
//    QJsonDocument doc = QJsonDocument::fromJson(message.payload(),&err);

QJsonDocument doc = QJsonDocument::fromJson(byteArr,&err);

QJsonObject rootObj = doc.object();
if(err.error != QJsonParseError::NoError){
    qDebug()<<"json格式错误";
    return;
}else
{
    QJsonValue nameValue = rootObj.value("name");
    qDebug()<<nameValue.toString();

    QJsonValue ageValue = rootObj.value("age");
    qDebug()<<ageValue.toInt();

    QJsonValue professionValue = rootObj.value("professional");
    if(professionValue.type() == QJsonValue::Object){
        QJsonObject professioalObj = professionValue.toObject();
        QJsonValue englishValue = professioalObj.value("english");
        qDebug()<<englishValue.toInt();
        QJsonValue putonghuaValue = professioalObj.value("putonghua");
        qDebug()<<putonghuaValue.toInt();
        QJsonValue computerValue = professioalObj.value("computer");
        qDebug()<<computerValue.toInt();
    }

    QJsonValue languagesValue = rootObj.value("languages");
    if(languagesValue.type() == QJsonValue::Array){
        QJsonArray languagesArr = languagesValue.toArray();
        for(int i=0;i<languagesArr.count();i++){
           QJsonValue languageValue =languagesArr.at(i);
           qDebug()<<languageValue.toString();
        }
    }

    QJsonValue phoneValue = rootObj.value("phone");
    if(phoneValue.type() == QJsonValue::Object){
        QJsonObject phoneObj = phoneValue.toObject();
        QJsonValue numberValue = phoneObj.value("number");
        qDebug()<<numberValue.toString();
        QJsonValue typeValue = phoneObj.value("type");
        qDebug()<<typeValue.toString();
    }

    QJsonValue coursesValue = rootObj.value("courses");
    if(coursesValue.type() == QJsonValue::Array){
        QJsonArray coursesArr = coursesValue.toArray();
        for(int i=0;i<coursesArr.count();i++){
           QJsonValue courseValue =coursesArr.at(i);
           if(courseValue.type() == QJsonValue::Object){
               QJsonObject courseObj = courseValue.toObject();
               QJsonValue nameValue = courseObj.value("name");
               qDebug()<<nameValue.toString();

               QJsonValue priceValue = courseObj.value("price");
               qDebug()<<priceValue.toDouble();
            }
        }
    }
    QJsonValue vipValue = rootObj.value("vip");
    qDebug()<<vipValue.toBool();

    QJsonValue addressValue = rootObj.value("address");
    if(addressValue.type() == QJsonValue::Null){
        qDebug()<<"NUll";
    }
 }
}

在这里插入图片描述

与EMQ json 通讯
在这里插入图片描述

附言:json 数据的生成及解析的相关程序 都是参考哔哩哔哩博主的程序。
连接:

	https://www.bilibili.com/video/BV1St4y1Y7wV?from=search&seid=682266226100278261&spm_id_from=333.337.0.0

附件:
测试程序:

https://download.csdn.net/download/weixin_41694118/33049090