コンピューターに接続された STM32+ESP8266 Qt ネットワーク ホスト コンピューター - QT 記事

この記事では、手書きのネットワーク デバッガーを簡単に紹介し、ESP8266 モジュールを接続します。

Previous :   STM32+ESP8266をコンピュータQtネットワークホストコンピュータに接続 - 準備作業

目次

1. Qt コードと実装プロセスの一部

2. 実装プロセス - ESP8266 を使用してホストに接続する


1. Qt コードと実装プロセスの一部

最終的な効果

        ホストコンピュータは、ホストとサーバーの 2 つのモードを組み合わせ、切断時にモードを切り替えることができます。サーバーとして使用する場合、ローカル コンピューターのIP はホスト コンピューターのIPであり、ipconfigを使用してIPアドレスを表示できます。最後に、接続状態のリアリティが追加されます. 次のベクトル図はすべてアリからのものです. ソースコードを送信するには、以下にコメントしてください - >自分で電子メールを送信するか、Git をダウンロードします ->  https://gitee.com/guo-lingran/tcp_-server-and-client https://gitee.com/guo-lingran/tcp_-server -および- クライアントBaidu ネットワーク ディスク ダウンロード: https://pan.baidu.com/s/1sSVkUJrMqN9fP4x1uSrDtA 抽出コード: qt92

コード部分

   QT での TCP ベースの通信には、次の 2 つのクラスが使用されます。

  • QTcpServer:   クライアント接続を監視し、クライアントと接続するために使用されるサーバー クラス
  • QTcpSocket:  クライアントとサーバーの両方を使用する必要があります

コンストラクタ

        コンストラクターに接続操作を追加します. 新しい接続がある場合、tcpServer はnewConnectionのシグナルを受け取り、スロット関数 ( newConnection_Slot() ) を実行します。以下は、インターフェースの初期化です。

Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);
    tcpServer = new QTcpServer(this);
    tcpSocket = new QTcpSocket(this);
    
    //默认使用主机模式,等待新的连接
    connect(tcpServer,SIGNAL(newConnection()),this,SLOT(newConnection_Slot()));

    setFixedSize(480,420);
    //默认端口号 8080
    ui->portEdit->setText("8080");
    ui->ipED->setText("192.168.3.13");
    setWindowTitle("--局域网络调试器-- 测试版  V4.0 22-0905     制作:拾贰");
}

newConnection_Slot スロット関数

        新しい接続を取得したら、  nextPendingConnection を呼び出して待機中の接続を受信し、インターフェイスのステータス アイコンを「オンライン」に変更します。tcpServer がreadyReadシグナルを送信する、データが受信され、受信スロット関数 ( readyRead_Slot() ) によって処理されます。

        ここにもう一度接続を書きます. 接続が切断された場合、tcpServer は切断シグナルを送信し、切断のためのスロット関数も同様に処理されます。

void Widget::newConnection_Slot(){

    tcpSocket=tcpServer->nextPendingConnection();//得到通信的套接字对象
    connect(tcpSocket,SIGNAL(readyRead()),this,SLOT(readyRead_Slot()));
    connect(tcpSocket,SIGNAL(disconnected()),this,SLOT(disconnected_Slot()));
    //建立连接后,修改界面的状态的信息——在线的图标
    ui->label_3->setStyleSheet("border-image: url(:/new/prefix1/connect.png)");
}

readyRead_Slot スロット関数

        ここで文字化けを防ぐため、受信データをすべて読み込み、受信データを変換します。tcpSocket->readAll()はクライアントから送信されたデータで、最終的に受け入れボックスに表示されます。

void Widget::readyRead_Slot(){
    QByteArray receiveDate;
    QTextCodec *tc = QTextCodec::codecForName("GBK");  

    while(!tcpSocket->atEnd()){
        receiveDate = tcpSocket->readAll();
    }
    if (!receiveDate.isEmpty())
    {
        QString strBuf=tc->toUnicode(receiveDate);         
         ui->RecvEdit->appendPlainText(strBuf);
    }
    receiveDate.clear();
}

disconnected_Slot スロット関数

        接続が切断された後、tcpSocket は閉じられ、変更されたインターフェースのステータス アイコンは同様に「オフライン」になります。

//服务器或客户机连接状态
void Widget::disconnected_Slot(){
    tcpSocket->close();
    ui->label_3->setStyleSheet("border-image: url(:/new/prefix1/discon.png)");
}

ネットワーク監視

        コントロールでポートを取得し、リッスン インターフェイスを呼び出します。最初のパラメーターQHostAddress::Any : サーバーはすべてのネットワーク インターフェイスをリッスンします。2 番目のパラメーター: ポート番号。現在の状態がクライアントの場合、connectToHost はターゲット ホストに接続を作成し、接続がある場合はconnect_Slot()スロット関数を実行します。残りはインターフェースを最適化するための操作です。

