关于ESP8266(Wifi通信模块)的学习

 前言

涉及到的工具与模块

1. ATK-ESP8266wifi模块

2.USB-UART模块(用于检测esp模块功能是否正常)

3.stm32zet6

一、ESP8266的基本介绍

        ESP8266是由乐鑫科技推出的一款低成本、高性能的无线WiFi模块。该模块集成了WiFi芯片和处理器,能够提供稳定的无线连接和较强的处理能力。ESP8266可以通过串口或者WiFi连接到其他设备,使其可以无线连接到互联网。

        ESP8266模块具有小巧的体积、低功耗、易于集成等优点,广泛应用于物联网、智能家居、远程控制等领域。它支持多种开发平台和编程语言,如Arduino、NodeMCU、MicroPython等,开发门槛低,适合初学者和专业开发者使用。

        本案例以ATK-ESP-01 模块为例

       

        该模块模块采用串口(LVTTL)与 MCU(或其他串口设备)通信,它不用你自己建立客户端,其内置了TCP/IP协议栈,能够实现串口与 WIFI 之间的转换(将串口传输的信息再通过wifi传递给服务器),即只要配置串口就可以向服务器传输信息。

该模块的引脚信息:

VCC    电源(3.3V~5V)
GND    电源地
TXD    模块串口发送脚(TTL 电平,不能直接接 RS232 电平!),可接单片机的 RXD
RXD    模块串口接收脚(TTL 电平,不能直接接 RS232 电平!),可接单片机的 TXD
RST    复位(低电平有效)
IO_0    用于进入固件烧写模式,低电平是烧写模式,高电平是运行模式(默认状态)

ps.一般情况下我们只需要用到串口引脚和电源即可,如图

    

二、ESP8266的基本命令

现在我们终于可以讲讲stm32是怎么控制这个模块的了

首先就是用来控制它的指令集

常用指令集
指令功能
AT测试AT启动
AT+RST重启模块
AT+RESTORE恢复出厂设置
AT+CWLIF查看已接入设备的 IP
AT+CIFSR查看本模块的 IP 地址
AT+CWMODE?查看本机配置模式
AT+CIPMUX=1开启多连接模式
AT+CIPMUX=0开启单线路模式
AT+CIPSTO?查询本模块的服务器超时时间
ATE开关回显功能ATE关闭回显,ATE开启回显
AT+GMR查看版本信息
AT+UART设置串口配置
AT+CWJAP加入AP(wifi)
AT+CWQAP退出与AP的连接
AT+CWSMARTSTART启动智能连接
AT+CWSMARTSTOP停止智能连接
AT+CIPSTART连接TCP
AT+CIPCLOSE关闭TCP连接
AT+CIPMODE=1开启TCP透传
AT+CIPSEND开始传输信息(从这里开始输出的都以字符串的形式被接收,包括命令格式)
+++退出透传(下一行识别命令,记得别换行)
AT+CIPMODE=0退出透传模式

三、ESP8266的指令搭配和模块配置

作为服务器时的配置

1.将自己作为wifi,给其他子端发送信息

向串口发送:AT+CWMODE=2 

2.重启模块(这个步骤是必要的)

向串口发送:AT+RST

3.服务器配置

向串口发送:AT+CWSAP=“wifi名称”,“wifi密码”,x,y (x,y分别为通道号和加密等级)

4.查看自己的ip地址(这个ip地址是给客户端连的)

向串口发送:AT+CIFSR

5.建立服务器当然要用到多线连接咯

向串口发送:AT+CIPMUX=1 

6.设置端口

向串口发送:AT+CIPSERVER=1使用默认端口

作为客户端时(本案例也将使用客户端连接qt服务器)

1.配置成STA模式,与服务器连接

向串口发送:AT+CWMODE=1 

2.重启模块(这个步骤是必要的)

向串口发送:AT+RST

3.连接热点

向串口发送:AT+CWSAP=“wifi名称”,“wifi密码”

4.单线连接

向串口发送:AT+CIPMUX=0

5.连接服务器地址

向串口发送:AT+CIPSTART=“TCP”,“服务器ip地址”,端口号

6.开启透传模式

向串口发送:AT+CIPMODE=1

7.开始发送信息

向串口发送:AT+CIPSEND

(建议操作之前先使用串口进行配置,方便了解发出命令后会返回什么)

差不多就是以上流程,下面展示一下具体的写法

四、程序展示

这里展示一下连接服务器的代码流程

首先是客户端初始化

它们分别用到了以下这几个功能函数

1.判断命令发送

//判断是否正在接收数据
_Bool ESP01S_WaitRecive(void)
{

    if(ESP01S_cnt == 0)//如果接收计数为0 则说明没有处于接收数据中,所以直接跳出,结束函数
        return 1;
        
    if(ESP01S_cnt == ESP01S_cntPre)//如果上一次的值和这次相同,则说明接收完毕
    {
        ESP01S_cnt = 0;//清0接收计数
            
        return 0;//返回接收完成标志
    }
        
    ESP01S_cntPre = ESP01S_cnt;//置为相同
    
    return 1;//返回接收未完成标志

}

2.命令发送

//发送命令并返回命令是否完成标志
_Bool ESP01S_SendCmd(char *cmd, char *res)
{
    
    unsigned char timeOut = 200;

    Usart_SendString(huart2, (unsigned char *)cmd, strlen((const char *)cmd));
    
    while(timeOut--)
    {
        if(ESP01S_WaitRecive() == 0)//如果收到数据
        {
            if(strstr((const char *)ESP01S_buf, res) != NULL)//如果检索到关键词
            {
                ESP01S_Clear();//清空缓存
                
                return 0;
            }
        }
        
        HAL_Delay(10);
    }
    
    return 1;

}

