简介

接接上面写!!!!!!!!!!!!!!!

阿里云配置部分

阿里云的连接分为三部分
1)网关的WiFi模块连接到阿里云;
2)QT上位机连接到阿里云;
3)阿里云的平台配置。
其中第二和第三部分不讲解了不会的可以参考QT作为设备接入阿里云平台这也是我前面写的文章,那么这部分的重点放到WiFi如何连接到阿里云

WiFi模块连接到阿里云

关于WiFi的选型,我选择的是简单而又方便的HC-25。它内部集成AT指令的MQTT协议,小白专属。
下位机连接阿里云通过HC-25WiFi模块自带的MQTT协议连接到阿里云物联网平台,用AT指令配置HC-25WiFi模块订阅和发布对应阿里云的设备。
首先查询设备证书找到ProductKey、DeviceName、DeviceSecret,复制参数到密码生成器中,自定义clientld的值。点击Generate生成password,并保存clientld和password的值。
(1)设置MQTT连接域名:
AT+SOCK=MQTT, a1W0uRZgqlY.iot-as-mqtt.cn-shanghai.aliyuncs.com,1883
(2)设置保活时间:
AT+MQTTK=60
(3)设置MQTT的Connect报文参数:
①AT+MQTTCID= 456789| securemode=2, signmethod = hmacsha1|
②AT+MQTTUSERNAME= HC_25train&a1W0uRZgqlY
③AT+MQTTPASSWORD= 57************************************
(4)设置MQTT订阅消息主题
AT+MQTTSUBTOPIC=/a1W0uRZgqlY/Appx/user/update
(5)设置MQTT推送消息主题
AT+MQTTPUBTOPIC=/a1W0uRZgqlY/Appx/user/get

应用程序设计与实现

系统的主界面可查询两个大棚内的终端节点所采集的所有数据并可以调控环境预设值,可手动开启或关闭当前大棚的调控设备。阈值管理功能,能够为不同的大棚的不同环境参数设置阈值,当环境数据超出阈值范围将发出警报并发出指令开启相应的环境设备并调控环境参数。数据管理功能,能够查看所有大棚的数据,便于用户进行调用和处理。
上位机通过自带的MQTT库函数接入阿里云服务器,以JASON格式发送数据到阿里云物联网平台。按照JASON格式解析云端发送的数据并显示数据到对应的界面上。

应用程序界面展示

主界面是①,然后点击设置参数后会跳转到界面②,点击手动控制会跳转到界面③。界面②点击大棚一会跳转到界面④,点击大棚二会跳转到界面⑤。

