ESP8266WIFI模块AT配置以及在STM32F103实验

目录

一、引脚说明:

二、相关AT指令

1、测试指令:发送:AT

2 、重启模块:发送:AT+RST

3、设置模块工作模式 1 :STA 模式 2 :AP 模式 3 :STA 和 和 AP 模式为 例:设置模块为 STA 和 和 STA模式发送:AT+CWMODE=1

4、让模块列出当前环境下存在无线路由器的列表 发送:AT+CWLAP

​编辑

5、让模块连上自己的路由器发送:AT+CWJAP="www.zniot.com","littlebee" (其中 littlebee 为密码)

6、检测是否真连上了        发送:AT+CWJAP?

7、启动模块单连接:发送:AT+CIPMUX=0

8、连上我们远程 TCP 服务器X1.X2.X3.X4 为 IP 地址 9999 为端口发送: AT+CIPSTART="TCP"," X1.X2.X3.X4",9999

9、模块发数据到服务器        发送:AT+CIPSEND=4,15(注意:15 为自己设定的发送数据长度,>=15 才发送 否则累加满15 再发送,大于 15 则截取前面的数据)

10、开启模块本地的 TCP 服务器(其中 1 为开启 如果设为 0 则关闭 8888:要监听端口)※发送: AT+CIPSERVER=1,8888结果:

​编辑查一下模块 IP 地址:※ 发送: AT+CIFSR=?※ 结果

​编辑连接上试试:

三、stm32f103连接服务器代码


1 、重启模块:
发送:AT+RST

一、引脚说明:

VCC:电源正极,接3.3-5V

GND:电源负极

TXD:数据发送引脚

RXD:数据接收引脚

RST:复位引脚(低电平有效)

I0-0:固件烧写模式,低电平烧写,高电平运行

二、相关AT指令

1、测试指令:发送:AT

2 、重启模块:发送:AT+RST

3、设置模块工作模式 1 :STA 模式 2 :AP 模式 3 :STA 和 和 AP 模式
为 例:设置模块为 STA 和 和 STA模式
发送:AT+CWMODE=1

4、让模块列出当前环境下存在无线路由器的列表 发送:AT+CWLAP

5、让模块连上自己的路由器
发送:AT+CWJAP="www.zniot.com","littlebee" (其中 littlebee 为密码)

6、检测是否真连上了        发送:AT+CWJAP?

7、启动模块单连接:发送:AT+CIPMUX=0

8、连上我们远程 TCP 服务器X1.X2.X3.X4 为 IP 地址 9999 为端口
发送: AT+CIPSTART="TCP"," X1.X2.X3.X4",9999

9、模块发数据到服务器        发送:AT+CIPSEND=4,15(注意:15 为自己设定的发送数据长度,>=15 才发送 否则累加满15 再发送,大于 15 则截取前面的数据)

10、开启模块本地的 TCP 服务器
(其中 1 为开启 如果设为 0 则关闭 8888:要监听端口)
※发送: AT+CIPSERVER=1,8888
结果:


查一下模块 IP 地址:
※ 发送: AT+CIFSR=?
※ 结果


连接上试试:

三、stm32f103连接服务器代码

#include "./BSP/ESP8266/esp8266.h"
#include "./SYSTEM/usart/usart.h"
#include "./SYSTEM/delay/delay.h"
#include "./BSP/TIME/time.h"
#include "string.h"
#include "FreeRTOS.h"
#include "task.h"
#include "semphr.h"
#include "./BSP/TIME/time.h"