3.连接初始化

#define ESP01S_WIFI_INFO        "AT+CWJAP=\"226\",\"226226226\"\r\n"//要连接到的wifi
#define ESP01S_ONENET_INFO   "AT+CIPSTART=\"TCP\",\"192.168.124.100\",8899\r\n"//连接到的服务器

void ESP01S_Init(void)
{
    ESP01S_Clear();
    unsigned char str[40];
    
    while(ESP01S_SendCmd("+++","")) //退出透传
    HAL_Delay(500);
    
    sprintf((char *)str, "begin\r\n"); //修改模式(调试时退出透传)
    LCD_ShowString(70, 70, 50, 24, 24, str);
    while(ESP01S_SendCmd("AT+CIPMODE=0\r\n","OK"))
    HAL_Delay(500);

     //可以不使用以上代码

    sprintf((char *)str, "0. AT\r\n");
    LCD_ShowString(70, 70, 50, 24, 24, str);
    while(ESP01S_SendCmd("AT\r\n","OK"))
    HAL_Delay(500);
    
    sprintf((char *)str, "1. RST\r\n");
    LCD_ShowString(70, 70, 200, 24, 24, str);
    ESP01S_SendCmd("AT+RST\r\n", "ready");
  HAL_Delay(500);    
    
    ESP01S_SendCmd("AT+CIPCLOSE\r\n", "");//关闭TCP连接
    HAL_Delay(500);    
    
    sprintf((char *)str, "2. CWMODE\r\n");//模式1(Station),默认保存Flash
    LCD_ShowString(70, 70, 200, 24, 24, str);
    while(ESP01S_SendCmd("AT+CWMODE=1\r\n", "OK"))
        HAL_Delay(500);
    
    sprintf((char *)str, "3. CWJAP\r\n");//链接WIFI
    LCD_ShowString(70, 70, 200, 24, 24, str);
    while(ESP01S_SendCmd(ESP01S_WIFI_INFO, "GOT IP"))
        HAL_Delay(500);
    
    sprintf((char *)str, "4. CIPMUX\r\n");//单线路
    LCD_ShowString(70, 70, 200, 24, 24, str);
    while(ESP01S_SendCmd("AT+CIPMUX=0\r\n", "OK"))
        HAL_Delay(500);
    
    sprintf((char *)str, "5. CIPSTART\r\n");//开启TCP连接
    LCD_ShowString(70, 70, 200, 24, 24, str);
    while(ESP01S_SendCmd(ESP01S_ONENET_INFO, "CONNECT"))
    HAL_Delay(500);
    sprintf((char *)str, "6. CIPMODE\r\n");//开启TCP透传
    LCD_ShowString(70, 70, 200, 24, 24, str);
    while(ESP01S_SendCmd("AT+CIPMODE=1\r\n","OK"))
    HAL_Delay(500);

    sprintf((char *)str, "7. CIPMODE\r\n");//开启TCP透传
    LCD_ShowString(70, 70, 200, 24, 24, str);
    while(ESP01S_SendCmd("AT+CIPSEND\r\n","OK"))
    HAL_Delay(500);
    
    sprintf((char *)str, "8. ESP01S Init OK\r\n");//初始化完成
    LCD_ShowString(70, 70, 200, 24, 24, str);

}

效果图:

ps.这里就不贴出信息的发送方式了(就是发给串口就行),如图,能连接上。(如有问题欢迎指正)

ESP8266是一款非常流行的WiFi通信模块,它内置了TCP/IP协议栈,可以通过串口或SPI接口与微控制器进行通信,实现WiFi通信功能。以下是ESP8266 WiFi通信模块软件实现的步骤: 1. 准备ESP8266开发环境 在使用ESP8266之前,需要准备好相应的开发环境,包括ESP8266的开发板、USB转串口模块、串口调试工具等。根据开发板的型号,选择相应的开发环境,例如使用Arduino IDE进行开发。 2. 设置ESP8266接口 在使用ESP8266之前,需要设置ESP8266的接口,包括串口波特率、数据位、停止位、奇偶校验等参数。可以通过AT指令或者编程的方式进行设置。 3. 连接WiFi网络 使用ESP8266连接WiFi网络是实现WiFi通信的前提,可以通过AT指令或者编程的方式进行连接。在连接WiFi网络之前,需要知道WiFi网络的SSID和密码。 4. 实现TCP通信 ESP8266内置了TCP/IP协议栈,可以通过TCP通信实现WiFi通信。可以通过AT指令或者编程的方式实现TCP通信,具体实现步骤如下: (1)建立TCP连接 (2)发送数据 (3)接收数据 (4)关闭TCP连接 5. 实现UDP通信 除了TCP通信ESP8266还支持UDP通信,可以通过UDP通信实现WiFi通信。可以通过AT指令或者编程的方式实现UDP通信,具体实现步骤如下: (1)创建UDP连接 (2)发送数据 (3)接收数据 (4)关闭UDP连接 6. 实现HTTP通信 ESP8266还支持HTTP协议,可以通过HTTP通信实现WiFi通信。可以通过AT指令或者编程的方式实现HTTP通信,具体实现步骤如下: (1)建立HTTP连接 (2)发送HTTP请求 (3)接收HTTP响应 (4)关闭HTTP连接 以上是ESP8266 WiFi通信模块软件实现的步骤,可以根据具体的需求选择相应的通信方式进行开发。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值