//打开网络/关闭网络
void Widget::on_openBt_clicked()
{
    flag_Sw=!flag_Sw;
    if(flag_Sw){
        //选择主机
        if(MS) {       
            tcpServer->listen(QHostAddress::Any,ui->portEdit->text().toUInt());
        }
        else//客户机 {
            tcpSocket->connectToHost(ui->ipED->text(),ui->portEdit->text().toUInt());
            connect(tcpSocket,SIGNAL(connected()),this,SLOT(connected_Slot()));
        }
        ui->openBt->setStyleSheet("border-image: url(:/new/prefix1/open.png)");
        ui->wifi->setStyleSheet("border-image: url(:/new/prefix1/wifi_on.png)");
    }
    else{
        tcpServer->close();
        tcpSocket->close();
        ui->openBt->setStyleSheet("border-image: url(:/new/prefix1/close.png)");
        ui->wifi->setStyleSheet("border-image: url(:/new/prefix1/wifi_off.png)");
    }
}

connect_Slot スロット関数

//客户机连接
void Widget::connected_Slot(){
    connect(tcpSocket,SIGNAL(readyRead()),this,SLOT(readyRead_Slot()));
    ui->label_3->setStyleSheet("border-image: url(:/new/prefix1/connect.png)");
    connect(tcpSocket,SIGNAL(disconnected()),this,SLOT(disconnected_Slot()));
}

ホスト\クライアント切り替え機能

//主副机切换
void Widget::on_ms_clicked()
{
 if(!flag_Sw){
    tcpServer->close();
    tcpSocket->close();
    if(MS){
        MS=false;
        ui->label->setText("客户机模式");
        ui->ms->setStyleSheet("border-image: url(:/new/prefix1/client.png);");
    }
    else {
        MS=true;
        ui->label->setText("主机模式");
        ui->ms->setStyleSheet("border-image: url(:/new/prefix1/server.png);");
    }
 }
 else
    QMessageBox::critical(this,"提示","请先关闭网络,再切换模式类型");
}

データを送る

tcpSocketインターフェースのwrite関数       を介してデータを送信する

void Widget::on_sendBt_clicked()
{
    QString SendCon =  ui->sendEdit->text().toLocal8Bit().data();
    if(flag_Sw){
        if(SendCon!=""){
            //封装编码
            QByteArray receiveDate;
            QTextCodec *tc = QTextCodec::codecForName("GBK");  
            //对发送框编码
            receiveDate =  ui->sendEdit->text().toLocal8Bit().data();
            QString strBuf=tc->toUnicode(receiveDate);
            //整合符号 ->
            QString  str="->";
            QString str2 =str.append(strBuf);
             //向输出框打印发送的数据
            ui->RecvEdit->appendPlainText(str2);
            tcpSocket->write(ui->sendEdit->text().toLocal8Bit().data());
        }
        else
         QMessageBox::critical(this,"警告","不能发送空白信息");
   }
    else
         QMessageBox::critical(this,"提示","发送失败,网络尚未连接");
}

他のスロット機能は順次紹介しません...

2. 実装プロセス - ESP8266 を使用してホスト コンピューターに接続します。

道具:           

        CH340 シリアルポートデバッガ

        ネットワークデバッガ

        ESP8266 (ここでは punctual atom の ESP-12F を使用します。効果は同じです)

目標:

        ATコマンドを使用してESP8266をホストコンピューターに接続し、ホストコンピューターが使いやすいかどうかをテストして、将来STM32との通信を容易にします

次に、ネットワーク デバッガーに段階的に接続します。

       ここでは、上位のコンピューターをサーバーとして使用し、IP アドレスは 192.168.3.13、クライアント コンピューターとして 8266 を使用して、コンピューターのホットスポットに接続し、サーバーにアクセスします。

  1.  AT をテストして OK を返し、モジュールに問題がないことを確認します。
  2. コンピューターのホットスポットをオンにする

     3. AT+CWJAP="Lng","12345678"                          で現在のホットスポットに接続

    4. AT+CIPSTART="TCP","192.168.3.13",8080      でサーバーとの TCP 接続を確立します

    5. AT+CIPMODE=1                                                伝送モードは透過伝送

    6. AT+CIPSNED は                                                     透過伝送モードを有効にし、データをサーバーに送信します

     

この時点で、8266 はネットワーク アシスタントに接続されており、ここに任意の文字を入力できます。テスト結果は次のとおりです。

  

この時点で、ESP8266 モジュールはホスト コンピュータと正常に通信しており、次は STM32 を搭載する予定ですので、ご期待ください...

【オープンソース、応用】QT-TCPネットワークホストコンピュータの設計https://blog.csdn.net/qq_53734051/article/details/127034796?spm=1001.2014.3001.5501

おすすめ

転載: blog.csdn.net/qq_53734051/article/details/126706759