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

发布于:2023-01-13 ⋅ 阅读:(764) ⋅ 点赞:(0)


前言

学习物联网这一块大家首先想到的是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室内温湿度监控系统


网站公告

今日签到

点亮在社区的每一天
去签到