欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2857|回復(fù): 1
收起左側(cè)

去年做的基于QT的溫濕度監(jiān)測系統(tǒng),這是在QT端運(yùn)行的完整代碼

[復(fù)制鏈接]
ID:718394 發(fā)表于 2020-3-29 21:19 | 顯示全部樓層 |閱讀模式
  1. #include "widget.h"
  2. #include "ui_widget.h"

  3. #include <QHostAddress>

  4. #define WNDTITLE "智能家居溫濕度監(jiān)測系統(tǒng)"

  5. Widget::Widget(QWidget *parent) :
  6.     QWidget(parent),
  7.     ui(new Ui::Widget)
  8. {
  9.     ui->setupUi(this);

  10.     //分配一個(gè)套接字對象
  11.     s = new QTcpSocket(this);

  12.     //關(guān)聯(lián)信號槽
  13.     connect(s, SIGNAL(connected()),
  14.             this, SLOT(slotConnected()));
  15.     connect(s, SIGNAL(disconnected()),
  16.             this, SLOT(slotDisconnected()));
  17.     connect(s, SIGNAL(error(QAbstractSocket::SocketError)),
  18.             this, SLOT(slotError()));
  19.     connect(s, SIGNAL(readyRead()),
  20.             this, SLOT(slotReadyRead()));

  21.     //設(shè)置窗口標(biāo)題
  22.     setWindowTitle(WNDTITLE);
  23. }

  24. Widget::~Widget()
  25. {
  26.     delete ui;
  27. }

  28. void Widget::slotConnected()
  29. {
  30.     //修改按鈕顯示的文本:設(shè)置按鈕標(biāo)題
  31.     ui->pushButton->setText("連接成功");

  32.     //修改窗口標(biāo)題
  33.     setWindowTitle(QString(WNDTITLE)+"-連接成功");

  34. }

  35. void Widget::slotDisconnected()
  36. {
  37.     //按鈕變亮:按鈕使能
  38.     ui->pushButton->setEnabled(true);

  39.     //修改按鈕顯示的文本:設(shè)置按鈕標(biāo)題
  40.     ui->pushButton->setText("連接");

  41.     //修改窗口標(biāo)題
  42.     setWindowTitle(QString(WNDTITLE)+"-"+s->errorString());
  43. }

  44. void Widget::slotError()
  45. {
  46.     //按鈕變亮:按鈕使能
  47.     ui->pushButton->setEnabled(true);
  48.     //修改按鈕顯示的文本:設(shè)置按鈕標(biāo)題
  49.     ui->pushButton->setText("連接");

  50.     //修改窗口標(biāo)題
  51.     setWindowTitle(QString(WNDTITLE)+"-"+s->errorString());
  52. }

  53. void Widget::slotReadyRead()
  54. {
  55.     //服務(wù)器每秒發(fā)4字節(jié)
  56.     //溫度值: 1字節(jié)(整數(shù)位).0字節(jié)(小數(shù)位)
  57.     //溫度值: 3字節(jié)(整數(shù)位).2字節(jié)(小數(shù)位)
  58.     if(s->bytesAvailable() >= 4){ //判斷套接字緩存是否大于等于4bytes
  59.         //定義4字節(jié)數(shù)組
  60.         char buffer[4];
  61.         //從套接字緩存讀出4字節(jié)
  62.         s->read(buffer, 4);

  63.         QString temp;
  64.         //格式化字符串:顯示溫度值
  65.         temp.sprintf("溫度值:%d.%d", buffer[1], buffer[0]);
  66.         ui->tempLB->setText(temp);

  67.         QString hum;
  68.         //格式化字符串:顯示濕度值
  69.         hum.sprintf("濕度值:%d.%d", buffer[3], buffer[2]);
  70.         ui->humLB->setText(hum);
  71.     }
  72. }

  73. void Widget::on_pushButton_clicked()
  74. {
  75.     //定義一個(gè)字符串對象
  76.     QString ip;
  77.     //把行編輯器上的文本保存到ip
  78.     ip = ui->lineEdit->text();
  79.     s->connectToHost(QHostAddress(ip), 59999);

  80.     //按鈕變灰:按鈕失效
  81.     ui->pushButton->setEnabled(false);
  82.     //修改按鈕顯示的文本:設(shè)置按鈕標(biāo)題
  83.     ui->pushButton->setText("連接中...");

  84.     //修改窗口標(biāo)題
  85.     setWindowTitle(QString(WNDTITLE)+"-連接中...");
  86. }

  87. 透傳服務(wù)器main函數(shù):
  88. #include <stdio.h>
  89. #include <string.h>
  90. #include <sys/socket.h>
  91. #include <netinet/in.h>
  92. #include <arpa/inet.h>
  93. #include <unistd.h>
  94. #include "serial.h"
  95. int init_server(ushort port, int num)
  96. {
  97.         int s = socket(AF_INET, SOCK_STREAM, 0);
  98.         if(0 > s){
  99.                 perror("socket");
  100.                 return -1;
  101.         }
  102.         struct sockaddr_in addr = {
  103.                 .sin_family        = AF_INET,
  104.                 .sin_port        = htons(port),
  105.                 .sin_addr        = {
  106.                         .s_addr = INADDR_ANY,
  107.                 },
  108.         };
  109.         socklen_t len = 16;

  110.         if(0 > bind(s, (struct sockaddr *)&addr, len)){
  111.                 perror("bind");
  112.                 goto ERR_STEP;
  113.         }
  114.         if(0 > listen(s, num)){
  115.                 perror("listen");
  116.                 goto ERR_STEP;
  117.         }
  118.         return s;
  119. ERR_STEP:
  120.         close(s);
  121.         return -1;
  122. }
  123. int main()
  124. {
  125.         int fd = init_serial("/dev/ttyUSB0", B115200, 'n', 8, 1);
  126.         if(0 > fd){
  127.                 return -1;
  128.         }
  129.         printf("init M0 device done.\n");

  130.         int s = init_server(59999, 10);
  131.         if(0 > s){
  132.                 return -1;
  133.         }
  134.         printf("Wait for a client ...\n");

  135.         int rws = accept(s, NULL, NULL);
  136.         if(0 > rws){
  137.                 perror("accept");
  138.                 return -1;
  139.         while(1){
  140.                 char buf[36];       
  141.                 int len = 36;
  142.                 char *p = buf;
  143.                 while(len){
  144.                         int size = recv_serial(fd, p, len, 300000);
  145.                         if(0 > size){
  146.                                 return -1;
  147.                         }
  148.                         len -= size;
  149.                         p += size;
  150.                 }
  151.                 printf("temp: %d.%d\n", buf[5], buf[4]);
  152.                 printf(" hum: %d.%d\n", buf[7], buf[6]);
  153.                 if(4 != write(rws, buf+4, 4)){
  154.                         printf("snd temp & hum fail.\n");
  155.                         return -1;
  156.                 }
  157.         }
  158.         return 0;
  159. }

復(fù)制代碼


回復(fù)

使用道具 舉報(bào)

ID:664036 發(fā)表于 2020-5-30 21:02 | 顯示全部樓層
請問可以發(fā)一下完整壓縮包嗎?
回復(fù)

使用道具 舉報(bào)

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表