QT代码

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "choose.h"
#include "control.h"
#include "pre2.h"
#include "setpre.h"
#include "qmqtt.h"
#include "QHostAddress"
#include "QMessageBox"
#include "QTimer"
MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);time.start(1);connect(&time,&QTimer::timeout,[=](){refreshscreen();});PushButton();//连接到云client = new QMQTT::Client(QHostAddress::LocalHost,1883);client->setHostName("iot-060a06sa.mqtt.iothub.aliyuncs.com");client->setPort(1883);client->setUsername("Appx&a1W0uRZgqlY");client->setPassword("195092B40DC99D223132DAD822DF49840EFE2621");client->setClientId("456321|securemode=2,signmethod=hmacsha1|");client->connectToHost();//订阅// /a1W0uRZgqlY/Appx/user/getclient->subscribe("/a1W0uRZgqlY/Appx/user/get");connect(client,&QMQTT::Client::received,this,&MainWindow::mqttSetData);//推送// /a1W0uRZgqlY/Appx/user/update//显示判断setWindowFlags(Qt::FramelessWindowHint);this->setAutoFillBackground(true);QPalette palette;//palette.setColor(QPalette::Background, QColor(0,0,0));QPixmap pix_img;pix_img.load(":/start.png");pix_img = pix_img.scaled(1080, 2430,Qt::IgnoreAspectRatio);palette.setBrush(QPalette::Background, QBrush(pix_img));this->setPalette(palette);
}
void MainWindow::mqttSetData(QMQTT::Message mess)
{qDebug()<<mess.topic()<<"::"<<mess.payload();QJsonParseError err;//错误解析QJsonDocument document = QJsonDocument::fromJson(mess.payload(),&err);QJsonObject jsonObj = document.object();if(err.error != QJsonParseError::NoError){qDebug()<<"JSON格式错误";}//大棚一号GH.CO2[0]=jsonObj["CO2_1"].toInt();GH.CO2pre[0]=jsonObj["CO2pre_1"].toInt();GH.PH[0]=jsonObj["PH_1"].toInt();GH.PHpre[0]=jsonObj["PHpre_1"].toInt();GH.SoilHum[0]=jsonObj["SoilHum_1"].toInt();GH.SoilHumpre[0]=jsonObj["SoilHumpre_1"].toInt();
//    GH.beef[0]=jsonObj["beef_1"].toInt();
//    GH.fan[0]=jsonObj["fan_1"].toInt();
//    GH.water[0]=jsonObj["water_1"].toInt();//大棚二号GH.CO2[1]=jsonObj["CO2_2"].toInt();GH.CO2pre[1]=jsonObj["CO2pre_2"].toInt();GH.PH[1]=jsonObj["PH_2"].toInt();GH.PHpre[1]=jsonObj["PHpre_2"].toInt();GH.SoilHum[1]=jsonObj["SoilHum_2"].toInt();GH.SoilHumpre[1]=jsonObj["SoilHumpre_2"].toInt();
//    GH.beef[1]=jsonObj["beef_2"].toInt();
//    GH.fan[1]=jsonObj["fan_2"].toInt();
//    GH.water[1]=jsonObj["water_2"].toInt();
}
MainWindow::~MainWindow()
{delete ui;
}
void MainWindow::refreshscreen(){//大棚一//二氧化碳if(GH.CO2[0]>GH.CO2pre[0]){ui->CO2_1->setText("CO2浓度过高");ui->CO2_1->setStyleSheet("background-color: rgb(255, 0, 0);");}else{ui->CO2_1->setText("CO2浓度正常");ui->CO2_1->setStyleSheet("background-color: rgb(255, 255, 255);");}//PH值if(GH.PH[0]<GH.PHpre[0]-1100){ui->PH_1->setText("PH值过低");ui->PH_1->setStyleSheet("background-color: rgb(255, 0, 0);");}else if(GH.PH[0]>GH.PHpre[0]+1100){ui->PH_1->setText("PH值过高");ui->PH_1->setStyleSheet("background-color: rgb(255, 0, 0);");}else{ui->PH_1->setText("PH正常");ui->PH_1->setStyleSheet("background-color: rgb(255, 255, 255);");}//SoilHumif(GH.SoilHum[0]>GH.SoilHumpre[0]){ui->Soil_1->setText("土壤湿度过高");ui->Soil_1->setStyleSheet("background-color: rgb(255, 0, 0);");}else{ui->Soil_1->setText("土壤湿度正常");ui->Soil_1->setStyleSheet("background-color: rgb(255, 255, 255);");}//大棚二号//二氧化碳if(GH.CO2[1]>GH.CO2pre[1]){ui->CO2_2->setText("CO2浓度过高");ui->CO2_2->setStyleSheet("background-color: rgb(255, 0, 0);");}else{ui->CO2_2->setText("CO2浓度正常");ui->CO2_2->setStyleSheet("background-color: rgb(255, 255, 255);");}//PH值if(GH.PH[1]<GH.PHpre[1]-1100){ui->PH_2->setText("PH值过低");ui->PH_2->setStyleSheet("background-color: rgb(255, 0, 0);");}else if(GH.PH[1]>GH.PHpre[1]+1100){ui->PH_2->setText("PH值过高");ui->PH_2->setStyleSheet("background-color: rgb(255, 0, 0);");}else{ui->PH_2->setText("PH正常");ui->PH_2->setStyleSheet("background-color: rgb(255, 255, 255);");}//SoilHumif(GH.SoilHum[1]>GH.SoilHumpre[1]){ui->Soil_2->setText("土壤湿度过高");ui->Soil_2->setStyleSheet("background-color: rgb(255, 0, 0);");}else{ui->Soil_2->setText("土壤湿度正常");ui->Soil_2->setStyleSheet("background-color: rgb(255, 255, 255);");}
}
void MainWindow::PushButton(){connect(ui->setpre,&QPushButton::clicked,this,&MainWindow::Choose_ow);connect(ui->controlhand,&QPushButton::clicked,this,&MainWindow::Control);
}
void MainWindow::Choose_ow(){cho =new choose(&GH,client);cho->show();
}
void MainWindow::Control(){con=new control(client);con->show();
}
void MainWindow::sendTopic(QString data){client->publish(QMQTT::Message(0,"/a1W0uRZgqlY/Appx/user/update",data.toLocal8Bit()));
}

有问题评论区或私信-_-

