1、初始化ESP8266_STA模式 

void ICACHE_FLASH_ATTR ESP8266_STA_Init()
{
	struct station_config STA_Config;	// STA参数结构体

	struct ip_info ST_ESP8266_IP;		// STA信息结构体

	// 设置ESP8266的工作模式
	//------------------------------------------------------------------------
	wifi_set_opmode(0x01);				// 设置为STA模式,并保存到Flash

	/*
	// 设置STA模式下的IP地址【ESP8266默认开启DHCP Client,接入WIFI时会自动分配IP地址】
	//--------------------------------------------------------------------------------
	wifi_station_dhcpc_stop();						// 关闭 DHCP Client
	IP4_ADDR(&ST_ESP8266_IP.ip,192,168,8,88);		// 配置IP地址
	IP4_ADDR(&ST_ESP8266_IP.netmask,255,255,255,0);	// 配置子网掩码
	IP4_ADDR(&ST_ESP8266_IP.gw,192,168,8,1);		// 配置网关地址
	wifi_set_ip_info(STATION_IF,&ST_ESP8266_IP);	// 设置STA模式下的IP地址
	*/

	// 结构体赋值,配置STA模式参数
	//-------------------------------------------------------------------------------
	os_memset(&STA_Config, 0, sizeof(struct station_config));	// STA参数结构体 = 0
	os_strcpy(STA_Config.ssid,ESP8266_STA_SSID);				// 设置WIFI名
	os_strcpy(STA_Config.password,ESP8266_STA_PASS);			// 设置WIFI密码

	wifi_station_set_config(&STA_Config);	// 设置STA参数,并保存到Flash


	// 此API不能在user_init初始化中调用
	// 如果user_init中调用wifi_station_set_config(...)的话,内核会自动将ESP8266接入WIFI
	//----------------------------------------------------------------------------------
	// wifi_station_connect();		// ESP8266连接WIFI
}

esp8266修改ip地址_IP

 

2、初始化网络连接(TCP通信)

void ICACHE_FLASH_ATTR ESP8266_NetCon_Init()
{
	// 结构体赋值
	//--------------------------------------------------------------------------
	ST_NetCon.type = ESPCONN_TCP ;				// 设置为TCP协议

	ST_NetCon.proto.tcp = (esp_tcp *)os_zalloc(sizeof(esp_tcp));	// 开辟内存

	// ESP8266作为TCP_Client,想要连接TCP_Server,必须知道TCP_Server的IP地址
	ST_NetCon.proto.tcp->local_port = espconn_port() ;	// 本地端口【获取可用端口】
	ST_NetCon.proto.tcp->remote_port = 80;				// 目标端口【HTTP端口号80】

	// 获取域名所对应的IP地址
	//【参数1:网络连接结构体指针 / 参数2:域名字符串指针 / 参数3:IP地址结构体指针 / 参数4:回调函数】
	espconn_gethostbyname(&ST_NetCon, DN_Server, &IP_Server, DNS_Over_Cb);

	// 注册连接成功回调函数、异常断开回调函数
	espconn_regist_connectcb(&ST_NetCon, ESP8266_TCP_Connect_Cb);	// 注册TCP连接成功建立的回调函数
	espconn_regist_reconcb(&ST_NetCon, ESP8266_TCP_Break_Cb);		// 注册TCP连接异常断开的回调函数

	// 连接 TCP server
	//espconn_connect(&ST_NetCon);	// 连接TCP-server
}

esp8266修改ip地址_esp8266修改ip地址_02

esp8266修改ip地址_回调函数_03

esp8266修改ip地址_TCP_04

esp8266修改ip地址_IP_05

esp8266修改ip地址_esp8266修改ip地址_06

 

3、DNS_域名解析结束_回调函数

【参数1:域名字符串指针 / 参数2:IP地址结构体指针 / 参数3:网络连接结构体指针】

void ICACHE_FLASH_ATTR DNS_Over_Cb(const char * name, ip_addr_t *ipaddr, void *arg)
{
	struct espconn * T_arg = (struct espconn *)arg;	// 缓存网络连接结构体指针

	if(ipaddr == NULL)		// 域名解析失败
	{
		os_printf("\r\n---- DomainName Analyse Failed ----\r\n");
		return;
	}
	else if (ipaddr != NULL && ipaddr->addr != 0)		// 域名解析成功
	{
		os_printf("\r\n---- DomainName Analyse Succeed ----\r\n");

		IP_Server.addr = ipaddr->addr;					// 获取服务器IP地址

		// 将解析到的服务器IP地址设为TCP连接的远端IP地址
		//------------------------------------------------------------------------------
		os_memcpy(T_arg->proto.tcp->remote_ip, &IP_Server.addr, 4);	// 设置服务器IP地址

		// 显示IP地址
		//------------------------------------------------------------------------------
		os_printf("\r\nIP_Server = %d.%d.%d.%d\r\n",						// 串口打印
				*((u8*)&IP_Server.addr),	*((u8*)&IP_Server.addr+1),
				*((u8*)&IP_Server.addr+2),	*((u8*)&IP_Server.addr+3));
		OLED_ShowIP(24,6,T_arg->proto.tcp->remote_ip);						// OLED显示
		//------------------------------------------------------------------------------

		// 连接 TCP server
		//----------------------------------------------------------
		espconn_connect(T_arg);	// 连接TCP-server
	}
}

 

4、TCP连接建立成功 or 失败

// TCP连接建立成功的回调函数
void ICACHE_FLASH_ATTR ESP8266_TCP_Connect_Cb(void *arg)
{
	espconn_regist_sentcb((struct espconn *)arg, ESP8266_WIFI_Send_Cb);			// 注册网络数据发送成功的回调函数
	espconn_regist_recvcb((struct espconn *)arg, ESP8266_WIFI_Recv_Cb);			// 注册网络数据接收成功的回调函数
	espconn_regist_disconcb((struct espconn *)arg,ESP8266_TCP_Disconnect_Cb);	// 注册成功断开TCP连接的回调函数
	os_printf("\n--------------- ESP8266_TCP_Connect_OK ---------------\n");
}


// TCP连接异常断开时的回调函数
void ICACHE_FLASH_ATTR ESP8266_TCP_Break_Cb(void *arg,sint8 err)
{
	os_printf("\nESP8266_TCP_Break\n");
	espconn_connect(&ST_NetCon);	// 连接TCP-server
}

esp8266修改ip地址_回调函数_07

esp8266修改ip地址_esp8266修改ip地址_08

 

5、数据发送 or 接收

// 成功发送网络数据的回调函数
void ICACHE_FLASH_ATTR ESP8266_WIFI_Send_Cb(void *arg)
{
	os_printf("\nESP8266_WIFI_Send_OK\n");
}

// 成功接收网络数据的回调函数【参数1:网络传输结构体espconn指针、参数2:网络传输数据指针、参数3:数据长度】
void ICACHE_FLASH_ATTR ESP8266_WIFI_Recv_Cb(void * arg, char * pdata, unsigned short len)
{
	os_printf("\nESP8266_Receive_Data = %s\n",pdata);		// 串口打印接收到的数据
}

// TCP连接断开成功的回调函数
void ICACHE_FLASH_ATTR ESP8266_TCP_Disconnect_Cb(void *arg)
{
	os_printf("\nESP8266_TCP_Disconnect_OK\n");
}