前言
ESP8266设置为AP模式,建立WIFI局域网
一、思路
二、程序
串口OLED初始化
void ICACHE_FLASH_ATTR user_init(void)
{
uart_init(115200,115200); // 初始化串口波特率
os_delay_us(10000); // 等待串口稳定
os_printf("\r\n=================================================\r\n");
os_printf("\t Project:\t%s\r\n", ProjectName);
os_printf("\t SDK version:\t%s", system_get_sdk_version());
os_printf("\r\n=================================================\r\n");
// OLED初始化
//---------------------
OLED_Init(); // |
OLED_ShowString(0,0,"ESP8266 :"); // |
OLED_ShowString(0,2,"IP:"); // |
//---------------------
OLED_ShowCHinese(0,4,0);//OLED显示“连接设备数量”
OLED_ShowCHinese(18,4,1);
OLED_ShowCHinese(36,4,2);
OLED_ShowCHinese(54,4,3);
OLED_ShowCHinese(72,4,4);
OLED_ShowCHinese(90,4,5);
OLED_ShowCHinese(56,0,6);
OLED_ShowCHinese(74,0,7);
OLED_ShowCHinese(92,0,8);
OLED_ShowCHinese(114,0,9);
ESP8266_AP_Init(); // 设置ESP8266_AP模式相关参数
OS_Timer_1_Init(1000,1); // 1秒软件定时
设置AP模式相关参数
用到 的几个主要API
os_memset(void *s, int ch, size_t n) 将指定内存块清零
char os_strcpy(char *s1,const char *s2); 将参数2指向的字符串复制到参数一只想的地址处
os_strlen(char *s) 计算字符串长度
bool wifi_softap_set_config (struct softap_config *config) 设置AP模式参数,并保存到Flash
void ICACHE_FLASH_ATTR ESP8266_AP_Init()
{
struct softap_config AP_Config; // AP参数结构体
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
}
AP参数结构体
定时回调窗口打印信息
void ICACHE_FLASH_ATTR OS_Timer_1_cb(void)
{
struct ip_info ST_ESP8266_IP; // IP信息结构体
u8 ESP8266_IP[4]; // 点分十进制形式保存IP
// 查询并打印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;
}
// 获取ESP8266_AP模式下的IP地址
//【AP模式下,如果开启DHCP(默认),并且未设置IP相关参数,ESP8266的IP地址=192.168.4.1】
//-----------------------------------------------------------------------------------
wifi_get_ip_info(SOFTAP_IF,&ST_ESP8266_IP); // 参数2:IP信息结构体指针
// ESP8266_AP_IP.ip.addr==32位二进制IP地址,将它转换为点分十进制的形式
//------------------------------------------------------------------------------------------
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); // 显示ESP8266的IP地址
// 查询并打印接入此WIFI的设备数量
//-----------------------------------------------------------------------------------------
os_printf("Number of devices connected to this WIFI = %d\n",wifi_softap_get_station_num());
i=wifi_softap_get_station_num();
f[0]='0'+i;
OLED_ShowString(50,6,f);
}