ESP8266_STA模式

1、AP、STA的含义

AP:Access Point,访问接入点,终端设备通过访问接入点接入网络,ESP8266在AP模式相当于创建了一个WiFi局域网;

STA:Station,站点,就是所谓的终端设备,ESP8266在STA模式是作为终端设备接入另一个WiFi;

2、设置ESP8266为STA模式

像手机、笔记本一样,接入WiFi,起码要知道WiFi名和密码;

还要配置IP地址、子网掩码、默认网关,不过默认启动DHCP可以自动获取IP等;

2.1、使能STA模式、配置WiFi名和密码

#define ESP8266_STA_SSID 		"402"
#define ESP8266_STA_PASS		"abc123456"

//初始化STA模式,设置WiFi名和密码
void ICACHE_FLASH_ATTR STA_mode_init()
{
	struct station_config sta_cfg;
	os_memset(&sta_cfg, 0, sizeof(struct station_config));	// 结构体清0

	wifi_set_opmode(0x01);									// 设置为STA模式,并保存到Flash

	os_strcpy(sta_cfg.ssid,ESP8266_STA_SSID);				// 设置SSID(将字符串复制到ssid数组)
	os_strcpy(sta_cfg.password,ESP8266_STA_PASS);			// 设置密码(将字符串复制到password数组)
	sta_cfg.bssid_set = 0;

	wifi_station_set_config(&sta_cfg);						//设置STA模式
}

2.2、初始化TCP通信

UDP、TCP的内容前篇已经介绍过,AP或STA模式与其无关,这里把ESP8266当做TCP的服务器端,注意,要在连接完WiFi之后再初始化TCP通信,可通过wifi_station_get_connect_status函数获取连接状态

os_timer_t timer_wifi_check;				//检测wifi连接成功的定时器

//检测wifi连接成功的定时器
void timer_wifi_check_callback()
{
	struct ip_info IP_info;
	u8 ip_dec[4];
	u8 buffer[20];	
	
	if( wifi_station_get_connect_status() == STATION_GOT_IP ){	// 判断连接状态,是否获取IP
		wifi_get_ip_info(STATION_IF,&IP_info);	
		//32位二进制IP地址,将它转换为点分十进制的形式
		ip_dec[0] = IP_info.ip.addr;
		ip_dec[1] = IP_info.ip.addr>>8;
		ip_dec[2] = IP_info.ip.addr>>16;
		ip_dec[3] = IP_info.ip.addr>>24;

		// 打印ESP8266的IP地址
		os_printf("ESP8266_IP = %d.%d.%d.%d\n",ip_dec[0],ip_dec[1],ip_dec[2],ip_dec[3]);
		os_sprintf(buffer,"IP:%d.%d.%d.%d",ip_dec[0],ip_dec[1],ip_dec[2],ip_dec[3]);
		oled_show_string(0,0,buffer,FONT_8x16);

		//初始化TCP
		TCP_port8266_init();

		//关闭定时器
		os_timer_disarm(&timer_wifi_check);
	}else{											//等待WiFi连接
		os_printf("connecting wifi ......\n");
	}
}

void ICACHE_FLASH_ATTR timer_init()
{
	os_timer_disarm(&timer_wifi_check);
	os_timer_setfn(&timer_wifi_check,timer_wifi_check_callback,NULL);
	os_timer_arm(&timer_wifi_check,1000,1);		//1s

}

3、下载、验证

在得知了ESP8266的IP之后,加上程序中写好的端口号,网络调试助手就作为客户端连接服务器,并发送数据了;

 作为服务器,当收到数据后你也可以加两行代码打印客户端的IP和端口,知道是谁给你发的;

void ICACHE_FLASH_ATTR TCP_recv_callback(void * arg, char * pdata, unsigned short len)
{
	struct espconn * T_arg = arg;		// 缓存网络连接结构体指针
	u8 client_ip[4];

	os_printf("\nESP8266_Receive_Data = %s\n",pdata);		// 串口打印接收到的数据

	os_memcpy(client_ip,T_arg->proto.tcp->remote_ip,4);
	os_printf("client ip:%d.%d.%d.%d,port:%d\n",client_ip[0],client_ip[1],client_ip[2],client_ip[3],T_arg->proto.tcp->remote_port);

	// 向对方发送应答
	espconn_send(T_arg,"ESP8266_TCP_Recv_OK",os_strlen("ESP8266_TCP_Recv_OK"));

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值