STM32连接WIFI-ESP8266实战—AP模式运用

文章目录

  • 前言
  • 一、工作模式
  • 二、应用领域
  • 三、ESP8266 使用 AP 模式使用
  • 1.查看 ESP8266 当前模式,并将 ESP8266 配置成 AP 模式
  • 2.查看当前 AP 的参数
  • 3.连接 AP
  • 4.建立 TCP 多连接测试,并且收发数据
  • 四、核心源码
  • 1、STM32下位机
  • 2、Qt上位机
  • 总结

  • 前言

    学习物联网这一块大家首先想到的是ESP8266,这个模块可以连网就是连接你家中的路由器,也可以作为一个热点来让你的手机连接它,是不是很奇妙。虽然这个东西程序和相关的产品已经很成熟,但是还是有一些入门的小伙伴不知道咋学。如何用一个ESP8266加上STM32单片机做一个小产品呢?这个学习的路线是怎样的呢还有如何入门呢?


    一、工作模式

    ESP8266是一款超低功耗的UART-WiFi 透传模块,ESP8266有三种工作模式,分别为:AP,STA,AP混合STA。

  • STA 模式:ESP8266模块通过路由器连接互联网,手机或电脑通过互联网实现对设备的远程控制。

  • AP 模式:ESP8266模块作为热点,实现手机或电脑直接与模块通信,实现局域网无线控制。

  • STA+AP 模式:两种模式的共存模式,即可以通过互联网控制可实现无缝切换,方便操作。

  • 二、应用领域

    1. 串口CH340 转Wi-Fi
    2. 工业透传DTU
    3. Wi-Fi 远程监控/控制
    4. 玩具领域
    5. 色LED 控制
    6. 消防、安防智能一体化管理
    7. 智能卡终端,无线POS 机,Wi-Fi 摄像头,手持设备等

    三、ESP8266 使用 AP 模式使用

    1.查看 ESP8266 当前模式,并将 ESP8266 配置成 AP 模式

    配置AP模式

    代码如下:

    void ESP8266_textconnect(void)
    {
        printf ( "\r\n正在配置ESP8266请耐心等待...\r\n" );
    
        ESP8266_CH_PD_Pin_SetH;
    
        ESP8266_AT_Test();
    
        ESP8266_Net_Mode_Choose(AP);
    
        while (!ESP8266_CIPAP(User_ESP8266_TCPServer_IP ));
    
        while (!ESP8266_BuildAP(User_ESP8266_BulitApSsid, User_ESP8266_BulitApPwd, User_ESP8266_BulitApEcn));
    
        ESP8266_Enable_MultipleId ( ENABLE );
    
        while(!ESP8266_StartOrShutServer(ENABLE, User_ESP8266_TCPServer_PORT, User_ESP8266_TCPServer_OverTime ));
    
        ESP8266_Inquire_ApIp ( str, 20 );
    
        printf ( "\r\n配置ESP8266 OK!\r\n" );
        printf ( "\r\n本模块WIFI为 %s,密码开放 \r\n AP IP 为: %s,开启的端口为:%s \r\n手机网络助手连接该 IP 和端口,最多可连接5个客户端\r\n",
                 User_ESP8266_BulitApSsid, str, User_ESP8266_TCPServer_PORT );
    
        ESP8266_Fram_Record_Struct .InfBit .FramLength = 0;
        ESP8266_Fram_Record_Struct .InfBit .FramFinishFlag = 0;
    }
    

    2.查看当前 AP 的参数

    代码如下:

    #define User_ESP8266_BulitApSsid	  "ESP8266"	  //要建立的热点的名称
    #define User_ESP8266_BulitApEcn	  	  OOPEN            //要建立的热点的加密方式
    #define User_ESP8266_BulitApPwd  	  "prechin"      //要建立的热点的密钥
    
    
    #define User_ESP8266_TCPServer_IP	  "192.168.31.192"	  //服务器开启的IP地址
    #define User_ESP8266_TCPServer_PORT	  "8080"	  //服务器开启的端口
    
    
    #define User_ESP8266_TCPServer_OverTime	  "1800"	  //服务器超时时间(单位:秒)
    

    现在我修改完,电脑就会搜索到 WiFi 如下图所示:

    3.连接 AP

    ​ 就像我们平常那样连接 WiFi 就可以了

    4.建立 TCP 多连接测试,并且收发数据

    手机下载网络调试精灵,输入正确IP端口号,发起连接请求。
    请添加图片描述
    使用串口调试助手查看数据。

    四、核心源码

    1、STM32下位机

    实现LED灯控制,以及温湿度数据传输

    void ESP8266_STA_TCPClient_Test(void)
    {
        if(ESP8266_Fram_Record_Struct .InfBit .FramFinishFlag )
        {
            USART_ITConfig ( USART2, USART_IT_RXNE, DISABLE ); //禁用串口接收中断
            ESP8266_Fram_Record_Struct .Data_RX_BUF [ ESP8266_Fram_Record_Struct .InfBit .FramLength ]  = '\0';
    
            printf ( "\r\n%s\r\n", ESP8266_Fram_Record_Struct .Data_RX_BUF );//
            if ( ( pCh = strstr ( ESP8266_Fram_Record_Struct .Data_RX_BUF, "+IPD,0,6:LED_" ) ) != 0 )
            {
                cCh = * ( pCh + 13 );
    
                switch ( cCh )
                {
                case '1':                //LED1控制
                    cCh = * ( pCh + 14 );
                    switch ( cCh )
                    {
                    case '0':     //关闭LED1
                        led2=1;
                        PGout(13) = 1;
                        break;
                    case '1':     //打开LED1
                        led2=0;
                        PGout(13) = 0;
    
                        break;
                    default :
                        break;
                    }
                    break;
    
                case '2':                   //LED2控制
                    cCh = * ( pCh + 14 );
                    switch ( cCh )
                    {
                    case '0':
                        led3=1;
                        PGout(14) = 1;
                        break;
                    case '1':
                        led3=0;
                        PGout(14) = 0;
                        break;
                    default :
                        break;
                    }
                    break;
    
                default :
                    break;
                }
    
            }
    
    
            DHT11_Read_Data(&temp,&humi);
            temp_buf[0]=temp/10+0x30;
            temp_buf[1]=temp%10+0x30;
            temp_buf[2]='\0';
    
    
            humi_buf[0]=humi/10+0x30;
            humi_buf[1]=humi%10+0x30;
            humi_buf[2]='\0';
    
            if ( ( pCh = strstr ( ESP8266_Fram_Record_Struct .Data_RX_BUF, "+IPD,0,4:Temp" ) ) != 0 )
            {
                sprintf ( str, "%s,%s",temp_buf, humi_buf);
                ucId = * ( pCh + strlen ( "+IPD," ) ) - '0';
                ESP8266_SendString ( DISABLE, str, strlen ( str ), ( ENUM_ID_NO_TypeDef ) ucId );
                printf("\r\n温湿度=%s\r\n",str);
            }
    
            ESP8266_Fram_Record_Struct .InfBit .FramLength = 0;
            ESP8266_Fram_Record_Struct .InfBit .FramFinishFlag = 0;
    
            USART_ITConfig ( USART2, USART_IT_RXNE, ENABLE ); //使能串口接收中断
    
        }
    
    }
    
    

    2、Qt上位机

    void Widget::newConnect()
    {
        if(!isConnected)
        {
            tcpClient->abort();   //取消已有的链接
            tcpClient->connectToHost(ui->lineEdit->text(), ui->lineEdit_2->text().toInt());  //连接到主机,手动输入主机地址 固定端口号8080
            isConnected = true;
            ui->pushButton->setText("断开");
            qDebug()<<"连接成功";
        }
        else
        {
    
            tcpClient->disconnectFromHost();
            tcpClient->waitForDisconnected(1000);
            if (tcpClient->state() == QAbstractSocket::UnconnectedState || tcpClient->waitForDisconnected(1000))
            {
                ui->pushButton->setText("连接");
                 isConnected = false;
                qDebug()<<"断开连接成功";
    
            }
        }
    }
    
    int i = 0;
    void Widget::led1sendMessage()
    {
        //具体要做的事情
        if(i%2 == 0)
        {
            ui->pushButton_2->setText("关闭");
            tcpClient->write("LED_11");
        }
        else
        {
            ui->pushButton_2->setText("开启");
            tcpClient->write("LED_10");
        }
        i++;
    }
    

    请添加图片描述


    总结

    以上就是今天要讲ESP8266的内容,ESP8266在STM32平台上的一些基础应用。

    基于STM32室内温湿度监控系统

    物联沃分享整理
    物联沃-IOTWORD物联网 » STM32连接WIFI-ESP8266实战—AP模式运用

    发表评论