毕设-基于LoRa的智能农业大棚(三)相关推荐

  1. 毕设-基于LoRa的智能农业大棚

    简介 由于疏忽忘记介绍器件选型,补上器件和开发板的信息 终端节点 土壤湿度监测模块 HW-080土壤湿度传感器与数据采集器配合,ADC采集或者高低电平. E-201-C PH复合电极模块 电极是由PH ...

  2. 毕设-基于LoRa的智能农业大棚(一)

    任务目标 实现功能: (1)能够实时检测显示土壤湿度,当需要浇水的时候自动打开灌溉系统,土壤湿度满足要求后,关闭灌溉系统: (2)检测显示二氧化碳浓度,过高时,通过继电器打开通风排气扇,同时将二氧化碳 ...

  3. 毕设-基于LoRa的智能农业大棚(二)

    简介 接着前面的写!!!!!!!!! 终端节点程序设计和实现 首先终端节点的任务就是采集传感器的数据并发送数据到LoRa模块.接受LoRa模块的数据并处理.控制外设. 主函数中主要判断采集的数值是否符 ...

  4. 毕业论文系列之基于WiFi的智能农业大棚管控系统设计代码

    #include <dht11.h>//dht11库 #include <MsTimer2.h>               //定时器库的 头文件 #include < ...

  5. 基于51单片机智能农业大棚恒温恒湿Proteus仿真(源码+仿真+全套资料)

    资料编号:134 视频讲解: 134-基于51单片机智能农业大棚监测恒温恒湿Proteus仿真(源码+仿真+全套资料) 功能介绍: 采用51单片机作为主控芯片,可以采集当前的温湿度,并且LCD1602 ...

  6. 基于51单片机智能农业大棚恒温恒湿Proteus仿真

    资料编号:134  下面是相关功能视频演示: 134-基于51单片机智能农业大棚监测恒温恒湿Proteus仿真(源码+仿真+全套资料) 功能介绍: 采用51单片机作为主控芯片,可以采集当前的温湿度,并 ...

  7. 基于PLC的智能农业温室大棚控制系统设计大棚电气控制组态 温室大棚组态 温室组态

    基于PLC的智能农业温室大棚控制系统设计大棚电气控制组态 温室大棚组态 温室组态 ID:6959673043692432

  8. 基于Lora的远程农业监测与控制系统,过程回顾及经验总结

    最近毕业设计终于是告一段落了,大概断断续续边做边玩搞了两个月吧,论文还没写麻了. 今天写这篇博客的主要目的是记录梳理一下自己做毕设的过程,同时也希望自己的毕设经验能给有需要的人提供一些帮助. 一.基本 ...

  9. 智能农业大棚控制设计

    近年来,温室大棚的应用规模越来越广泛,由此也造成人力方面不菲的支出.与之相对,基于物联网.自动化控制.计算机等技术而形成的智能农业大棚控制系统,越来越受到人们的重视,对传统的温室进行智能化改造具有非常 ...

最新文章

  1. python批量pdf转word,python批量实现Word文件转换为PDF文件
  2. git 打tag_图文讲解,团队开发中的 Git 最佳实践
  3. 小白的Unity5之路(一)
  4. mysql中index的作用,在mysql中使用INDEXES有什么好处?
  5. boost::hana::suffix用法的测试程序
  6. POCO C++ Libraies介绍及常见用法
  7. python基础之条件循环语句
  8. java map 集合实例_Java之集合类【HashMap】【入门版,实例解析】
  9. ubuntu/centos Server 安装完成后,开启SSH,配置IP地址,DNS
  10. oracle数据库rman备份与还原
  11. CentOS7 (精简操作指令)
  12. QGIS使用栅格图层
  13. 【Oracle】904: “xxx“: 标识符无效
  14. 工具-虚拟机的桥接模式和NAT模式的区别
  15. c语言short a=32768,C语言中short整型资料的范围“-32768——32767”中的“-32768”是如何确定的?...
  16. 笔记本联想拯救者英伟达win11调节不了亮度
  17. OKRs-E,OKR实战基础理论
  18. 图像处理问题解决师——求取每个颗粒到其他颗粒边缘的最近距离
  19. css之-各种基本图形画法总结(css3.0)
  20. ROS中的机器人模型控制——ros_control

热门文章

  1. UE4_如何在UI中设置动态图片
  2. uniapp 提供的手指事件
  3. TCP握手机制、TCP长连接和短连接、TCP 保活机制 、心跳机制
  4. 数据的插入、查询、删除、修改
  5. 如何使用TensorFlow实现卷积神经网络
  6. C语言中自动获取当前时间和日期
  7. 融资担保系统-助力企业的可持续发展
  8. 【STM32】USART接收不定长数据、防止数据溢出
  9. ArrayBuffer和Float32Array
  10. 热图展示单细胞转录组基因在不同组中表达阳性细胞差异