Qt多线程串口通信

目标:实现Qt程序在与esp8266进行收发数据的同时通过另一个线程与开发板进行串口通信。

主线程:发送AT指令连接服务器,将子线程发来的温湿度数据通过串口发送给ESP8266模块。接收来自服务器发来的指令,处理后又发给子线程。(这里要先把esp8266设置成AP模式)

子线程:接收开发板的温度数据并发给主线程;接收主线程传来的命令并通过串口发送给开发板。

实现子线程:

定义一个串口对象,然后用moveToThread()将该对象放在子线程。

my_thread = new QThread();

    port = new QSerialPort();
    init_port();
    this->moveToThread(my_thread);
    port->moveToThread(my_thread);
    my_thread->start();  

串口配置 :

定义串口对象,配置波特率、数据位、停止位、奇偶校验等。

 port->setPortName("COM6");                          //串口名 
    port->setBaudRate(115200);                           //波特率
    port->setDataBits(QSerialPort::Data8);             //数据位
    port->setStopBits(QSerialPort::OneStop);           //停止位
    port->setParity(QSerialPort::NoParity);            //奇偶校验
    port->setFlowControl(QSerialPort::NoFlowControl);  //流控制

主次线程数据传递: 

通过信号和槽实现。

connect(local_serial, &SerialPort ::receive_data, this, &MainWindow::on_receive, Qt::QueuedConnection);

带参信号函数

signals:
  //发送数据到主线程
  void receive_data(QByteArray tmp);

接收槽函数

void MainWindow::on_receive(QByteArray tmpdata)
{
     QString a=tmpdata.data();
     ui->textEdit_recv->append("温度:"+a[0]+a[1]+"\r\n"+"湿度:"+a[2]+a[3]);
     qDebug()<<"data_to_wifi:"<<tmpdata;
     serial->write(tmpdata);
     serial->waitForBytesWritten(500);
}

 旋转小风扇:

通过定时器控制

void MainWindow::paintEvent(QPaintEvent *e)
{
    QPainter painter(this);
    painter.setRenderHint(QPainter::SmoothPixmapTransform);
    QImage image(":/a/image/shanye.PNG");
     painter.translate(475, 224);
           painter.rotate(m_nAngle);
         painter.translate(-475, -224); //将原点复位
        painter.drawImage(390,140,image);

}
void MainWindow::onTimeout()
{
    if(m_nAngle == 360)
    {
        m_nAngle = 0;
    }
    m_nAngle += 90;
    update();
}

void MainWindow::startCircle()
{
    m_pCircleTimer->start();
}
void MainWindow::stopCircle()
{
    m_pCircleTimer->stop();
}

 

  • 0
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值