解读ESP8266三种工作模式并提供模块配置步骤与截图,最后附上模块对stc8单片机的简单控制代码

  1. ESP8266模块(新版本&旧版本)
    新版 旧版

引脚说明:
• VCC接3.3v,接5v时间长了可能会烧
• UTXD,URXD和其它的TXD,RXD接时注意交叉接就行了
• CH_PD要给高电平模块才工作
• GPIO0一般不用管,烧录固件时要接地
• RST低电平复位,高电平工作(默认高)
• GPIO2必须为高电平,内部默认已拉高,不用管

配置模块时,下载器与模块连线图:
配置连线图
烧写固件时,下载器与模块连线图:
烧录WIFI固件连线图

ESP8266有三种工作模式:

1、 Station模式
2、 SoftAP模式
3、 Station + SoftAP模式
出厂设置为第三种,上电后,蓝灯微弱闪烁后熄灭(新版:红灯长亮 ,旧版:红灯熄灭)

  1. 解读三种模式
    2.1 ESP8266 在 Station 模式

    ESP8266 作为 Station,通过路由器(AP) 连入 internet ,可向云端服务器上传、 下载数据。用户可随时使用移动终端(手机、 笔记本等) ,通过云端监控 ESP8266 模块的状况, 向 ESP8266 模块发送控制指令。
    Station模式

2.2 ESP8266 在 SoftAP 模式

ESP8266 作为 SoftAP,手机、 电脑、 用户设备、 其他 ESP8266 Station 接口等均可以作为 Station 连入ESP8266, 组建成一个局域网。
SoftAP模式

2.3 ESP8266 在 SoftAP + station 共存模式

ESP8266 支持 SoftAP + Station 共存的模式,用户设备、 手机等可以作为Station 连入 ESP8266 的 SoftAP 接口,同时, 可以控制 ESP8266 的 Station接口通过路由器(AP) 连入 internet。
Station+SoftAP模式

  1. 解读透传功能

    透传, 即透明传输功能。 Host 通过 uart 将数据发给 ESP8266, ESP8266 再通过无线网络将数据传出去; ESP8266 通过无线网络接收到的数据,同理通过uart 传到 Host。 ESP8266 只负责将数据传到目标地址,不对数据进行处理,发送方和接收方的数据内容、 长度完全一致,传输过程就好像透明一样。
    透传需要先建立连接:
    无线网络参数:
    网络名称(SSID)
    安全模式
    密钥(password)
    TCP 连接参数
    协议类型
    连接类型(client)
    目的 IP 地址
    目的端口
    串口参数
    波特率
    数据位
    检验位
    停止位
    硬件流控

  2. UART 成帧机制

ESP8266 判断 UART 传来的数据时间间隔,若时间间隔大于 20ms, 则认为一帧结束;否则, 一直接收数据到上限值 2KB, 认为一帧结束。 ESP8266 模块判断UART 来的数据一帧结束后, 通过 WIFI 接口将数据转发出去。
成帧时间间隔为 20ms, 一帧上限值为 2KB。

  1. 无线遥控应用

Phone 作为 Station, 连入 ESP8266 提供的 SoftAP, ESP8266 可通过 UART 与设备相连,进行无线控制。
无线遥控

  1. 远程连接应用

ESP8266 作为 Station, 通过无线路由(AP) 连入 internet,可以向云端服务器上传数据、 下载固件更新;移动终端(手机、笔记本等) 也可以通过云端服务器, 远程控制 ESP8266。
远程遥控

  1. 透明串口

用户设备的主 IC 作为 Host, 通过 UART 向 ESP8266 发送数据, ESP8266 再将数据通过无线网络传输给目的地址, 实现透明传输的功能。
透明串口

  1. 设置波特率:(新版本出厂波特率115200,旧版本不确定可以挨个试)

设置波特率1
执行过上面那两条指令后,关闭串口并把串口波特率从9600换为115200,这时在重新打开串口,发送指令AT,若没出现乱码,则说明波特率修改完成。
设置波特率2

注意
9. 模式的配置
9.1 模块SoftAP模式下做tcp server(意思就是模块是服务器,客户端去连模块)

