完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
相关推荐
1个回答
|
|
最近参加了一个比赛,拿实验室中的zigbee传感器模块来实现的一个智能大棚系统:这次比赛感觉自己在硬件方面的知识还是欠缺很多,现在zigbee的更新换代很快,然而我还停留在最近出的传感器模块,在实现代码方面做的还可以,但是硬件方面跟他人差距很大。
基本功能实现: 温湿度的显示,电机模块的控制,调光装置的控制,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()< void mythread::readMsg() { QByteArray qdb=socket->readAll(); QString msg = QString(qdb); qDebug()< } //接收信息,并调用槽函数来调用相应的函数 串口信息的接收 //一部分的代码的展示,具体的代码可以下载来看 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); } |
|
|
|
只有小组成员才能发言,加入小组>>
2463 浏览 0 评论
9287 浏览 4 评论
36973 浏览 19 评论
5056 浏览 0 评论
24994 浏览 34 评论
1612浏览 2评论
1868浏览 1评论
2315浏览 1评论
1645浏览 0评论
625浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-1-15 11:33 , Processed in 1.093708 second(s), Total 45, Slave 39 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (威廉希尔官方网站 图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号