QT5 实现UDP和串口通信

QT5实现UDP和串口通信

前言

硬件平台:X86工控机、温湿度模块;

使用QT5编程实现X86工控机(客户端)与网络调试助手UDP通信,同时X86工控机与温湿度模块实现串口通信。通过网络调试助手下发指令,获取温湿度数据。

废话少说,直接上代码

.pro文件

.pro文件中添加一下2行代码:
QT += network              
QT       += core gui serialport

.h文件

#ifndef WIDGET_H
#define WIDGET_H

#include <QObject>
#include <QUdpSocket>

#include <QWidget>

#include <QtSerialPort/QSerialPort>
#include <QtSerialPort/QSerialPortInfo>
#include<QDebug>


QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE

class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = nullptr);
    ~Widget();

public slots:
    void receive();

private:
    Ui::Widget *ui;
    QUdpSocket *uSocket;
     QSerialPort *serialport;//硬件驱采串口对象
     QByteArray Read();//读取串口
     void WriteQByteArray(QByteArray bytes);//写入串口数据(QByteArray类型)
};
#endif // WIDGET_H

.cpp文件

#include "widget.h"
#include "ui_widget.h"
#include <QByteArray>
#include <iostream>

const quint16 PORT = 7777;    

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    uSocket = new QUdpSocket;

    QByteArray datagram = "hello world!";

    uSocket->bind(QHostAddress("192.168.3.234"),PORT);

    QHostAddress serverAddress = QHostAddress("192.168.3.104");

    uSocket->writeDatagram(datagram.data(), datagram.size(),serverAddress, PORT);
    connect(uSocket,SIGNAL(readyRead()),this,SLOT(receive()));

    //串口设置
    serialport = new QSerialPort(this);
    serialport->setPortName("ttyUSB0");
    if(serialport->open(QIODevice::ReadWrite))
    {
        //设置波特率
       serialport->setBaudRate(9600);
        //serialport->setBaudRate(57600);
        //设置数据位
        serialport->setDataBits(QSerialPort::Data8);
        //设置校验位
        serialport->setParity(QSerialPort::NoParity);
        //设置流控制
        serialport->setFlowControl(QSerialPort::NoFlowControl);
        //设置停止位
        serialport->setStopBits(QSerialPort::OneStop);
      }
    ui->setupUi(this);
}

Widget::~Widget()
{
    delete ui;
}

void Widget::receive()
{
    QByteArray ba;
    QHostAddress serverAddress = QHostAddress("192.168.3.104");
    while(uSocket->hasPendingDatagrams())
    {
        ba.resize(uSocket->pendingDatagramSize());
        uSocket->readDatagram(ba.data(), ba.size());
        serialport->write(ba);
         qDebug()<<u8"serialport"<<ba;//

         QByteArray readComData = serialport->readAll();
         uSocket->writeDatagram(readComData.data(),readComData.size(),serverAddress, PORT);

    }
}

//读取串口
QByteArray Widget::Read(){
   QByteArray readComData = serialport->readAll();
   return readComData;
}

//写入串口数据(QByteArray类型)
void Widget::WriteQByteArray(QByteArray dataDriver){

    serialport->write(dataDriver);
}

效果

在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值