AT+CWMODE=2 开启 AP 模式
AT+RST 重启指令,设置新的工作模式后需重启才能生效。我的模块不需要这条指令也行
AT+CWSAP=“ESP8266”,“0123456789”,11,0 设置模块的 wifi 、密码、通道号、加密方式
AT+CIPMUX=1 打开多连接
AT+CIPSERVER=1,8899 设置模块服务器端口,连接模块建立的无线网ESP8266.打开手机网络调试助手,在tcp client模式下,输入模块的 ip 和设置的端口。如图模块默认的 ip 为 192.168.4.1,端口为自己设定的 8899(默认的为 333) .
AT+CIPSEND=0,10 进入数据发送模式为十个字节
> 进入发送模式
0123456789 发送的 10 个数据

把WiFi模块与下载器连接后,再用串口线把下载器连接到PC机,打开安信可串口调试助手,选择正确的串口号及波特率,然后打开串口,按上面的指令开始配置。如下图:
一半
另一半

执行到第5条AT+CIPSERVER=1,8899指令后,就可以打开手机连接这个热点了。
wifi
连上后,打开手机上的网络调试助手app,在下面第二幅图片中的IP是服务器的IP。我们可以发送AT+CIFSR指令查看服务器IP,然后输入到第二幅图的IP栏,端口号是我们在上面的指令中自己设置的,设置完成后点击Connect。
1 2
完成上述操作后,串口调试助手会显示“0,CONNET”其中0表示连入的这个client的id,指令AT+CIPSEND=0,10中的0就是指的这个客户端,给它发10字节数据
下半
通信

9.2模块在SoftAP模式下做tcp client(意思就是模块是客户端,模块去连服务器)

AT+CWMODE=2 设置AP模式
AT+CWSAP=“ESP8266”,“0123456789”,11,0 设置模块的 wifi 、密码、通道号、加密方式
AT+CIPMUX=1 开启多连接模式
AT+CIPSTART=2,“TCP”,“192.168.4.2”,8081 手机网络调试助手tcp server模式下 ip 192.168.4.2 和端口 8081,先设置再去查看监听,设置成功后再通过串口发送这条指令进行连接。
AT+CIPSEND=2,6 向服务器发送6字节数据
> 进入发送模式
123456 发送的6字节数据

9.3 模块Station+SoftAP模式下做tcp server

AT+CWMODE=3 设置 AP 和 STA 共存模式
AT+RST 重启指令,设置新的工作模式后需重启才能生效,我的模块不需要这条指令
AT+CWLAP 查询附近 wifi
AT+CWJAP=“1”,“2580147369” 连接附近知道密码的wifi
AT+CIFSR 查看路由器分配的 IP,例如 192.168.4.1
AT+CIPMUX=1 打开多连接
AT+CIPSERVER=1,8899 设置模块服务器端口,端口 8899(默认的为 333),打开手机网络调试助手,在tcp client模式下连接模块的 ip 和端口号。
AT+CIPSEND=0,10 进入数据发送模式为十个字节
> 进入发送模式
0123456789 发送的 10 个数据
AT指令

执行AT+CIPSERVER=1,8899指令后,就可以打开手机连接热点。那么我们是连接热点“ESP8266”还是热点“1”呢?
我们输入指令AT+CIFSR得到以下信息:
+CIFSR:APIP,“192.168.4.1”
+CIFSR:APMAC,“1a:fe:34:0a:54:97”
+CIFSR:STAIP,“192.168.1.102”
+CIFSR:STAMAC,“18:fe:34:0a:54:97”
从这些信息中,我们可以知道当我们连接热点“ESP8266”时,我们打开手机网络调试助手,在tcp client模式下,这时我们输入服务器ip就是192.168.4.1,端口号8899。
当我们连接的热点是“1”时,在tcp client模式下,我们输入服务器IP就是192.168.1.102,端口号8899。
wifi
连上后,打开手机上的网络调试助手app
1 2
完成上述操作后,串口调试助手会显示“0,CONNET”其中0表示连入的这个client的id,指令AT+CIPSEND=0,10中的0就是指的这个客户端,给它发10字节数据3
4

9.4 模块在ap+sta模式下tcp client透传模式