uint8_t AT_CMD[]="AT\r\n";//测试
uint8_t AT_REST[]="AT+RST\r\n";//复位
uint8_t AT_CWAUTOCONN[]="AT+CWAUTOCONN=0\r\n";//关闭自动连接
uint8_t AT_WIFI_CONNECT[]="AT+CWJAP_DEF=\"TP-LINK_226\",\"226226226\"\r\n";//连接wifi
uint8_t AT_CIPMUX[]="AT+CIPMUX=0\r\n";//配置单路连接
uint8_t AT_CWMODE[]="AT+CWMODE=1\r\n";//设置sta模式
//服务器iot.100ask.net
uint8_t AT_TCP_CONNECT[]="AT+CIPSTART=\"TCP\",\"47.114.187.247\",1883\r\n";//TCP连接
uint8_t AT_CIPMODE[]="AT+CIPMODE=1\r\n";//打开透传
uint8_t AT_CIPSEND[]="AT+CIPSEND\r\n";//开始透传
uint8_t AT_EXIT[]="+++";//断开透传
uint8_t AT_CIPCLOSE[]="AT+CIPCLOSE\r\n";//关闭tcp连接

uint8_t open_send_flag=0;//透传打开标志
uint8_t wifi_success=0;//TCP连接标志

//判断是否回应ok 1:OK,0:失败
uint8_t esp8266_ack_ok(uint16_t time_out)
{
    uint8_t temp=0;
    uint8_t buf[4];
    uint16_t now_time=time6_over;
    while(1)
    {
        if(!is_rt_buf_empty())
        {
            temp=get_rt_buf();
            if(temp=='O')//判断是否为OK
            {
                delay_ms(10);
                temp=get_rt_buf();
                if(temp=='K')
                {
                    printf("OK\r\n");
                    delay_ms(time_out);
                    r_flag=w_flag;
                    return 0;
                }
            }
            if(temp=='E')
            {
                delay_ms(10);
                for(int i=0;i<4;i++)
                {
                    buf[i]=get_rt_buf();
                }
                //printf("buf=%s#\r\n",buf);
                if(buf[0]=='R'&&buf[1]=='R'&&buf[2]=='O'&&buf[3]=='R')
                {
                    //printf("buf=%s\r\n",buf);
                    printf("ERROR\r\n");
                    delay_ms(10);
                    r_flag=w_flag;
                    return 1;
                }
            }
            //printf("%c",temp);
        }
        if(time6_over-10>(now_time))
        {
            printf("TIME OVER\r\n");
            break;
        }
    }
    return 1;
}

void esp01s_read(void)
{
    uint8_t temp=0;
    while(!is_rt_buf_empty())//判断缓冲区是否有数据
    {
        temp=get_rt_buf();
        printf("%c",temp);
    }
}

//wifi配置 1:失败,0:成功
uint8_t wifi_config(void)//mode:0:任务外,1:任务内
{
    //复位
    HAL_UART_Transmit(&g_uart3_handle,AT_REST,strlen((char *)AT_REST),1000);
    printf("reset:");
    if(esp8266_ack_ok(1000))
        return 1;
    else
    {
        wifi_success=0;
        open_send_flag=0;
    }
    
    //设置sta模式
    HAL_UART_Transmit(&g_uart3_handle,AT_CWMODE,strlen((char *)AT_CWMODE),1000);
    printf("set sta mode:");
    if(esp8266_ack_ok(10))
        return 1;
    
    //连接wifi
    HAL_UART_Transmit(&g_uart3_handle,AT_WIFI_CONNECT,strlen((char *)AT_WIFI_CONNECT),1000);
    printf("connect wifi:");
    if(esp8266_ack_ok(10))
        return 1;

    //设置单路连接
    HAL_UART_Transmit(&g_uart3_handle,AT_CIPMUX,strlen((char *)AT_CIPMUX),1000);
    printf("set Single-way connect:");
    if(esp8266_ack_ok(10))
        return 1;
    
    //打开透传
    HAL_UART_Transmit(&g_uart3_handle,AT_CIPMODE,strlen((char *)AT_CIPMODE),1000);
    printf("open Transparent transmission mode:");
    if(esp8266_ack_ok(10))
        return 1;

    //连接TCP
    HAL_UART_Transmit(&g_uart3_handle,AT_TCP_CONNECT,strlen((char *)AT_TCP_CONNECT),1000);
    printf("connect TCP:");
    if(esp8266_ack_ok(10))
        return 1;
    else
        wifi_success=1;
    return 0;
}

