STC8+ESP-01S(ESP8266)连接网址

目录

前言

材料

ESP-01S连接网页流程

一、ESP-01S初始化

一、设定一些重要的变量

二、初始化串口

三、整理上面代码,整合成函数(ESP-01S模块初始化)

二、相关函数准备

一、关于串口函数

二、关于数据校验

三、延时函数

三、连接上WIFI(热点)

四、连接上网址

五、运行测试

六、运行结果

总结


前言

主要记录下我学习ESP-01S的时候遇到的困难,和一些细节错误。供大家参考和借鉴。当时我在学时,我就一直在搜索百度,ESP-01S,是否能连接网页,因为我此前已经能用它连接WIFI和局域网信息交流。经过多次尝试,ESP-01S确实能连上WIFI后,从而访问网页。下面,就是演示过程。

材料

STC8A8K64S4A12核心板,ESP-01S,手机热点名称"K30",密码:"88888888"(假装有WIFI),测试网址:苏宁的一个时间网站(http://quan.suning.com/getSysTime.do),

此外,代码部分还会用到AT指令,这里不做过多描述。重在描述思路。

STC8A8K64S4A12核心板(只展示出ESP-01S所接引脚)

STC8+ESP-01S(ESP8266)连接网址_第1张图片

ESP-01S(正反照)

STC8+ESP-01S(ESP8266)连接网址_第2张图片

STC8+ESP-01S(ESP8266)连接网址_第3张图片

手机热点的设置

STC8+ESP-01S(ESP8266)连接网址_第4张图片

 苏宁时间网址

STC8+ESP-01S(ESP8266)连接网址_第5张图片

 

ESP-01S连接网页流程

一、ESP-01S初始化

一、设定一些重要的变量

#define u8 unsigned char
#define u16 unsigned int
#define u32 unsigned long

#define S2RI  0x01              //S2CON.0
#define S2TI  0x02              //S2CON.1

#define tbuf 100				//数据数组长度

extern u8 xdata RX_buffer[tbuf];	//接收数据
extern u8 RX_num;				 	//接收计数变量

二、初始化串口

这里初始化串口了两个串口,一个用于单片机与ESP-01S的通信,一个用于返回数据到电脑串口上,方便调试。

//初始化串口
void ESP8266_UartInit()
{
	SCON = 0x50;		//8位数据,可变波特率
	AUXR |= 0x40;		//定时器1时钟1为FOSC,即1T
	AUXR &= 0xFE;		//串口1选择定时器1为波特率发生器
	TMOD &= 0x0F;		//设定定时器1工作模式0 为16位自动重装方式
    TL1=(65536-(11059200/4/9600));    //设置定时初值
	TH1=(65536-(11059200/4/9600))>>8; //设置定时初值
	TR1 = 1;		//启动定时器1

	S2CON = 0x50;		//8位数据,可变波特率
	AUXR |= 0x04;		//定时器2时钟1为FOSC,即1T
    T2L=(65536-(11059200/4/115200));    //设置定时初值
	T2H=(65536-(11059200/4/115200))>>8; //设置定时初值
	AUXR |= 0x10;		//启动定时器2
	
	ES = 1;              // 串口1中断打开
	IE2 = 0x01;          // 串口2中断打开
	EA = 1;              // 总中断打开
	
}

三、整理上面代码,整合成函数(ESP-01S模块初始化)

//ESP8266模块初始化
void ESP8266_Init()
{
	ESP8266_UartInit();
	ESP8266_Delayms(2000);		 //等待ESP8266启动
	memset(RX_buffer, 0, tbuf);//清缓存数据
	RX_num=0;				   //接收计数变量清0
}

二、相关函数准备

一、关于串口函数

关于字节发送和接收,还有中断事件的。

//串口1发送串口数据(字节)
void ESP8266_U1_byte(u8 Data)
{
	SBUF = Data;
	while(TI == 0);
	TI = 0;
}

//串口1发送字符串
void ESP8266_U1_str(u8 *str)
{
	while(*str)
	{
		ESP8266_U1_byte(*str);
		str++;
	}
}


//串口2发送串口数据(字节)
void ESP8266_U2_byte(u8 Data)
{
    S2BUF = Data;                 //写数据到UART2数据寄存器
	while(!(S2CON&S2TI));    
    S2CON&=~S2TI;
}

//串口2发送字符串
void ESP8266_U2_str(u8 *s)
{
 IE2 = 0x00; 
	while (*s)                  //检测字符串结束标志
    {
       ESP8266_U2_byte(*s++);     //发送当前字符
    }
 IE2 = 0x01;
}


u8 RX_num=0;   //接收计数变量

//串口1中断
void Uart1() interrupt 4 using 1
{
	ES = 0;		   //关闭串口1中断
	if (RI)
    {
      RI = 0;                 //清除RI位
			RX_buffer[RX_num] = SBUF; 
			RX_num++;               
			if(RX_num>tbuf) RX_num = 0;
				          

    }
    if (TI)
    {
        TI = 0;                 //清除TI位

    }
		ES =  1;	  //开启串口1中断

}

//串口2中断
void Uart2() interrupt 8 using 1
{

		IE2 = 0x00;		  //关闭串口2中断
    if (S2CON & S2RI)
    {
        S2CON &= ~S2RI;         
				RX_buffer[RX_num] = S2BUF; 
				RX_num++;               
				if(RX_num>tbuf) RX_num = 0;  
    }
    if (S2CON & S2TI)
    {
        S2CON &= ~S2TI;            
    }
		IE2 = 0x01;		//开启串口2中断

}

二、关于数据校验

比较返回值和预测值是否一致。

//校验处理返回数据
void ESP8266_RECMD(u8 *restr)
{
	while(1)
		{
			if(ESP8266_in_re(restr)==1) {ESP8266_U1_str(RX_buffer);break;}

		}
		memset(RX_buffer, 0, tbuf);//清缓存数据
		RX_num=0;				   //接收计数变量清0		
}


//指定字符串与缓存数组数据进行数据比较
//*p 要比较的指定字符串指针数据
//返回:1 数据一致  0 数据不一致 
//输入数据与接收数据比较
u8 ESP8266_in_re(u8 *p)		
{ 
    if(strstr(RX_buffer,p)!=NULL)
	    return 1;
	else
		return 0;
}

三、延时函数

基于11.0592MHz下延时

//@11.0592MHz  1ms
void ESP8266_Delayms(u16 num)		
{
	unsigned char i, j;
	while(num--)
	{
		i = 15;
		j = 90;
		do
		{
			while (--j);
		} while (--i);
	}

}

三、连接上WIFI(热点)

编写AT指令与ESP-01S通信

以下用了三条AT指令:

AT 测试AT启动                                        响应则返回:OK

AT+CWMODE 选择 WIFI 应用模式        设置成功则返回:OK

AT+CWJAP 加入 AP(连接WIFI)         连接成功则返回:OK

//连接WIFI
void ESP8266_COM_WIFI()
{
	ESP8266_U2_str("AT\r\n");
	ESP8266_RECMD("OK");		//校验处理返回数据
	ESP8266_U2_str("AT+CWMODE=1\r\n");
	ESP8266_RECMD("OK");
	ESP8266_U2_str("AT+CWJAP=\"K30\",\"88888888\"\r\n");
	ESP8266_RECMD("OK");
}

四、连接上网址

编写AT指令,指挥ESP-01S连接网页

以下用了三条AT指令:

AT+CIPMUX 启动多连接

AT+CIPSTART 建立 TCP 连接或注册 UDP 端口号

AT+CIPSEND 发送数据

下面发送数据,重复发送数据。也不知道为什,当时就发一次,怎么都发不出,找了好久都找不到问题,后来,偶然发现在多发一遍数据就行了。

下面数据处理时,用到C语言库,记得导入。

到苏宁时间网站按F12,录制活动就能找到网页是通过GET方式提交222.218.83.240,响应,返回数据内容。

//连接网址
void ESP8266_COM_TCP()
{
	ESP8266_U2_str("AT+CIPMUX=0\r\n");
	ESP8266_RECMD("OK");		//校验处理返回数据
	ESP8266_U2_str("AT+CIPSTART=\"TCP\",\"222.218.83.240\",80\r\n");
	ESP8266_RECMD("OK");
	ESP8266_U2_str("AT+CIPSEND=50\r\n");
	ESP8266_RECMD(">");
	ESP8266_U2_str("GET http://quan.suning.com/getSysTime.do\r\n");
	ESP8266_U2_str("GET http://quan.suning.com/getSysTime.do\r\n");
	ESP8266_RECMD("SEND OK");
	while(1){if(strlen(RX_buffer)>=3) {ESP8266_U1_str(RX_buffer);break;}}
	//while(1){if(IE2 =0x00) break;};
}

五、运行测试

主函数运行测试

void main()
{
	ESP8266_Init();	
	
	while(1)
	{
		ESP8266_COM_WIFI();
		ESP8266_COM_TCP();
	}
	
}

六、运行结果

成功返回网址数据

STC8+ESP-01S(ESP8266)连接网址_第6张图片

 

总结

ESP-01S确实能连接网页,但步骤有点繁琐,而且在调试时串口经常莫名的卡崩,程序执行完后又会重来,也不太清楚哪里有问题,这个模块我也只是玩了几天后,就不打算在深入了解了,因为要弄联网的建议还是用ESP32。

我编写ESP-01S的文件:

链接:https://pan.baidu.com/s/1naO9_HbH2inwb3PkwgvSXQ?pwd=1234 
提取码:1234

你可能感兴趣的:(STC8模块,c语言,单片机,51单片机)