AT+CWMODE=3 设置 AP 和 STA 共存模式
AT+RST 重启指令,设置新的工作模式后需重启才能生效,我的模块不需要这条指令
AT+CWLAP 查询附近 wifi
AT+CWJAP=“1”,“2580147369” 连接附近你知道密码的 wifi
AT+CIFSR 查看路由器分配的 IP,例如 192.168.4.1
AT+CIPMUX=0 设置单连接
AT+CIPMODE=1 设置透传模式
AT+CIPSTART=“TCP”,“192.168.1.101”,8890 手机 server 端的 ip 192.168.1.101 和端口 8890,先设置再去查看监听,设置成功后再通过串口去发送连接指令进行连接。
AT+CIPSEND 开始发送数据
> 进入发送模式
+++ 注意退出透传,直接发送。取消发送新行

注意透传只能在单连接模式下进行,所以在建立连接之前一定要用(AT+CIPMUX=0
设置单连接),但是模块处于服务器模式下时,必须要多链接,由于冲突,所以模块开启服务器模式不能做 tcp 透传!
AT
当执行到第7条AT+AT+CIPMODE=1指令时,这时手机连接热点名为“1”,密码为“2580147369”的热点。
1
再接着打开手机上的网络调试助手app,在tcp server模式下,我们把端口设置为8890,然后点击“Connect”,点击后变为下面的第二个界面。
1 2
然后,接着发第8、9、10条指令,网络调试助手app发8266:
1 在这里插入图片描述
要退出透传的话,把“发送新行”前的对号去掉,然后发送第10条指令。

9.5 模块Station模式下做tcp server

AT+CWMODE =1 开启Station模式
AT+CWJAP=”1”,”2580147369” 加入无线网络
AT+CIPMUX=1 开多连接模式
AT+CIPSERVER=1,8081 创建服务器
AT+CIFSR 查看本地IP地址
AT+CIPSEND=0,6 给ID为0的客户端发6个字节数据
> 进入发送模式
012345 发送的数据
12

9.6 模块Station模式下做tcp client

AT+CWMODE =1 开启Station模式
AT+CWJAP=”1”,”2580147369” 加入无线网络
AT+CIPMUX=1 开多连接模式
AT+CIPSTART=2,”TCP”,”192.168.1.101”,8088 建立TCP连接,在执行这条指令之前,先在网络调试助手tcp server 模式下,创建服务器。
AT+CIPSEND=2,6 给服务器2,发6字节数据
> 发送数据模式
012345 发送的数据
12

代码部分:
uart3.h文件

#ifndef __UART3_H__
#define __UART3_H__

extern bit busy3;

void Uart3Init(void);
void Uart3_Byte(char dat);
void Uart3_String(char *s);

#endif

uart3.c文件

#include "stc8.h"
#include "uart3.h"

bit busy3;

// 串口3初始化
void Uart3Init(void)		// 115200bps@12.000MHz
{
	S3CON = 0x10;		    // 8位数据,可变波特率
	S3CON &= 0xBF;		    // 串口3选择定时器2为波特率发生器
	AUXR |= 0x04;		    // 定时器2时钟为Fosc,即1T
	T2L = 0xE6;		        // 设定定时初值
	T2H = 0xFF;		        // 设定定时初值
	AUXR |= 0x10;		    // 启动定时器2
	IE2 = ES3;              // 使能串口3中断
	EA = 1;                 // 开总中断
}

/******** 发送一个字节数据 **********/
void Uart3_Byte(char dat)
{
	while(busy3);
	busy3 = 1;
	S3BUF = dat;
}

/********  发送一个字符串 **********/
//void Uart3_String(char *s)
//{
//	while(*s != '\0')
//	{
//		Uart3_Byte(*s++);
//	}
//}

char putchar(char c)
{
	Uart3_Byte(c);
	return c;
}

SoftAP模式的main.c文件

#include <stc8.h>
#include <stdio.h> // 在uart3.c文件中重写putchar方法后,再加上这个头文件,就可以使用printf
#include "uart3.h"

sbit LED1=P6^0;
typedef unsigned int  uint;
typedef unsigned char uchar;
uchar receive[2];
uchar sign=0;

