一、MQTT 环境的搭建
1、MQTT 服务器搭建 ----(EMQ)
安装EMQ 参考博客链接
https://blog.csdn.net/qq_35834171/article/details/98472992
二、QT MQTT客户端
参考博客链接
https://www.jianshu.com/p/fd70929661d5
三、知识点集合
1、MQTT -EMQ启动
EMQ文件 解压 目录 F:\QTMQTT\emqx
系统:window7
打开命令提示符窗口,切换磁盘 命令
F:
切换目录命令
cd F:\QTMQTT\emqx
EMQ启动命令
bin\emqx start
之后浏览器打开http://127.0.0.1:18083,输入默认用户名“admin”和默认密码“public”
2、运行QT_mqtt demo
3、qt — MQTT调试助手
以上软件和程序均来自这位博主,非常感谢这位博主的开源精神。
https://blog.csdn.net/qq153471503/article/details/102976431
基于QT-MQTT 与 EMQ的基础测试与学习本章结束,特别感谢以下两位博主的文档。
https://blog.csdn.net/qq_35834171/article/details/98472992
https://www.jianshu.com/p/fd70929661d5
另外上传一份打包好的 MQTT调试助手
下载地址:
https://download.csdn.net/download/weixin_41694118/29945847
4、连接ONENET
地址:183.230.40.39
端口:6002
客户端ID:设备ID
用户名:产品ID
密码: Master-APIkey
订阅主题:
主题:topic 命名规则:
$sys/{pid}/{device-name}/dp/post/json/+
$sys/设备ID/设备名称/dp/post/json/+
发布主题:
5、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
}
1、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();
}
2、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