关闭

女兔帮

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

更新时间:2025-02-18 21:56:43 浏览:

模块(新版本&旧版本)

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

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

引脚说明:

• VCC接3.3v,接5v时间长了可能会烧

• UTXD,URXD和其它的TXD,RXD接时注意交叉接就行了

• CH_PD要给高电平模块才工作

• GPIO0一般不用管,烧录固件时要接地

• RST低电平复位,高电平工作(默认高)

• GPIO2必须为高电平,内部默认已拉高,不用管

配置模块时,下载器与模块连线图:

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

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

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

有三种工作模式:

1、 模式

2、 模式

3、 + 模式

出厂设置为第三种,上电后,蓝灯微弱闪烁后熄灭(新版:红灯长亮 ,旧版:红灯熄灭)

解读三种模式

2.1 在 模式

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

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

2.2 在 模式

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

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

2.3 在 + 共存模式

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

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

解读透传功能

透传, 即透明传输功能。 Host 通过 uart 将数据发给 , 再通过无线网络将数据传出去; 通过无线网络接收到的数据,同理通过uart 传到 Host。 只负责将数据传到目标地址,不对数据进行处理,发送方和接收方的数据内容、 长度完全一致,传输过程就好像透明一样。

透传需要先建立连接:

无线网络参数:

网络名称(SSID)

安全模式

密钥()

TCP 连接参数

协议类型

连接类型()

目的 IP 地址

目的端口

串口参数

波特率

数据位

检验位

停止位

硬件流控

UART 成帧机制

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

成帧时间间隔为 20ms, 一帧上限值为 2KB。

无线遥控应用

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

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

远程连接应用

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

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

透明串口

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

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

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

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

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

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

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

9. 模式的配置

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

AT+=2 开启 AP 模式

AT+RST 重启指令,设置新的工作模式后需重启才能生效。我的模块不需要这条指令也行

AT+CWSAP=“”,“”,11,0 设置模块的 wifi 、密码、通道号、加密方式

AT+=1 打开多连接

AT+=1,8899 设置模块服务器端口,连接模块建立的无线网.打开手机网络调试助手,在tcp 模式下,输入模块的 ip 和设置的端口。如图模块默认的 ip 为 192.168.4.1,端口为自己设定的 8899(默认的为 333) .

AT+=0,10 进入数据发送模式为十个字节

> 进入发送模式

发送的 10 个数据

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

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

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

执行到第5条AT+=1,8899指令后,就可以打开手机连接这个热点了。

连上后,打开手机上的网络调试助手app,在下面第二幅图片中的IP是服务器的IP。我们可以发送AT+CIFSR指令查看服务器IP,然后输入到第二幅图的IP栏,端口号是我们在上面的指令中自己设置的,设置完成后点击。

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

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

完成上述操作后,串口调试助手会显示“0,”其中0表示连入的这个的id,指令AT+=0,10中的0就是指的这个客户端,给它发10字节数据

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

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

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

AT+=2 设置AP模式

AT+CWSAP=“”,“”,11,0 设置模块的 wifi 、密码、通道号、加密方式

AT+=1 开启多连接模式

AT+=2,“TCP”,“192.168.4.2”,8081 手机网络调试助手tcp 模式下 ip 192.168.4.2 和端口 8081,先设置再去查看监听,设置成功后再通过串口发送这条指令进行连接。

AT+=2,6 向服务器发送6字节数据

> 进入发送模式

发送的6字节数据

9.3 模块+模式下做tcp

AT+=3 设置 AP 和 STA 共存模式

AT+RST 重启指令,设置新的工作模式后需重启才能生效,我的模块不需要这条指令

AT+CWLAP 查询附近 wifi

AT+CWJAP=“1”,“” 连接附近知道密码的wifi

AT+CIFSR 查看路由器分配的 IP,例如 192.168.4.1

AT+=1 打开多连接

AT+=1,8899 设置模块服务器端口,端口 8899(默认的为 333),打开手机网络调试助手,在tcp 模式下连接模块的 ip 和端口号。

AT+=0,10 进入数据发送模式为十个字节

> 进入发送模式

发送的 10 个数据

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

执行AT+=1,8899指令后,就可以打开手机连接热点。那么我们是连接热点“”还是热点“1”呢?

我们输入指令AT+CIFSR得到以下信息:

+CIFSR:APIP,“192.168.4.1”

+CIFSR:APMAC,“1a:fe:34:0a:54:97”

+CIFSR:STAIP,“192.168.1.102”

+CIFSR:,“18:fe:34:0a:54:97”

从这些信息中,我们可以知道当我们连接热点“”时,我们打开手机网络调试助手,在tcp 模式下,这时我们输入服务器ip就是192.168.4.1,端口号8899。

当我们连接的热点是“1”时,在tcp 模式下,我们输入服务器IP就是192.168.1.102,端口号8899。

连上后,打开手机上的网络调试助手app

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

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

完成上述操作后,串口调试助手会显示“0,”其中0表示连入的这个的id,指令AT+=0,10中的0就是指的这个客户端,给它发10字节数据

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

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

AT+=3 设置 AP 和 STA 共存模式

AT+RST 重启指令,设置新的工作模式后需重启才能生效,我的模块不需要这条指令

AT+CWLAP 查询附近 wifi

AT+CWJAP=“1”,“” 连接附近你知道密码的 wifi

AT+CIFSR 查看路由器分配的 IP,例如 192.168.4.1

AT+=0 设置单连接

AT+=1 设置透传模式

AT+=“TCP”,“192.168.1.101”,8890 手机 端的 ip 192.168.1.101 和端口 8890,先设置再去查看监听,设置成功后再通过串口去发送连接指令进行连接。

AT+ 开始发送数据

> 进入发送模式

+++ 注意退出透传,直接发送。取消发送新行

注意透传只能在单连接模式下进行,所以在建立连接之前一定要用(AT+=0

设置单连接),但是模块处于服务器模式下时,必须要多链接,由于冲突,所以模块开启服务器模式不能做 tcp 透传!

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

当执行到第7条AT+AT+=1指令时,这时手机连接热点名为“1”,密码为“”的热点。

再接着打开手机上的网络调试助手app,在tcp 模式下,我们把端口设置为8890,然后点击“”,点击后变为下面的第二个界面。

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

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

然后,接着发第8、9、10条指令,网络调试助手app发8266:

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

要退出透传的话,把“发送新行”前的对号去掉,然后发送第10条指令。

9.5 模块模式下做tcp

AT+ =1 开启模式

AT+CWJAP=”1”,”” 加入无线网络

AT+=1 开多连接模式

AT+=1,8081 创建服务器

AT+CIFSR 查看本地IP地址

AT+=0,6 给ID为0的客户端发6个字节数据

> 进入发送模式

发送的数据

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

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

9.6 模块模式下做tcp

AT+ =1 开启模式

AT+CWJAP=”1”,”” 加入无线网络

AT+=1 开多连接模式

AT+=2,”TCP”,”192.168.1.101”,8088 建立TCP连接,在执行这条指令之前,先在网络调试助手tcp 模式下,创建服务器。

AT+=2,6 给服务器2,发6字节数据

> 发送数据模式

发送的数据

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

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

代码部分:

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;
}

模式的main.c文件

#include 
#include  // 在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;
	}
}

+模式的main.c文件

#include 
#include  // 在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(版本)、网络调试助手(PC版本)、烧录WiFi固件工具四个软件的下载地址:

你可能感兴趣的