软件功能
能够对串口传来的信息进行判断,对于不同的信息,发送与之所对应的http请求到服务器,由服务器来进行之后的响应。
软件要求
1.能实现简单的串口信息检测
2.能通过http请求与服务器建立连接
3.有一个直观的界面
软件工作环境
基于树莓派3B+的Raspbian OS
QT5
代码
broadcast.pro
因为程序需要使用串口与网络通信,所以需要加上
QT += serialport
QT += network
以下是完整代码
#-------------------------------------------------
#
# Project created by QtCreator 2019-07-23T09:59:43
#
#-------------------------------------------------
QT += core gui
QT += serialport
QT += network
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
TARGET = broadcast
TEMPLATE = app
# The following define makes your compiler emit warnings if you use
# any feature of Qt which has been marked as deprecated (the exact warnings
# depend on your compiler). Please consult the documentation of the
# deprecated API in order to know how to port your code away from it.
DEFINES += QT_DEPRECATED_WARNINGS
DEFINES += UNICODE
# You can also make your code fail to compile if you use deprecated APIs.
# In order to do so, uncomment the following line.
# You can also select to disable deprecated APIs only up to a certain version of Qt.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0
SOURCES += \
main.cpp \
broadcast.cpp
HEADERS += \
broadcast.h
FORMS += \
broadcast.ui
broadcast.h
串口部分
需要引用的头文件为
#include <QSerialPort>
#include <QSerialPortInfo>
在private中,需要定义串口的指针usb_1、usb_2、usb_3、usb_4(考虑到树莓派有4个USB口,故定义4个指针),实现对4个串口的定义与控制。
同时需要定义4个串口读取的函数:
此处之所以将串口读取另定义函数,是因为一方面是方便后续的集中对比,一方面是方便后续如果需要对串口传来的信息进一步处理的话预留好函数
QSerialPort *usb_1;
QSerialPort *usb_2;
QSerialPort *usb_3;
QSerialPort *usb_4;
void readMyCom_1();
QByteArray temp_1;
void readMyCom_2();
QByteArray temp_2;
void readMyCom_3();
QByteArray temp_3;
void readMyCom_4();
QByteArray temp_4;
temp_1等是为了方便之后对串口传来的信息进行同意判断而定义的全局变量。
完整代码如下:
#ifndef BROADCAST_H
#define BROADCAST_H
#include <QMainWindow>
#include <QSerialPort>
#include <QSerialPortInfo>
#include <QNetworkRequest>
#include <QNetworkAccessManager>
#include <QNetworkReply>
#include <QSettings>
namespace Ui {
class broadcast;
}
class broadcast : public QMainWindow
{
Q_OBJECT
public:
explicit broadcast(QWidget *parent = 0);
~broadcast();
private:
Ui::broadcast *ui;
QSerialPort *usb_1;
QSerialPort *usb_2;
QSerialPort *usb_3;
QSerialPort *usb_4;
void readMyCom_1();
QByteArray temp_1;
void readMyCom_2();
QByteArray temp_2;
void readMyCom_3();
QByteArray temp_3;
void readMyCom_4();
QByteArray temp_4;
void judge();
QNetworkRequest request;
QNetworkAccessManager* naManager;
QSettings *config;
QString ip;
QString port;
QString project;
QString id1;
QString id2;
private slots:
void server_change_clicked();
void server_test_clicked();
void http_finished(QNetworkReply*);
};
#endif // BROADCAST_H
main.cpp
自动生成,无需修改
#include "broadcast.h"
#include <QApplication>
int main(int argc, char *argv[