1、AP(Access Point)访问接入点
ESP8266设置成AP模式,就等于了创建一个WiFi环境的无线局域网,知道这个WiFi名字和密码的终端设备就可以连接此WiFi;
可以想象,网络拓扑是星型,ESP8266在中间,四周连接不同的设备;
2、配置AP
#define ESP8266_AP_SSID "LOVEYOU"
#define ESP8266_AP_PASS "Be Happy"
//初始化AP模式,设置WiFi名和密码
void ICACHE_FLASH_ATTR AP_mode_init()
{
struct softap_config ap_config;
wifi_set_opmode(0x02); // 设置为AP模式,并保存到Flash
os_memset(&ap_config, 0, sizeof(struct softap_config)); // AP参数结构体 = 0
os_strcpy(ap_config.ssid,ESP8266_AP_SSID); // 设置SSID(将字符串复制到ssid数组)
os_strcpy(ap_config.password,ESP8266_AP_PASS); // 设置密码(将字符串复制到password数组)
ap_config.ssid_len=os_strlen(ESP8266_AP_SSID); // 设置ssid长度(和SSID的长度一致)
ap_config.channel=1; // 通道号1~13
ap_config.authmode=AUTH_WPA2_PSK; // 设置加密模式
ap_config.ssid_hidden=0; // 不隐藏SSID
ap_config.max_connection=4; // 最大连接数
ap_config.beacon_interval=100; // 信标间隔时槽100~60000 ms
wifi_softap_set_config(&ap_config); // 设置soft-AP,并保存到Flash
}
注意:加密方式是AUTH_WPA2_PSK,也就是要求密码长度是8~63ASCII码,如果你设置的密码长度小于8,则是默认的一个WiFi名称且没有密码的,如果你想设置一个没有密码的WiFi可以将authmode改为AUTH_OPEN;
3、查询ESP8266工作模式、IP地址、连接设备数量
os_timer_t timer_1s_cyc; //1s循环定时器
//1s更新一次信息,本机IP,连接数
void timer_callback()
{
struct ip_info IP_info;
u8 ip_dec[4];
u8 buffer[20];
// 查询并打印ESP8266的工作模式
switch(wifi_get_opmode()) // 输出工作模式
{
case 0x01: os_printf("\nESP8266_Mode = Station\n"); break;
case 0x02: os_printf("\nESP8266_Mode = SoftAP\n"); break;
case 0x03: os_printf("\nESP8266_Mode = Station+SoftAP\n"); break;
}
//AP模式下,默认开启DHCP,默认IP:192.168.4.1
//-----------------------------------------------------------------------------------
wifi_get_ip_info(SOFTAP_IF,&IP_info); // 参数2:IP信息结构体指针
//32位二进制IP地址,将它转换为点分十进制的形式
ip_dec[0] = IP_info.ip.addr; // 点分十进制IP
ip_dec[1] = IP_info.ip.addr>>8; // 点分十进制IP
ip_dec[2] = IP_info.ip.addr>>16; // 点分十进制IP
ip_dec[3] = IP_info.ip.addr>>24; // 点分十进制IP
// 打印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);
// 查询并打印接入此WIFI的设备数量
os_printf("Number of devices connected to this WIFI = %d\n",wifi_softap_get_station_num());
}
void ICACHE_FLASH_ATTR timer_init()
{
os_timer_disarm(&timer_1s_cyc);
os_timer_setfn(&timer_1s_cyc,timer_callback,NULL);
os_timer_arm(&timer_1s_cyc,1000,1);
}