STM32+ESP8266连接电脑Qt网络上位机——QT篇

这篇具有很好参考价值的文章主要介绍了STM32+ESP8266连接电脑Qt网络上位机——QT篇。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

本文简单介绍下手写网络调试器并连接ESP8266模块

上篇  STM32+ESP8266连接电脑Qt网络上位机——准备工作

目录

一、部分Qt代码及实现过程

二、实现过程——使用ESP8266连接上位


一、部分Qt代码及实现过程

最终效果

        本上位机结合了主机和服务器两种模式,在断开连接的时候可以切换模式。当作为服务器时,本机电脑的ip为该上位机的ip,可以使用ipconfig查看ip地址。最后新增了连接状态现实,以下矢量图均来自阿里。下方评论发源码->邮箱或 自行下载 Git -> https://gitee.com/guo-lingran/tcp_-server-and-clienthttps://gitee.com/guo-lingran/tcp_-server-and-client百度网盘下载https://pan.baidu.com/s/1sSVkUJrMqN9fP4x1uSrDtA  提取码:qt92

qt网络通信pc连接,STM32,stm32,arm,嵌入式硬件,qt

代码部分

   在QT中基于TCP的通信会使用到两个类:

  • QTcpServer:   服务器类,用于监听客户端连接以及与客户端连接
  • QTcpSocket:  客户端、服务端都需要用到

构造函数

        在构造函数里添加connect操作,当有新的连接时,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())去处理。

        这里再写一个connect,若断开连接,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)");
}

网络监听

        获取控件里的端口,调用listen接口,第一个参数,QHostAddress::Any:服务器将侦听所有网络接口,第二个参数:端口号。若当前状态为客户机,将connectToHost目标主机,创建一个connect,若有连接,执行connnect_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)");
    }
}

connnect_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,"提示","发送失败,网络尚未连接");
}

其他槽函数不再一一介绍...

二、实现过程——使用ESP8266连接上位机

工具:           

        CH340串口调试器

        网络调试器

        ESP8266(这里我将使用正点原子的ESP-12F,效果都一样)

实现目标:

        用AT指令使ESP8266连接刚才的上位机,测试上位机是否好用,方便以后和STM32通信

接下来将一步一步接入网络调试器

       这里上位机作为服务器,ip地址为192.168.3.13,8266作为客户机连接到电脑的热点,接入服务器qt网络通信pc连接,STM32,stm32,arm,嵌入式硬件,qt

  1.  测试AT,返回OK,保证模块没有问题
  2. 打开电脑热点

qt网络通信pc连接,STM32,stm32,arm,嵌入式硬件,qt

     3.  AT+CWJAP="Lng","12345678"                          连接当前的热点

    4.  AT+CIPSTART="TCP","192.168.3.13",8080      与服务器建立TCP连接

    5.  AT+CIPMODE=1                                                传输模式为透传

    6.  AT+CIPSNED                                                     开启透传模式,向服务器发送数据

    qt网络通信pc连接,STM32,stm32,arm,嵌入式硬件,qt 

到此处8266已经连接上了网络助手,这里随便输入字符,测试结果如下:

 qt网络通信pc连接,STM32,stm32,arm,嵌入式硬件,qt 

到这里呢ESP8266模块已经和此上位机正常通信了,接下来将会搭载STM32,敬请期待...

【开源、应用】QT—TCP网络上位机的设计https://blog.csdn.net/qq_53734051/article/details/127034796?spm=1001.2014.3001.5501文章来源地址https://www.toymoban.com/news/detail-790278.html

