STM32连接WIFI-ESP8266实战---AP模式运用

1.ESP8266 WIFI模块初解?

   ESP8266 是一种采用串口与 MCU(或其他串口设备)通信,内置 TCP/IP协议栈,能够实现串口与 WIFI 之间的转换的模块。该模块只需要简单的串口配置,便可通过网络(WIFI)传输自己的数据,同时支持多种模式的数据传输方案。

2.ESP8266 WIFI模块三种模式

   该模块支持三种数据传输模式,即:串口转WIFI STA模式、串口转AP模式和WIFI STA+WIFI AP共存模式。同时每种模式又包含三种子模式,即TCP服务器、TCP客户端和UDP模式。从而方便根据自己实际情况构建符合自己产品的数据传输方案,实现互联网传输数据。

3.小白入门AP模式运用

   这节先以AP模式运用入门来探究ESP8266模块使用。那何为AP模式呢? 简单来说就是ESP8266模块作为无线WIFI的热点,从而允许其他设备(如手机、电脑)搜索到模块的WIFI名字,再输入对应的WIFI密码,从而连接到ESP8266模块,便可实现手机等设备与ESP8266模块之间的无线(WIFI)数据互传。

3.1资源环境:

 ESP8266 WIFI模块一个

 STM32开发板(本例程采用STM32F103ZET6开发板)

 手机安装网络调试助手

3.2 ESP82266与开发板引脚连接说明:

ESP82266   开发板引脚

VCC    ------    5V

GND   ------    GND

TXD    ------    PB11

RXD    ------    PB10

RST    ------     PA4(可不接)

IO_0   ------     PA15(可不接)

3.3 AP模式基本配置说明:

TCP 服务器配置:

TCP 客户端配置

UDP模式配置

3.4具体操作说明:

3.4.1 下载程序到开发板,开机进入如下初始界面,先从EEPROM 24C02中读取上一次配置的wifi的用户名和密码,同时加载显示wifi模块一些版本信息:

部分代码:

AT24CXX_Read(WIFIAPSSIDADDR,(u8*)wifiap_ssid,strlen((const char*)wifiap_ssid)); //从24c02读取esp8266 ssid
AT24CXX_Read(WIFIAPPASIDADDR,(u8*)wifiap_password,strlen((const char*)wifiap_password)); //从24c02读取esp8266密码

void atk_8266_msg_show(u16 x,u16 y,u8 wanip)
{
	u8 *p,*p1,*p2;
	p=mymalloc(SRAMIN,32);							//申请32字节内存
	p1=mymalloc(SRAMIN,32);							//申请32字节内存
	p2=mymalloc(SRAMIN,32);							//申请32字节内存
	POINT_COLOR=BLUE;
	atk_8266_send_cmd("AT+CWMODE=2","OK",20);
	atk_8266_send_cmd("AT+RST","OK",20);
	delay_ms(1000);//延时4s等待模块重启
	delay_ms(1000);//
	delay_ms(1000);
	delay_ms(1000);
	sprintf((char*)p,"AT+CWSAP=\"%s\",\"%s\",1,4",wifiap_ssid,wifiap_password);    //配置模块AP模式无线参数
	atk_8266_send_cmd(p,"OK",1000);
	if(wanip==0)//全更新
	{
		atk_8266_send_cmd("AT+GMR","OK",20);		//获取固件版本号
		p=atk_8266_check_cmd("SDK version:");
		Show_Str(x,y,240,24,"固件版本:",24,0);Show_Str(x+172,y,240,24,p,24,0);
		atk_8266_send_cmd("AT+CWMODE?","+CWMODE:",20);	//获取网络模式
		p=atk_8266_check_cmd(":");
		Show_Str(x,y+30,240,24,"网络模式:",24,0);Show_Str(x+172,y+30,240,24,(u8*)ATK_ESP8266_CWMODE_TBL[*(p+1)-'1'],24,0);
  	atk_8266_send_cmd("AT+CWSAP?","+CWSAP:",20);	//获取wifi配置
		p=atk_8266_check_cmd("\"");
		p1=(u8*)strstr((const char*)(p+1),"\"");
		p2=p1;
		*p1=0;
		Show_Str(x,y+60,240,24,"SSID号:",24,0);Show_Str(x+172,y+60,240,24,p+1,24,0);
		p=(u8*)strstr((const char*)(p2+1),"\"");
		p1=(u8*)strstr((const char*)(p+1),"\"");
		p2=p1;
		*p1=0;		
		Show_Str(x,y+90,240,24,"密码:",24,0);Show_Str(x+172,y+90,240,24,p+1,24,0);
		p=(u8*)strstr((const char*)(p2+1),",");
		p1=(u8*)strstr((const char*)(p+1),",");
		*p1=0;
		Show_Str(x,y+120,240,24,"通道号:",24,0);Show_Str(x+172,y+120,240,24,p+1,24,0);
		Show_Str(x,y+150,240,24,"加密方式:",24,0);Show_Str(x+172,y+150,240,24,(u8*)ATK_ESP8266_ECN_TBL[*(p1+1)-'0'],24,0);
	}
	myfree(SRAMIN,p);		//释放内存 
	myfree(SRAMIN,p1);		//释放内存 
	myfree(SRAMIN,p2);		//释放内存 
}

