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域名系统中详细介绍,此处不做详细说明。大家如果想要了解请点击一下连接查看。
现象
下载程序,打开串口调试助手,复位ESP8266。串口助手可接收一下数据。
ESP8266显示处于STA模式,所分配得IP地址为192.168.43.130
可以查看一下电脑所分配得IP地址,因为她们连接得是一个网络(都是我手机得热点)
电脑和ESP8266位于同一个网段。由以上现象可知,ESP8266得STA模式设置成功。