到了这里,关于STM32+ESP8266连接电脑Qt网络上位机——QT篇的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • QT+ESP32-CAM上位机获取视频流(附源码)

    第二章 qt获取esp32-cam视频流 本文是基于esp32-cam 官方示例扩展的QT上位机程序 可以获取视频流来做一些图像处理 帧率和直接用网页打开的帧率差不多(25FPS) 由于也是刚玩ESP32-cam 在网上想找个QT上位机的程序来做一些测试 但是找到的一些例程获取的帧率比较低所以开发了一个测

    2024年02月03日
    浏览(45)
  • 【Qt上位机与STM32进行串口通信】-2-Qt串口开发

    系列文章目标:Qt上位机与STM32进行串口通信,控制多个LED的状态。 本篇文章的主要目标: 1、设计两个界面,串口连接界面、控制界面。 2、只有在串口连接成功才能打开控制界面。 3、打开控制界面时,串口保持连接。 4、自定义控件,提升开发效率。 以下是我入门Qt的视频

    2024年02月06日
    浏览(50)
  • STM32+esp8266,让你的STM32开发板连接网络-----esp8266

    分享一下,STM32开发板连接网络的第一种方法:连接esp8266。 esp8266与STM32利用串口通信连接,esp8266连接网络,把收到的数据通过串口的方式传输给STM32,之后STM32接收到消息做出对应的反应。 使用到的开发板如图:esp-12和正点原子stm32f103zet6. 首先,我们先掌握一下什么事串口通

    2024年02月02日
    浏览(46)
  • STM32利用USB的HID与QT上位机通信

      之前使用kingst的逻辑分析仪,打开上位机软件,插上带usb的硬件就可以通信,也不需要打开串口什么的,感觉很方便,于是借用一个周末研究下这个技术。本文主要是用于记录自己学习的过程,顺便分享下学习感悟。 首先初略说下大体是怎么回事,就是单片机使用hid功能需

    2024年02月07日
    浏览(45)
  • QT上位机控制stm32,并利用PID控制编码电机旋转

    QT上位机控制stm32,并利用PID控制编码电机旋转             由于最近在学习电机控制算法之类的东西,看到论文大多使用PID、或以PID衍生的ADRC作为电机的主流控制,于是自己也写了一个stm32控制L298N以驱动直流电机的程序,并用QT做了一个上位机实现了用软件改变PID的参数

    2023年04月09日
    浏览(45)
  • 基于STM32+ESP8266+FreeRTOS+安卓App上位机+MQTT连接OneNET的智能家居项目(软件开源篇附百度网盘链接)

      本篇文章主要是分享智能家居项目中的下位机STM32+FreeRTOS的代码部分。以下是项目最终的效果 stm32 esp8266 语音控制智能家居_哔哩哔哩_bilibili   另外附上main函数中的部分代码,完整代码会在文章末尾放上百度网盘链接,可以自行下载。 链接:https://pan.baidu.com/s/1IS-OMLy2_pyWyM

    2024年02月08日
    浏览(46)
  • STM32+ov7725+ESP8266实现无线图传-完成上位机图像显示

    stm32f407探索者开发板和STM32F103ZET6战舰开发板。接正点原子ov5640、OV7725、OV2640摄像头,通过esp8266Wi-Fi模块(透传模式)将摄像头采集到的rgb565格式图片通过tcp/ip协议上传到上位机显示。 【1】使用QT开发上位机,建立TCP服务器,接收ESP8266发送过来的图像数据显示。 【2】编写S

    2024年02月08日
    浏览(89)
  • 【QT 自研上位机 与 STM32F4xx下位机联调>>>can通信测试-基础样例-联合文章】

    之前做个qt的上位机软件,现在有了qt下位机软件,是使用STM32,有了这两项,相当我们凑够了步数,可做做一期联合文章,完全可以联合调试,并且在写can的下位机是,当时就有了这个联合文章想法。 实验环境还是挺重要的,因为有时候,在你电脑上能运行的东西,在别人的

    2024年02月05日
    浏览(48)
  • STM32-连接wifi模块(esp8266)

    目录 1. ESP8266模块介绍 1.1. 系统结构图 1.2. 功能介绍  1.3. AT指令说明  2. STM32连接ESP8266 3. ESP8266示例 3.1. ESP8266透传模式  3.2. ESP8266上传数据例程 乐鑫智能互联平台——ESP8266 拥有高性能无线 SOC,是一个完整且自成体系的 WiFi 网络解决方案,能够独立运行,也可以作为 slave 搭

    2024年01月16日
    浏览(67)
  • STM32+ESP8266水墨屏天气时钟:ESP8266连接心知天气获取数据

    利用STM32F103C8T6和ESP8266模块进行通信,获取心知天气的数据。 硬件设计为串口1(PA9和PA10)连接ESP8266. 串口2打印 ESP8266模块可以通过AT指令控制搭配使用源代码API函数开发,总体开发速度快,难度较低。 说明:下面仅列举一些最常用的AT指令及用法,指令的详细参数及使用说明请

    2024年04月12日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包