程序介绍
该程序是一个基于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的便捷调试,适合嵌入式开发中的快速验证场景。