?
程序介紹
該程序是一個基于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的便捷調試,適合嵌入式開發中的快速驗證場景。
?
?