//开始透传
uint8_t wifi_open_cipsend(void)
{
    //wifi已近连接
    if(wifi_success && open_send_flag!=1)
    {
        //开始透传
        HAL_UART_Transmit(&g_uart3_handle,AT_CIPSEND,strlen((char *)AT_CIPSEND),500);
        printf("start Transparent transmission:");
        if(!esp8266_ack_ok(10))
            open_send_flag=1;
        else
            return 1;
        return 0;
    }
    return 1;
}

//关闭透传
void wifi_close_cipsend(void)
{
    if(wifi_success && open_send_flag==1)
    {
        //关闭透传
        HAL_UART_Transmit(&g_uart3_handle,AT_EXIT,strlen((char *)AT_EXIT),500);
        printf("clsoe Transparent transmission:");
        delay_ms(100);
        HAL_UART_Transmit(&g_uart3_handle,AT_CMD,strlen((char *)AT_CMD),500);
        if(!esp8266_ack_ok(10))
            open_send_flag=0;
    }
    else
        printf("Transparent transmission not open,no need close\r\n");
}

//关闭连接,返回0成功,1失败
uint8_t wifi_close_connect(void)
{
    taskENTER_CRITICAL();/* 进入临界区 */
    delay_ms(100);
    //关闭透传
    wifi_close_cipsend();
    //关闭连接
    HAL_UART_Transmit(&g_uart3_handle,AT_CIPCLOSE,strlen((char *)AT_CIPCLOSE),1000);
    printf("close TCP connect:");
    if(!esp8266_ack_ok(10))
    {
        open_send_flag=0;
        wifi_success=0;
    }
    else
    {
        taskEXIT_CRITICAL(); /* 退出临界区 */
        return 1;
    }
    taskEXIT_CRITICAL(); /* 退出临界区 */
    return 0;
}

//复位后关闭
//关闭连接,返回0成功,1失败
uint8_t wifi_reclose_connect(void)
{
    //关闭透传
    HAL_UART_Transmit(&g_uart3_handle,AT_EXIT,strlen((char *)AT_EXIT),500);
    printf("close Transparent transmission,disconnect:");
    delay_ms(100);
    HAL_UART_Transmit(&g_uart3_handle,AT_CIPCLOSE,strlen((char *)AT_CIPCLOSE),1000);
    delay_ms(300);
    open_send_flag=0;
    wifi_success=0;
    esp01s_read();
    return 0;
}
extern SemaphoreHandle_t wifi_xsemaphor_handle; 
int wifi_write(uint8_t *buf,int len)
{
    if(wifi_success && open_send_flag==1)
    {
        xSemaphoreTake(wifi_xsemaphor_handle,portMAX_DELAY);//加互斥锁,portMAX_DELAY等待
        HAL_UART_Transmit(&g_uart3_handle,buf,len,100);//发送数据
        xSemaphoreGive(wifi_xsemaphor_handle);//解互斥锁
        return 0;
    }
    else
        printf("send error,no connect or no open Transparent transmission\r\n");
    return 1;
}

int wifi_read_byte(uint8_t *c,uint16_t timeout)
{
    uint8_t temp;
    uint16_t now_time=time6_over;
    if(wifi_success && open_send_flag==1)
    {
        while(1)
        {
            if(!is_rt_buf_empty())//环形缓冲区不为空
            {
                temp=get_rt_buf();//获取一个字节
                *c=temp;
                return 0;
            }
            if((time6_over-now_time)>timeout)
                return 1;//超时
        }
    }
    else
        printf("read error,no connect or no open Transparent transmission\r\n");
    return 1;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值