void Delay_ms(uint  xms)   
{
    uint i, j;
	for(i=xms;i>0;i--)
		for(j=921;j>0;j--);
}

// 单片机向ESP8266模块发送AT指令
void wifi_init()
{
	// 如果ESP8266之前,已经配置过下列语句
	
	printf("AT+CWMODE=2\r\n");
	Delay_ms(1000);                     // 延时一下
	printf("AT+CWSAP=\"ESP8266\",\"0123456789\",11,0\r\n");
	Delay_ms(1000);
	
	// 那么只要下面两条语句也行
	
	printf("AT+CIPMUX=1\r\n");
	Delay_ms(1000);                       
	printf("AT+CIPSERVER=1,8899\r\n");
	Delay_ms(1000);
}

void wifi_data()
{
	if(receive[0]=='A')     
		LED1=0;                           // 亮
	if(receive[0]=='B')    
		LED1=1;                           // 灭
}   
void main()
{
	P_SW2 = 0x02;                         // RXD3_2/P5.0, TXD3_2/P5.1
	Uart3Init();                          // 串口3初始化
	wifi_init();                          // ESP8266初始化
	while(1)
	{
		wifi_data();
	}
}
// 中断程序,此程序只把+IPD,x,x:后的有用数据存进receive数组里
void Uart3_isr() interrupt 17
{
	if(S3CON & S3RI)
	{
		S3CON &= ~S3RI;
		if(sign==1)
		{
			receive[0] = S3BUF;
			sign = 0;                    // 保存receive[0]的数据
		}
		if(S3BUF==':')       
			sign = 1;
	}
	if(S3CON & S3TI)
	{
		S3CON &= ~S3TI;
		busy3 = 0;
	}
}

Station+SoftAP模式的main.c文件

#include <stc8.h>
#include <stdio.h> // 在uart3.c文件中重写putchar方法后,再加上这个头文件,就可以使用printf
#include "uart3.h"

sbit LED1=P6^0;
typedef unsigned int  uint;
typedef unsigned char uchar;
uchar receive[2];
uchar sign=0;

void Delay_ms(uint  xms)   
{
    uint i, j;
	for(i=xms;i>0;i--)
		for(j=921;j>0;j--);
}

// 单片机向ESP8266模块发送AT指令
void wifi_init()
{
	// 如果ESP8266之前,已经配置过下列语句
	
	printf("AT+CWMODE=3\r\n");
	Delay_ms(1000);                     // 延时一下
	printf("AT+CWLAP\r\n");
	Delay_ms(1000); 
	
	// 下面这个热点“1”是可以上网的热点,也就是它能被ESP8266查询到
	
	printf("AT+CWJAP=\"1\",\"2580147369\"\r\n");
	Delay_ms(1000);
	printf("AT+CIFSR");
	Delay_ms(1000); 
	
	// 那么只要下面两条语句也行
	
	printf("AT+CIPMUX=1\r\n");
	Delay_ms(1000);                       
	printf("AT+CIPSERVER=1,8899\r\n");
	Delay_ms(1000);
}

void wifi_data()
{
	if(receive[0]=='A')     
		LED1=0;                           // 亮
	if(receive[0]=='B')    
		LED1=1;                           // 灭
}   
void main()
{
	P_SW2 = 0x02;                         // RXD3_2/P5.0, TXD3_2/P5.1
	Uart3Init();                          // 串口3初始化
	wifi_init();                          // ESP8266初始化
	while(1)
	{
		wifi_data();
	}
}
// 中断程序,此程序只把+IPD,x,x:后的有用数据存进receive数组里
void Uart3_isr() interrupt 17
{
	if(S3CON & S3RI)
	{
		S3CON &= ~S3RI;
		if(sign==1)
		{
			receive[0] = S3BUF;
			sign = 0;                    // 保存receive[0]的数据
		}
		if(S3BUF==':')       
			sign = 1;
	}
	if(S3CON & S3TI)
	{
		S3CON &= ~S3TI;
		busy3 = 0;
	}
}

安信可串口调试助手、网络调试助手app(Android版本)、网络调试助手(PC版本)、烧录WiFi固件工具四个软件的下载地址:https://download.csdn.net/download/weixin_43915898/11617094

  • 9
    点赞
  • 61
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值