程序介绍
该程序是一个基于Qt的串口通信工具,专用于ESP8266 WiFi模块的AT指令配置与调试。主要功能包括:
1. 核心功能
-
串口通信:支持串口开关、参数配置(波特率、数据位、停止位、校验位)及数据收发。
-
AT指令操作:通过GUI按钮发送预设AT指令,控制WiFi模块(如模块测试、重启、连接路由器、设置TCP服务器等)。
-
数据透传:支持进入/退出透传模式,实现与服务器的直接数据交互。
-
配置持久化:通过注册表保存界面配置(如串口参数、WiFi名称、密码、服务器IP等),重启后自动加载。
-
自定义交互:通过点击标签(
TMyLabel
)快速发送关联的AT指令。
2. 程序结构
文件组成
-
main.cpp
:程序入口,初始化主窗口。 -
mainwindow.h/cpp
:主窗口逻辑,实现串口操作、AT指令发送、数据接收、配置保存等功能。 -
mainwindow.ui
:Qt Designer生成的界面布局文件,定义控件及布局。 -
tmylabel.h/cpp
:自定义标签控件,支持点击事件触发信号。 -
samp17_1.pro
:Qt项目配置,包含依赖模块(如serialport
)及资源文件。
界面模块
-
串口配置区:选择串口号、波特率、数据位等参数,支持打开/关闭串口。
-
AT指令操作区:
-
基本操作:模块测试、重启、恢复出厂设置。
-
WiFi参数配置:设置UART参数、连接路由器、查询状态。
-
TCP服务器设置:配置IP和端口,支持自动连接。
-
透传模式:进入/退出透传,实现数据直传。
-
-
数据记录区:显示串口收发数据,支持清空操作。
-
快捷指令区:通过
TMyLabel
标签快速发送预设AT指令。
3. 关键功能实现代码
(1) 串口开关与配置
-
打开串口(
on_actCom_Open_triggered
):void MainWindow::on_actCom_Open_triggered() {if (comport.isOpen()) {QMessageBox::critical(this, "警告", "串口已打开:" + comport.portName());return;}// 配置串口参数(波特率、数据位等)comport.setPort(seriallist.at(ui->comboCom_Port->currentIndex()));comport.setBaudRate(ui->comboWiFi_UartBuad->currentText().toInt());// ...其他参数设置if (comport.open(QIODevice::ReadWrite)) {// 启用相关控件ui->toolBox->setEnabled(true);ui->actCom_Open->setEnabled(false);} }
(2) AT指令发送
-
通用发送函数(
uartsend
):void MainWindow::uartsend(QString cmd) {ui->textCOM->appendPlainText(cmd); // 显示发送内容comport.write(cmd.toLocal8Bit()); // 写入串口 }
-
示例:设置路由器(
on_btnWF_SetAP_clicked
):void MainWindow::on_btnWF_SetAP_clicked() {QString wifiname = ui->editAP_Name->text();QString wifipass = ui->editAP_PWD->text();uartsend("AT+CWJAP=\"" + wifiname + "\",\"" + wifipass + "\"\r\n"); }
(3) 数据接收与显示
-
接收槽函数(
do_readyRead
):void MainWindow::do_readyRead() {QByteArray data = comport.readAll();ui->textCOM->appendPlainText(QString::fromLocal8Bit(data)); // 显示接收内容 }
(4) 配置持久化
-
保存配置(
closeEvent
):void MainWindow::closeEvent(QCloseEvent *event) {QSettings setting;setting.setValue("AP_Name", ui->editAP_Name->text());setting.setValue("AP_PWD", ui->editAP_PWD->text());// ...保存其他参数event->accept(); }
-
加载配置(构造函数):
MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) {// ...初始化代码QSettings setting;ui->editAP_Name->setText(setting.value("AP_Name").toString());// ...加载其他参数 }
(5) 自定义标签点击事件
-
TMyLabel
实现:void TMyLabel::mousePressEvent(QMouseEvent *event) {if (event->button() == Qt::LeftButton) {emit clicked(); // 触发点击信号}event->accept(); }
-
关联信号与槽(MainWindow构造函数):
QList<TMyLabel*> lab = ui->frame_CmdA->findChildren<TMyLabel*>(); for (const auto &item : lab) {connect(item, &TMyLabel::clicked, this, &MainWindow::do_clicked); }
4. 改进建议
-
错误处理:增加串口打开失败、指令响应超时的提示。
-
实时反馈:显示串口状态(如连接状态、数据收发速率)。
-
代码优化:提取重复的配置保存/加载逻辑为独立函数。
-
国际化:支持多语言切换。
该程序通过模块化设计实现了ESP8266的便捷调试,适合嵌入式开发中的快速验证场景。