查看: 1867|回复: 0

[大赛作品提交] 项目最终提交:基于树莓派的智能家居环境监测控制系统

[复制链接]

主题

好友

742

积分

举人

  • TA的每日心情
    开心
    2018-6-12 13:47
  • 签到天数: 5 天

    连续签到: 1 天

    [LV.2]偶尔看看I

    发表于 2018-1-11 23:25:29 |显示全部楼层
    本帖最后由 ky123 于 2018-1-31 14:02 编辑

    项目最终提交:基于树莓派的智能家居环境监测控制系统


    完成度:85%


    今天是E络盟树莓派比赛的截止日期,我也在这天提交自己的作品——基于QT5.9上位机和树莓派的智能家居环境监测控制系统。


    项目简介:该项目以树莓派作为服务器,PC电脑作为客户端,以TCP局域网通信的方式进行智能家居设备的数据传输和设备控制。通信方式有两种,一种是有线以太网,另一种则是树莓派直接连WIFI热点进行通信。树莓派连接DHT11温湿度传感器、BMP280气压传感器,采集温度、湿度、气压数据,以TCP Socket数据包的形式发送到电脑客户端,而电脑同样以TCP Socket数据包的形式看,控制树莓派连接的继电器和RGB灯,继电器另一端连接着5V LED灯和风扇,所以,电脑是以TCP通信的形式控制5V LED灯和风扇的开闭。另外,该上位机还带有MP3播放器的功能,拥有扫描歌曲、播放歌曲、暂停播放、停止播放的功能。

    1.JPG


    硬件介绍:
    DHT11温湿度传感器,单总线通信:
    IMG_20180112_010020R.jpg

    BMP280气压传感器,I2C总线通信:
    IMG_20180112_010056R.jpg

    RGB LED灯:
    IMG_20180112_010144R.jpg

    四路光耦隔离继电器:
    IMG_20180112_010204R.jpg

    项目整体连接图:
    IMG_20180112_010007R.jpg

    预先在/home/pi/Music文件夹下存放歌曲:
    3.JPG

    QT上位机界面设计:
    2.jpg
    4.JPG


    控制LED:
    1.gif


    DHT11驱动代码:
    1. #ifndef _RASPI_DHT11_H_
    2. #define _RASPI_DHT11_H_
    3. #include <wiringPi.h>

    4. int dht11_val[5]={0,0,0,0,0},dht11_flag=-1;
    5. #define DHT11PIN 7

    6. int Raspi_DHT11_Read()
    7. {
    8.     uint8_t lststate=HIGH;
    9.     uint8_t counter=0;
    10.     uint8_t j=0,i;
    11.     for(i=0;i<5;i++)
    12.         dht11_val[i]=0;

    13.     pinMode(DHT11PIN,OUTPUT);
    14.     digitalWrite(DHT11PIN,LOW);
    15.     delay(18);
    16.     digitalWrite(DHT11PIN,HIGH);
    17.     delayMicroseconds(40);

    18.     pinMode(DHT11PIN,INPUT);
    19.     for(i=0;i<85;i++)
    20.     {
    21.         counter=0;
    22.         while(digitalRead(DHT11PIN)==lststate)
    23.         {
    24.             counter++;
    25.             delayMicroseconds(1);
    26.             if(counter==255)
    27.                 break;
    28.         }
    29.         lststate=digitalRead(DHT11PIN);

    30.         if(counter==255)break;
    31.         if((i>=4)&&(i%2==0))
    32.         {
    33.             dht11_val[j/8]<<=1;
    34.             if(counter>16)
    35.                 dht11_val[j/8]|=1;
    36.             j++;
    37.         }
    38.     }
    39.     if((j>=40)&&(dht11_val[4]==((dht11_val[0]+dht11_val[1]+dht11_val[2]+dht11_val[3])&0xFF)))
    40.         return 0;

    41.     return 1;
    42. }

    43. #endif
    复制代码
    BMP280驱动代码:
    1. #ifndef _RASPI_BMP280_H_
    2. #define _RASPI_BMP280_H_
    3. #include <stdio.h>
    4. #include <wiringPi.h>
    5. #include <wiringPiI2C.h>

    6. unsigned short dig_t1,dig_p1;
    7. signed short dig_t2,dig_t3,dig_p2,dig_p3,dig_p4;
    8. signed short dig_p5,dig_p6,dig_p7,dig_p8,dig_p9;
    9. float temp,pres,var1,var2;
    10. int pres_int=0,bmp280_flag=-1;
    11. uint8_t msb,lsb,xlsb,pres_h=0,pres_l=0,pres_flo=0;

    12. int i2c_fd;

    13. int Raspi_BMP280_Init()
    14. {
    15.     wiringPiSetup();
    16.     i2c_fd=wiringPiI2CSetup(0x76);
    17.     if(wiringPiI2CReadReg8(i2c_fd,0xd0)==0x58)
    18.     {
    19.         //开启温度检测
    20.         system("i2cset -y 1 0x76 0xff 0xf4");
    21.         dig_t1=(wiringPiI2CReadReg8(i2c_fd,0x89)<<8)
    22.         |wiringPiI2CReadReg8(i2c_fd,0x88);

    23.         dig_t2=(wiringPiI2CReadReg8(i2c_fd,0x8b)<<8)
    24.         |wiringPiI2CReadReg8(i2c_fd,0x8a);

    25.         dig_t3=(wiringPiI2CReadReg8(i2c_fd,0x8d)<<8)
    26.         |wiringPiI2CReadReg8(i2c_fd,0x8c);

    27.         dig_p1=(wiringPiI2CReadReg8(i2c_fd,0x8f)<<8)
    28.         |wiringPiI2CReadReg8(i2c_fd,0x8e);

    29.         dig_p2=(wiringPiI2CReadReg8(i2c_fd,0x91)<<8)
    30.         |wiringPiI2CReadReg8(i2c_fd,0x90);

    31.         dig_p3=(wiringPiI2CReadReg8(i2c_fd,0x93)<<8)
    32.         |wiringPiI2CReadReg8(i2c_fd,0x92);
    33.         dig_p4=(wiringPiI2CReadReg8(i2c_fd,0x95)<<8)
    34.         |wiringPiI2CReadReg8(i2c_fd,0x94);
    35.         dig_p5=(wiringPiI2CReadReg8(i2c_fd,0x97)<<8)
    36.         |wiringPiI2CReadReg8(i2c_fd,0x96);
    37.         dig_p6=(wiringPiI2CReadReg8(i2c_fd,0x99)<<8)
    38.         |wiringPiI2CReadReg8(i2c_fd,0x98);
    39.         dig_p7=(wiringPiI2CReadReg8(i2c_fd,0x9b)<<8)
    40.         |wiringPiI2CReadReg8(i2c_fd,0x9a);
    41.         dig_p8=(wiringPiI2CReadReg8(i2c_fd,0x9d)<<8)
    42.         |wiringPiI2CReadReg8(i2c_fd,0x9c);
    43.         dig_p9=(wiringPiI2CReadReg8(i2c_fd,0x9f)<<8)
    44.         |wiringPiI2CReadReg8(i2c_fd,0x9e);
    45.         return 0;
    46.     }
    47.     return -1;
    48. }

    49. float Raspi_BMP280_Read_Pressure()
    50. {
    51.     msb=wiringPiI2CReadReg8(i2c_fd,0xf7);
    52.     lsb=wiringPiI2CReadReg8(i2c_fd,0xf8);
    53.     xlsb=wiringPiI2CReadReg8(i2c_fd,0xf9);
    54.     pres=(msb<<16|lsb<<8|xlsb)>>4;

    55.     msb=wiringPiI2CReadReg8(i2c_fd,0xfa);
    56.     lsb=wiringPiI2CReadReg8(i2c_fd,0xfb);
    57.     xlsb=wiringPiI2CReadReg8(i2c_fd,0xfc);
    58.     temp=(msb<<16|lsb<<8|xlsb)>>4;

    59.     var1=(temp/16384.0-dig_t1/1024.0)*(dig_t2);
    60.     var2=((temp/131072.0-dig_t1/8192.0)*(temp/131072.0-dig_t1/8192.0))*dig_t3;
    61.     temp=var1+var2;
    62.     temp/=5120.0;

    63.     var1=(temp/2.0)-64000.0;
    64.     var2=var1*var1*(dig_p6)/32768.0;
    65.     var2=var2+var1*(dig_p5)*2.0;
    66.     var2=(var2/4.0)+((dig_p4)*65536.0);
    67.     var1=(dig_p3)*var1*var1/524288.0+(dig_p2)*var1/524288.0;
    68.     var1=(1.0+var1/32768.0)*(dig_p1);

    69.     pres=1048576.0-pres;
    70.     pres=(pres-(var2/4096.0))*6250.0/var1;
    71.     var1=(dig_p9)*pres*pres/2147483648.0;
    72.     var2=pres*(dig_p8)/32768.0;
    73.     pres=pres+(var1 + var2+(dig_p7))/16.0;
    74.     return pres;
    75. }

    76. #endif
    复制代码
    LED&电磁继电器驱动代码:
    1. #ifndef _RASPI_LED_PWM_H_
    2. #define _RASPI_LED_PWM_H_
    3. #include <wiringPi.h>

    4. #define LED5V 0
    5. #define MOTOR1 2
    6. #define MOTOR2 3
    7. #define RED 1
    8. #define GREEN 24
    9. #define BLUE 26

    10. void Raspi_LED_Init()
    11. {
    12.     pinMode(LED5V,OUTPUT);
    13.     pinMode(MOTOR1,OUTPUT);
    14.     pinMode(MOTOR2,OUTPUT);
    15.     digitalWrite(LED5V,HIGH);
    16.     digitalWrite(MOTOR1,LOW);
    17.     digitalWrite(MOTOR2,LOW);
    18. }

    19. void Raspi_PWM_Init(int range)
    20. {
    21.     pinMode(RED,PWM_OUTPUT);
    22.     pinMode(GREEN,PWM_OUTPUT);
    23.     pinMode(BLUE,PWM_OUTPUT);
    24.     pwmSetRange(range);
    25. }

    26. void Raspi_PWM_RGB(int r,int g,int b)
    27. {
    28.     pwmWrite(RED,r);
    29.     pwmWrite(GREEN,g);
    30.     //pwmWrite(BLUE,b);
    31. }

    32. #endif
    复制代码
    RTC驱动代码:
    1. #ifndef _RASPI_RTC_H_
    2. #define _RASPI_RTC_H_
    3. #include <stdio.h>
    4. #include <time.h>

    5. time_t timep;
    6. int hour,minute,second;

    7. void Get_Time()
    8. {
    9.     time(&timep);
    10.     hour=(ctime(&timep)[11]-'0')*10+ctime(&timep)[12]-'0';
    11.     minute=(ctime(&timep)[14]-'0')*10+ctime(&timep)[15]-'0';
    12.     second=(ctime(&timep)[17]-'0')*10+ctime(&timep)[18]-'0';
    13. }

    14. #endif
    复制代码
    树莓派main文件:
    1. #include <stdio.h>
    2. #include <stdlib.h>
    3. #include <fcntl.h>
    4. #include <unistd.h>
    5. #include <dirent.h>
    6. #include <string.h>
    7. #include <sys/socket.h>
    8. #include <sys/mman.h>
    9. #include <sys/types.h>
    10. #include <arpa/inet.h>
    11. #include <netinet/in.h>
    12. #include <linux/videodev2.h>
    13. #include <wiringPi.h>
    14. #include "raspi_dht11.h"
    15. #include "raspi_bmp280.h"
    16. #include "raspi_led_pwm.h"
    17. #include "raspi_rtc.h"

    18. int newsock,count=0,local=0;
    19. pthread_t id1;
    20. struct dirent *ptr;
    21. DIR *dir;
    22. char mp3_buf[100][100]={"/home/pi/Music"};
    23. char mp3_play[100];

    24. void TCP_Listen()
    25. {
    26.     char recvbuf[10],sendbuf[1000],time_buf[10];
    27.     Raspi_LED_Init();
    28.     Raspi_PWM_Init(100);
    29.     while(1)
    30.     {
    31.         recv(newsock,recvbuf,10,0);
    32.         if(recvbuf[0]==0x01)
    33.         {
    34.             if(recvbuf[1]==1)
    35.                 digitalWrite(LED5V,LOW);
    36.             else if(recvbuf[1]==2)
    37.                 digitalWrite(LED5V,HIGH);
    38.         }

    39.         else if(recvbuf[0]==0x02)
    40.         {
    41.             if(recvbuf[1]==1)
    42.             {
    43.                 digitalWrite(MOTOR1,LOW);
    44.                 digitalWrite(MOTOR2,HIGH);
    45.             }
    46.             else if(recvbuf[1]==2)
    47.             {
    48.                 digitalWrite(MOTOR1,HIGH);
    49.                 digitalWrite(MOTOR2,LOW);
    50.             }
    51.             else if(recvbuf[1]==3)
    52.             {
    53.                 digitalWrite(MOTOR1,LOW);
    54.                 digitalWrite(MOTOR2,LOW);
    55.             }
    56.         }

    57.         else if(recvbuf[0]==0x03)
    58.         {
    59.             Raspi_PWM_RGB(recvbuf[1],recvbuf[2],recvbuf[3]);
    60.         }

    61.         else if(recvbuf[0]==0x04)
    62.         {
    63.             count=0;
    64.             dir=opendir("/home/pi/Music");
    65.             while((ptr=readdir(dir))!=NULL)
    66.             {
    67.                 if(strcmp(ptr->d_name,".")!=0&&strcmp(ptr->d_name,"..")!=0)
    68.                 {
    69.                     strcpy(mp3_buf[count],"/home/pi/Music/");
    70.                     strcat(mp3_buf[count],ptr->d_name);
    71.                     count++;
    72.                 }
    73.             }

    74.             memset(sendbuf,0,sizeof(sendbuf));
    75.             sendbuf[0]=0x02;
    76.             sendbuf[1]=count;
    77.             fflush(stdout);
    78.             local=0;
    79.             while(local<count)
    80.             {
    81.                 strcat(sendbuf,mp3_buf[local]);
    82.                 strcat(sendbuf,"|");
    83.                 local++;
    84.             }
    85.             fflush(stdout);
    86.             send(newsock,sendbuf,sizeof(sendbuf),10);
    87.             recvbuf[0]=0x00;
    88.             closedir(dir);
    89.         }

    90.         else if(recvbuf[0]==0x05)
    91.         {
    92.             strcpy(mp3_play,"");
    93.             strcat(mp3_play,"madplay ");
    94.             strcat(mp3_play,mp3_buf[recvbuf[1]]);
    95.             strcat(mp3_play," &");
    96.             recvbuf[0]=0x00;
    97.             system(mp3_play);
    98.             continue;
    99.         }

    100.         else if(recvbuf[0]==0x06)
    101.         {
    102.             recvbuf[0]=' ';
    103.             sprintf(time_buf,"date -s "%s"",recvbuf);
    104.             system(time_buf);
    105.         }

    106.         else if(recvbuf[0]==0x07)
    107.             system("killall -9  madplay &");

    108.     }
    109. }

    110. int main()
    111. {
    112.         int ret,sockfd,video_fd,i=0,j=0;
    113.         char sendbuf[10];
    114.         if(Raspi_BMP280_Init()==0)bmp280_flag=0;

    115.         int addrsize=sizeof(struct sockaddr);
    116.         struct sockaddr_in bindaddr;
    117.         struct sockaddr_in boyaddr;
    118.         bzero(&bindaddr,sizeof(bindaddr));
    119.         bindaddr.sin_family=AF_INET;
    120.         bindaddr.sin_port=htons(10086);
    121.         bindaddr.sin_addr.s_addr=inet_addr("169.254.122.4");
    122.         sockfd=socket(AF_INET,SOCK_STREAM,0);

    123.         if(sockfd==-1)
    124.         {
    125.                 printf("create socket failed!\n");
    126.                 return -1;
    127.         }

    128.         ret=bind(sockfd,(struct sockaddr *)&bindaddr,addrsize);
    129.         if(ret==-1)
    130.         {
    131.                 printf("bind failed!\n");
    132.                 return -1;
    133.         }
    134.         ret=listen(sockfd,5);
    135.         if(ret==-1)
    136.         {
    137.                 printf("listen failed!\n");
    138.                 return -1;
    139.         }

    140.         newsock=accept(sockfd,(struct sockaddr *)&boyaddr,&addrsize);
    141.         if(newsock==-1)
    142.         {
    143.                 printf("accept failed!\n");
    144.                 return -1;
    145.         }
    146.         pthread_create(&id1,NULL,(void *)TCP_Listen,NULL);

    147.         while(1)
    148.         {

    149.             if(Raspi_DHT11_Read()==0)
    150.             {
    151.                 sendbuf[1]=dht11_val[0];
    152.                 sendbuf[2]=dht11_val[2];
    153.                 dht11_flag=0;
    154.             }
    155.             if(bmp280_flag==0)
    156.             {
    157.                 Raspi_BMP280_Read_Pressure();
    158.                 pres_int=(int)pres;
    159.                 pres_h=pres_int>>8;
    160.                 pres_l=pres_int&0xff;
    161.                 sendbuf[3]=pres_h;
    162.                 sendbuf[4]=pres_l;
    163.                 pres_flo=(int)(pres*100);
    164.                 sendbuf[5]=pres_flo;
    165.             }

    166.             Get_Time();
    167.             sendbuf[6]=hour;
    168.             sendbuf[7]=minute;
    169.             sendbuf[8]=second;

    170.             if(dht11_flag==0&&bmp280_flag==0)
    171.             {
    172.                 sendbuf[0]=0x01;
    173.                 send(newsock,sendbuf,10,0);
    174.             }

    175.         }
    176.         close(sockfd);
    177.         close(newsock);

    178.         return 0;
    179. }
    复制代码
    QT上位机代码(mainwindow.cpp):
    1. #include "mainwindow.h"
    2. #include "ui_mainwindow.h"


    3. MainWindow::MainWindow(QWidget *parent) :
    4.     QMainWindow(parent),
    5.     ui(new Ui::MainWindow)
    6. {
    7.     ui->setupUi(this);
    8.     connect(socket,SIGNAL(disconnected()),this,SLOT(Disconnect_to_Server_Succeed()));
    9.     connect(socket,SIGNAL(connected()),this,SLOT(Connect_to_Server_Succeed()));
    10.     connect(socket,SIGNAL(readyRead()),this,SLOT(Read_from_Server_Succeed()));
    11.     ui->PB1->setEnabled(false);
    12.     ui->PB3->setEnabled(false);
    13.     ui->HS1->setEnabled(false);
    14.     ui->HS2->setEnabled(false);
    15.     ui->HS3->setEnabled(false);
    16.     //ui->tab2->setEnabled(false);
    17.     ui->LCDN1->setDigitCount(8);
    18.     ui->LCDN2->setDigitCount(8);
    19.     //server->listen(QHostAddress::Any,10086);
    20.     //QObject::connect(server,&QTcpServer::newConnection,this,MainWindow::server_New_Connect);
    21. }

    22. void MainWindow::server_New_Connect()
    23. {
    24.     socket=server->nextPendingConnection();
    25.     qDebug()<<"有一个新客户端接入本机!";
    26.     QObject::connect(socket,&QTcpSocket::readyRead,this,&MainWindow::socket_Read_Data);
    27. }

    28. void MainWindow::socket_Read_Data()
    29. {
    30.     buffer=socket->readAll();
    31. }

    32. MainWindow::~MainWindow()
    33. {
    34.     delete ui,server,socket;
    35. }

    36. void MainWindow::on_PB2_clicked()
    37. {
    38.     qs_server_ip=ui->LE1->text();
    39.     port=ui->LE2->text().toInt();
    40.     socket->connectToHost(qs_server_ip,port,QTcpSocket::ReadWrite);
    41.     connect(ui->PB2,SIGNAL(clicked()),this,SLOT(on_PB2_clicked_2()));
    42.     disconnect(ui->PB2,SIGNAL(clicked()),this,SLOT(on_PB2_clicked()));
    43. }

    44. void MainWindow::on_PB2_clicked_2()
    45. {
    46.     ui->PGB1->setValue(0);
    47.     ui->PGB2->setValue(0);
    48.     socket->disconnectFromHost();
    49.     connect(ui->PB2,SIGNAL(clicked()),this,SLOT(on_PB2_clicked()));
    50.     disconnect(ui->PB2,SIGNAL(clicked()),this,SLOT(on_PB2_clicked_2()));
    51. }

    52. void MainWindow::Connect_to_Server_Succeed()
    53. {
    54.     ui->PB1->setEnabled(true);
    55.     ui->PB3->setEnabled(true);
    56.     ui->HS1->setEnabled(true);
    57.     ui->HS2->setEnabled(true);
    58.     ui->HS3->setEnabled(true);
    59.     ui->tab2->setEnabled(true);
    60.     ui->PB2->setText("断开连接");
    61.     ui->LE1->setEnabled(false);
    62.     ui->LE2->setEnabled(false);
    63. }

    64. void MainWindow::Disconnect_to_Server_Succeed()
    65. {
    66.     ui->PB1->setEnabled(false);
    67.     ui->PB3->setEnabled(false);
    68.     ui->HS1->setEnabled(false);
    69.     ui->HS2->setEnabled(false);
    70.     ui->HS3->setEnabled(false);
    71.     ui->tab2->setEnabled(false);
    72.     ui->PB2->setText("连接服务器");
    73.     ui->LE1->setEnabled(true);
    74.     ui->LE2->setEnabled(true);
    75. }

    76. void MainWindow::on_PB1_clicked()
    77. {
    78.     ui->PB1->setText("关闭灯光");
    79.     qba_send_data[0]=0x01;
    80.     qba_send_data[1]=0x02;
    81.     socket->flush();
    82.     socket->write(qba_send_data.data());
    83.     connect(ui->PB1,SIGNAL(clicked()),this,SLOT(on_PB1_clicked_2()));
    84.     disconnect(ui->PB1,SIGNAL(clicked()),this,SLOT(on_PB1_clicked()));
    85. }

    86. void MainWindow::on_PB1_clicked_2()
    87. {
    88.     ui->PB1->setText("开启灯光");
    89.     qba_send_data[0]=0x01;
    90.     qba_send_data[1]=0x01;
    91.     socket->flush();
    92.     socket->write(qba_send_data.data());
    93.     connect(ui->PB1,SIGNAL(clicked()),this,SLOT(on_PB1_clicked()));
    94.     disconnect(ui->PB1,SIGNAL(clicked()),this,SLOT(on_PB1_clicked_2()));
    95. }

    96. void MainWindow::Read_from_Server_Succeed()
    97. {
    98.     qba_read=socket->readAll();
    99.     if(qba_read.data()[0]==0x01)
    100.     {
    101.         ui->PGB1->setValue(qba_read.data()[1]);
    102.         ui->PGB2->setValue(qba_read.data()[2]);
    103.         pres_int=qba_read.data()[3]<<8|qba_read.data()[4];
    104.         pres_flo=qba_read.data()[5];
    105.         qs_pres.sprintf("%d.%d",pres_int,pres_flo);
    106.         ui->L2->setText(qs_pres);
    107.         qs_time.sprintf("%02d:%02d:%02d",qba_read.data()[6],qba_read.data()[7],qba_read.data()[8]);
    108.         ui->LCDN1->display(qs_time);
    109.     }
    110.     if(qba_read.data()[0]==0x02)
    111.     {
    112.         mp3_count=qba_read.data()[1];
    113.         qDebug("mp3_count=%d",mp3_count);
    114.         qs_mp3.clear();
    115.         qs_mp3.prepend(qba_read);
    116.         qs_mp3=qs_mp3.mid(2);
    117.         qDebug()<<qs_mp3;

    118.         qsl_mp3=qs_mp3.split("|");
    119.         ui->LW1->clear();
    120.         ui->LW1->addItems(qsl_mp3);
    121.     }
    122. }

    123. void MainWindow::on_PB3_clicked()
    124. {
    125.     ui->PB3->setText("反转电机");
    126.     qba_send_data[0]=0x02;
    127.     qba_send_data[1]=0x01;
    128.     socket->flush();
    129.     socket->write(qba_send_data.data());
    130.     connect(ui->PB3,SIGNAL(clicked()),this,SLOT(on_PB3_clicked_2()));
    131.     disconnect(ui->PB3,SIGNAL(clicked()),this,SLOT(on_PB3_clicked()));

    132. }

    133. void MainWindow::on_PB3_clicked_2()
    134. {
    135.     ui->PB3->setText("关闭电机");
    136.     qba_send_data[0]=0x02;
    137.     qba_send_data[1]=0x02;
    138.     socket->flush();
    139.     socket->write(qba_send_data.data());
    140.     connect(ui->PB3,SIGNAL(clicked()),this,SLOT(on_PB3_clicked_3()));
    141.     disconnect(ui->PB3,SIGNAL(clicked()),this,SLOT(on_PB3_clicked_2()));
    142. }

    143. void MainWindow::on_PB3_clicked_3()
    144. {
    145.     ui->PB3->setText("开启电机");
    146.     qba_send_data[0]=0x02;
    147.     qba_send_data[1]=0x03;
    148.     socket->flush();
    149.     socket->write(qba_send_data.data());
    150.     connect(ui->PB3,SIGNAL(clicked()),this,SLOT(on_PB3_clicked()));
    151.     disconnect(ui->PB3,SIGNAL(clicked()),this,SLOT(on_PB3_clicked_3()));
    152. }


    153. void MainWindow::on_HS1_actionTriggered(int action)
    154. {
    155.     qba_send_data[0]=0x03;
    156.     qba_send_data[1]=ui->HS1->value();
    157.     qba_send_data[2]=ui->HS2->value();
    158.     qba_send_data[3]=ui->HS3->value();
    159.     socket->flush();
    160.     socket->write(qba_send_data.data());
    161. }

    162. void MainWindow::on_HS2_actionTriggered(int action)
    163. {
    164.     qba_send_data[0]=0x03;
    165.     qba_send_data[1]=ui->HS1->value();
    166.     qba_send_data[2]=ui->HS2->value();
    167.     qba_send_data[3]=ui->HS3->value();
    168.     socket->flush();
    169.     socket->write(qba_send_data.data());
    170. }

    171. void MainWindow::on_HS3_actionTriggered(int action)
    172. {
    173.     qba_send_data[0]=0x03;
    174.     qba_send_data[1]=ui->HS1->value();
    175.     qba_send_data[2]=ui->HS2->value();
    176.     qba_send_data[3]=ui->HS3->value();
    177.     socket->flush();
    178.     socket->write(qba_send_data.data());
    179. }

    180. void MainWindow::on_tabWidget_tabBarClicked(int index)
    181. //打开歌曲播放界面
    182. {
    183.     if(index==1)
    184.     {
    185.         qba_send_data[0]=0x04;
    186.         socket->flush();
    187.         socket->write(qba_send_data.data());
    188.     }

    189. }

    190. void MainWindow::on_PB4_clicked()
    191. //打开歌曲播放界面
    192. {
    193.     qba_send_data[0]=0x04;
    194.     socket->flush();
    195.     socket->write(qba_send_data.data());
    196. }

    197. void MainWindow::on_LW1_doubleClicked(const QModelIndex &index)
    198. {
    199.     tw1_index=ui->LW1->currentRow();
    200.     qba_send_data[0]=0x05;
    201.     qba_send_data[1]=tw1_index;
    202.     socket->flush();
    203.     socket->write(qba_send_data.data());
    204. }

    205. void MainWindow::on_PB5_clicked()
    206. {
    207.     tw1_index=ui->LW1->currentRow();
    208.     qba_send_data[0]=0x05;
    209.     qba_send_data[1]=tw1_index;
    210.     socket->flush();
    211.     socket->write(qba_send_data.data());
    212. }

    213. void MainWindow::on_PB6_clicked()
    214. {
    215.     qdt=QDateTime::currentDateTime();
    216.     qs_sys_time=qdt.time().toString();
    217.     qs_sys_date=qdt.date().toString();
    218.     qs_sys_time.insert(0,' ');
    219.     qba_send_data=qs_sys_time.toLatin1();
    220.     qba_send_data[0]=0x06;
    221.     socket->flush();
    222.     socket->write(qba_send_data.data());
    223. }

    224. void MainWindow::on_pushButton_clicked()
    225. {
    226.     qtimer->start(1000);
    227.     connect(qtimer,SIGNAL(timeout()),this,SLOT(Timer_Update()));
    228. }

    229. void MainWindow::Timer_Update()
    230. {
    231.     int val;
    232.     val=ui->HS4->value();
    233.     val++;
    234.     ui->HS4->setValue(val);
    235.     //ui->HS4->set
    236. }

    237. void MainWindow::on_PB7_clicked()
    238. {
    239.     qba_send_data[0]=0x07;
    240.     socket->flush();
    241.     socket->write(qba_send_data.data());
    242. }
    复制代码
    QT上位机代码(mainwindow.h):
    1. #ifndef MAINWINDOW_H
    2. #define MAINWINDOW_H

    3. #include <QMainWindow>
    4. #include <QSerialPort>
    5. #include <QSerialPortInfo>
    6. #include <QtCore>
    7. #include <QApplication>
    8. #include <QDebug>
    9. #include <QtSql/QSqlDatabase>
    10. #include <QSqlQuery>
    11. #include <QTcpSocket>
    12. #include <QTcpServer>
    13. #include <QTime>
    14. #include <QTimer>

    15. namespace Ui {
    16. class MainWindow;
    17. }

    18. class MainWindow : public QMainWindow
    19. {
    20.     Q_OBJECT
    21. public:
    22.     int count;
    23.     explicit MainWindow(QWidget *parent = 0);
    24.     void server_New_Connect();
    25.     void socket_Read_Data();
    26.     ~MainWindow();

    27. private slots:
    28.     void on_PB1_clicked();
    29.     void on_PB1_clicked_2();
    30.     void on_PB2_clicked();
    31.     void on_PB2_clicked_2();
    32.     void Connect_to_Server_Succeed();
    33.     void Disconnect_to_Server_Succeed();
    34.     void Read_from_Server_Succeed();
    35.     void on_tabWidget_tabBarClicked(int index);
    36.     void on_PB3_clicked();
    37.     void on_PB3_clicked_2();
    38.     void on_PB3_clicked_3();
    39.     void on_HS1_actionTriggered(int action);
    40.     void on_HS2_actionTriggered(int action);
    41.     void on_HS3_actionTriggered(int action);
    42.     void on_LW1_doubleClicked(const QModelIndex &index);
    43.     void on_PB4_clicked();
    44.     void on_PB5_clicked();
    45.     void on_PB6_clicked();
    46.     void on_pushButton_clicked();
    47.     void Timer_Update();

    48.     void on_PB7_clicked();

    49. private:
    50.     QTcpServer *server = new QTcpServer(this);
    51.     QTcpSocket *socket = new QTcpSocket(this);
    52.     QString qs_server_ip,buffer,qs_pres,qs_read,qs_mp3,qs_time,qs_sys_time,qs_sys_date;
    53.     QStringList qsl_mp3;
    54.     QByteArray qba_send_data,qba_read,qba_sys_time;
    55.     int port=0,pres_int=0,pres_flo=0,mp3_count=0,tw1_index;
    56.     QDateTime qdt=QDateTime::currentDateTime();
    57.     QTimer *qtimer=new QTimer(this);
    58.     Ui::MainWindow *ui;
    59. };

    60. #endif
    复制代码
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    关闭

    站长推荐上一条 /4 下一条

    手机版|爱板网

    GMT+8, 2018-10-21 08:15 , Processed in 0.330282 second(s), 13 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-5   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001056号

    Powered by Discuz!

    返回顶部