3.4.2 若想更改对应的ssid或密码,则点击修改,弹出键盘,输入自己设定的ssid或密码,点击完成即可保存:

部分代码:

void esp8266_set(u16 keyx,u16 keyy,u16 contentx,u16 contenty,u8 *content)
{
 	u8 key;
	u8 len=0;			//内容长度 
	
	atk_8266_load_keyboard(keyx,keyy,0);			//显示键盘 
	while(1)
	{ 
		key=atk_8266_get_keynum(keyx,keyy);
		if(key)
		{   
			if(key==30) 
			{
				keybodsel=!keybodsel;
				atk_8266_load_keyboard(keyx,keyy,keybodsel);	
			}
			if(key==39) 
			{
				keybodsel=2;
				atk_8266_load_keyboard(keyx,keyy,keybodsel);
			}	
			if(key<41 && key!=39 &&key!=38 &&key!=30)
			{
				if(len<20) //最长可输入20个字符
				{ 
					content[len++]=(*kbdsc_tbl[keybodsel][key-1]); 
				}
			}else
			{
				if(key==38)if(len)len--;	//删除  
				if(key==42 || key==41) //确认返回,取消键盘
        {
					LCD_Fill(keyx,keyy-10,keyx+480,keyy+252,WHITE);
				  break;
				  
				}		
			} 
			content[len]=0; 
			LCD_Fill(contentx,contenty+5,contentx+191,contenty+28,WHITE);
			Show_Str(contentx,contenty+5,200,24,content,24,0);			//显示内容	
		} 
		delay_ms(10);
	}

}

3.4.3 接着点击进入实验,选择以下三种网络模式任一种进行实验测试:

3.4.4 这里我们选择"TCP服务器模式",这时状态会显示连接失败,因为还没有设备连接进来,接着打开我们手机的wifi,便可搜索到ESP8266, 点击连接:

 

部分代码:

atk_8266_send_cmd("AT+CWMODE=2","OK",20);
atk_8266_send_cmd("AT+RST","OK",20);
delay_ms(1000);//延时4s等待模块重启
delay_ms(1000);//
delay_ms(1000);
delay_ms(1000);
sprintf((char*)p,"AT+CWSAP=\"%s\",\"%s\",1,4",wifiap_ssid,wifiap_password);    //配置模块AP模式无线参数
atk_8266_send_cmd(p,"OK",1000);

/* TCP服务器模式配置 */
Show_Str_Mid(0,30,"ATK-ESP WIFI-AP 测试",16,240); 
Show_Str(30,50,200,16,"正在配置ATK-ESP模块,请稍等...",12,0);
atk_8266_send_cmd("AT+CIPMUX=1","OK",20);   //0:单连接,1:多连接
sprintf((char*)p,"AT+CIPSERVER=1,%s",(u8*)portnum);    //开启Server模式(0,关闭;1,打开),端口号为portnum
atk_8266_send_cmd(p,"OK",50);    

3.4.5 接着打开手机的网络调试助手,因为上步骤我们模块选择了TCP服务器模式,手机就选择tcp client模式,添加TCP服务器的ip地址和端口号,点击连接,连接成功后,便可以同模块之间互相通信了:

3.4.6开发板”TCP客户端”模式测试:

 手机打开网络调试助手,选择tcp server,点击配置,设备端口为“8086”(程序设定的)。激活成功后,可看到手机的ip地址

当开发板选择进入“TCP客户端”后,需要输入手机的ip地址,输入完连接手机成功后,进入图下的画面。

 

4.总结:

WIFI AP模式只是wifi其中一种模式的运用探索,更多的关于wifi的运用等待我们去学习掌握,并灵活运用,敬请期待下回分解。

  • 20
    点赞
  • 128
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值