学习日记——如何将ESP8266设置成STA模式(2020.7.23)

AP和STA模式

1、基本概念

  • AP,也就是无线接入点,是一个无线网络的创建者,是网络的中心节点。一般家庭或办公室使用的无线路由器就是一个AP。 在这里插入图片描述

  • STA站点,每一个连接到无线网络中的终端(如笔记本电脑、PDA及其它可以联网的用户设备)都可称为一个站点。
    在这里插入图片描述

2、网络构建

  • 基于AP组建的基础无线网络Infra: 也称为基础网, 是由AP创建, 众多STA加入所组成的无线网络, 这种类型的网络的特点是AP是整个网络的中心, 网络中所有的通信都通过AP来转发完成。
  • 基于自组网的无线网络(Adhoc):Adhoc:也称为自组网,是仅由两个及以上STA自己组成,网络中不存在AP,这种类型的网络是一种松散的结构,网络中所有的STA都可以直接通信。

例程(如何设置STA模式)

void ICACHE_FLASH_ATTR user_init(void)
{
	uart_init(115200,115200);	// 初始化串口波特率
	os_delay_us(10000);			// 等待串口稳定
	// OLED初始化
	OLED_Init();							// 
	OLED_ShowString(0,0,"ESP8266 = STA");	// 
	OLED_ShowString(0,2,"IP:");				// 
	LED_Init_JX();		// LED初始化
	ESP8266_STA_Init_JX();			// ESP8266_STA初始化
	OS_Timer_1_Init_JX(1000,1);		// 定时查询WIFI接入状态
}

在初始化函数,调用函数将ESP8266初始化为STA模式。并设置STA相关参数
首先调用这个API👉wifi_set_opmode(0x01)参数设为1,将ESP8266设置为STA模式
我们将接入的wifi名和wifi密码都是用宏定义表示的。我们将wifi名和wifi密码赋值给相应的成员。然后通过此API👉wifi_station_set_config(&STA_Config)设置STA的相关参数。(注意这个参数是STA参数结构体指针)所以我们需要定义一个STA参数结构体

void ICACHE_FLASH_ATTR ESP8266_STA_Init_JX()
{
	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地址
	*/
	//大家可以选择是否设置静态IP,也可以不设置静态IP,由8266自动获取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,不能在初始化中调用的。
}

STA结构体

struct station_config {
    uint8 ssid[32];//存放我们将定义的wifi局域网的wifi名
    uint8 password[64];//这个是wifi密码
    uint8 bssid_set;//一般设置为0,仅当需要检查AP的MAC地址时设为1(有多个重名AP时)
    uint8 bssid[6];//设置我们将要连接的MAC地址,来保证我们连接到正确的ap。一般情况下设为0
    wifi_fast_scan_threshold_t threshold;//信号强度和加密模式
};

设置完ESP8266的STA之后呢,设置1秒钟的重复定时。在下面的定时回调函数当中,我们判断ESP8266是否获得IP地址。如果成功获取到IP地址,我们将获取并打印ESP8266的IP地址。之后LED快闪三次。并且在之后关闭定时器

void ICACHE_FLASH_ATTR OS_Timer_1_cb(void)
{
	u8 C_LED_Flash = 0;				// LED闪烁计次
	u8 S_WIFI_STA_Connect;			// WIFI接入状态标志
	struct ip_info ST_ESP8266_IP;	// ESP8266的IP信息
	u8 ESP8266_IP[4];				// ESP8266的IP地址
	// 查询STA接入WIFI状态
	S_WIFI_STA_Connect = wifi_station_get_connect_status();
	// Station连接状态表
	// 0 == STATION_IDLE -------------- STATION闲置
	// 1 == STATION_CONNECTING -------- 正在连接WIFI
	// 2 == STATION_WRONG_PASSWORD ---- WIFI密码错误
	// 3 == STATION_NO_AP_FOUND ------- 未发现指定WIFI
	// 4 == STATION_CONNECT_FAIL ------ 连接失败
	// 5 == STATION_GOT_IP ------------ 获得IP,连接成功
	switch(S_WIFI_STA_Connect)
	{
		case 0 : 	os_printf("\nSTATION_IDLE\n");				break;
		case 1 : 	os_printf("\nSTATION_CONNECTING\n");		break;
		case 2 : 	os_printf("\nSTATION_WRONG_PASSWORD\n");	break;
		case 3 : 	os_printf("\nSTATION_NO_AP_FOUND\n");		break;
		case 4 : 	os_printf("\nSTATION_CONNECT_FAIL\n");		break;
		case 5 : 	os_printf("\nSTATION_GOT_IP\n");			break;
	}

	// 成功接入WIFI【STA模式下,如果开启DHCP(默认),则ESO8266的IP地址由WIFI路由器自动分配】
	if( S_WIFI_STA_Connect == STATION_GOT_IP )	// 判断是否获取IP
	{
		// 获取ESP8266_Station模式下的IP地址
		// DHCP-Client默认开启,ESP8266接入WIFI后,由路由器分配IP地址,IP地址不确定
		wifi_get_ip_info(STATION_IF,&ST_ESP8266_IP);	// 参数2:IP信息结构体指针
		// ESP8266_AP_IP.ip.addr是32位二进制代码,转换为点分十进制形式
		ESP8266_IP[0] = ST_ESP8266_IP.ip.addr;		// IP地址高八位 == addr低八位
		ESP8266_IP[1] = ST_ESP8266_IP.ip.addr>>8;	// IP地址次高八位 == addr次低八位
		ESP8266_IP[2] = ST_ESP8266_IP.ip.addr>>16;	// IP地址次低八位 == addr次高八位
		ESP8266_IP[3] = ST_ESP8266_IP.ip.addr>>24;	// IP地址低八位 == addr高八位

		// 显示ESP8266的IP地址
		os_printf("ESP8266_IP = %d.%d.%d.%d\n",ESP8266_IP[0],ESP8266_IP[1],ESP8266_IP[2],ESP8266_IP[3]);
		OLED_ShowIP(24,2,ESP8266_IP);	// OLED显示ESP8266的IP地址
		// 接入WIFI成功后,LED快闪3次
		for(; C_LED_Flash<=5; C_LED_Flash++)
		{
			GPIO_OUTPUT_SET(GPIO_ID_PIN(4),(C_LED_Flash%2));
			delay_ms(100);
		}
		os_timer_disarm(&OS_Timer_1);	// 关闭定时器
	}
}

注意事项

设置STA模式也需要连接网络,此步骤我已在DNS域名系统中详细介绍,此处不做详细说明。大家如果想要了解请点击一下连接查看。
https://blog.csdn.net/quanqueen/article/details/107307277

现象

下载程序,打开串口调试助手,复位ESP8266。串口助手可接收一下数据。
在这里插入图片描述
ESP8266显示处于STA模式,所分配得IP地址为192.168.43.130
在这里插入图片描述
可以查看一下电脑所分配得IP地址,因为她们连接得是一个网络(都是我手机得热点)
在这里插入图片描述
电脑和ESP8266位于同一个网段。由以上现象可知,ESP8266得STA模式设置成功。

参考链接

https://www.bilibili.com/video/BV1dJ411S723?p=36

  • 4
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

热爱生活的fuyao

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值