首页 分享 qt4.8 利用串口实现智能大棚系统

qt4.8 利用串口实现智能大棚系统

来源:花匠小妙招 时间:2025-01-18 04:42

最近参加了一个比赛,拿实验室中的zigbee传感器模块来实现的一个智能大棚系统:这次比赛感觉自己在硬件方面的知识还是欠缺很多,现在zigbee的更新换代很快,然而我还停留在最近出的传感器模块,在实现代码方面做的还可以,但是硬件方面跟他人差距很大。

https://download.csdn.net/download/qq_36819130/10739556  下载地址 

环境是ubuntu下 qt4.8 最好是root用户下,因为串口的调用需要权限。

基本功能实现:

温湿度的显示,电机模块的控制,调光装置的控制,socket服务器通信,红外检测,烟雾检测,动态增加节点。

实现界面

串口通信

bool SerialService::openCom() // 打开串口

{

if(my_com)

{

closeCom();

}

else

{

QString com_name = "/dev/ttyS0"; // 这个是根据自己的串口来的我是在ubuntu下写的

my_com = new Posix_QextSerialPort(com_name, QextSerialBase::Polling);

}

my_com->open(QIODevice::ReadWrite);

if(my_com->isOpen())

{

com_state = 1;

my_com->setBaudRate(BAUD115200);

my_com->setDataBits(DATA_8);

my_com->setParity(PAR_NONE);

my_com->setStopBits(STOP_1);

my_com->setFlowControl(FLOW_OFF);

my_com->setTimeout(50);

return true;

}

else

{

com_state = 0;

return false;

}

}

void SerialService::readFromSerial() //从串口接收信息

{

if(my_com && 1 == com_state)

{

QByteArray byte = my_com->readAll();

if(!byte.isEmpty())

emit receiveMsgFromSerial(byte);

}

}

int SerialService::writeToSerial(const QByteArray &byte)//从串口发送信息

{

if(my_com && 1 == com_state)

{

return my_com->write(byte);

}

return -1;

}

sockt通信

socket = new QTcpSocket(this);

socket->connectToHost(QHostAddress("192.168.1.104"), 8888);

thread=new mythread(socket);

// 创建socket 要创建一个新的线程,其中通过槽函数来实现消息的发送和接收

ui->msgInfo->append(mesg);

if(UPLoad == OPEN)

{

QString str = mesg + "rn";

socket->write(str.toAscii());

socket->flush();

}

//发送信息

mythread::mythread(QTcpSocket *sock)

{

socket=sock;

connect(socket,SIGNAL(readyRead()),this,SLOT(readMsg()));

}

void mythread::run()

{

qDebug()<<socket->isOpen()<<endl;

}

void mythread::readMsg()

{

QByteArray qdb=socket->readAll();

QString msg = QString(qdb);

qDebug()<<msg<<" is the sent msg!"<<endl;

emit sendMsg(msg);

}

//接收信息,并调用槽函数来调用相应的函数

串口信息的接收

//一部分的代码的展示,具体的代码可以下载来看

void MainWindow::handleMSG(QByteArray msg)

{

if(msg.length() < 6)

return ;

//温度传感器

if(0x02 == msg[3] && 0x01 == msg[4])

{

QString str = "";

if(0x01 == msg[2]) //1号传感器

{

timer3->start(timeBlock);

tempA->ValueOf(msg);

templist.replace(0,tempA);

if(kas++ >= 10)

{

kas = 0;

//emit goMsg("Update temphumlight A value!");

}

}

}

对于串口接收的数据,有一些需要做一些特殊的处理,例如温湿度模块发送的信息,我们需要经过计算才可以得到信息

void Temp_Humi_Ligh::ValueOf(QByteArray &msg)

{

unsigned char XH = msg[5], XL = msg[6];

unsigned char YH = msg[7], YL = msg[8];

unsigned char GH = msg[9], GL = msg[10];

temperature = XH*256 + XL;

humidity = YH*256 + YL;

light = 1.0*(GH*256 + GL)*3012.9/(32768*4);

}

对于qt的背景图的添加我会在另外的一个博客中写到

相关知识

智能宿舍系统的实现
基于Zigbee的智能温室大棚系统(附详细使用教程+完整代码+原理图+完整课设报告)
农业大棚环境监测系统的设计与实现
智能玻璃大棚系统,助力农业科研
基于4G手机远程监控的智能花卉自动浇灌系统的设计与实现计算机专业
山西某智能农业大棚温湿度监控系统
温室大棚花卉智能监控系统设计
基于物联网的智能植物养护系统的设计与实现
一种智能花卉培育系统
温室大棚智能栽培系统设计

网址: qt4.8 利用串口实现智能大棚系统 https://www.huajiangbk.com/newsview1618011.html

所属分类:花卉
上一篇: 溫室大棚設計承重標準
下一篇: 农业温室大棚建设需要什么资质?

推荐分享