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);
};
#endif
.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->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;
}
void Widget::WriteQByteArray(QByteArray dataDriver){
serialport->write(dataDriver);
}
效果
