Одна esp работает в режиме SOFTAP и раздает сеть, вторая должна к ней подключиться, но наотказ отказывается ее видеть. Компьютер и телефон прекрасно подключаются.
Не буду долго ходить вокруг да около...
Код подключающейся esp:
В user_init устанавливается таймер на вызов WIFI_connect() через 200мс.
Код раздающей esp:
В user_init также устанавливается таймер на SOFTAP_create()
Не буду долго ходить вокруг да около...
Код подключающейся esp:
Код:
LOCAL void ICACHE_FLASH_ATTR scan_done_cb(void *arg, STATUS status)
{
if(status == OK)
{
#ifdef DEBUG
os_printf("Scan done\r\n");
#endif // DEBUG
struct bss_info *info = (struct bss_info*)arg;
while(info != NULL)
{
#ifdef DEBUG
os_printf("SSID: %s\tChannel: %d\r\n", info->ssid, info->channel);
#endif // DEBUG
info = info->next.stqe_next;
}
}
}
LOCAL bool ICACHE_FLASH_ATTR WIFI_init(void)
{
struct station_config st_conf; // = //(struct station_config*)os_zalloc(sizeof(station_config));
char ssid[32] = ACCESS_POINT_SSID;
char pwd[64] = ACCESS_POINT_PWD;
os_memcpy(&st_conf.ssid, ssid, 32);
os_memcpy(&st_conf.password, pwd, 64);
st_conf.bssid_set = 0;
if(!wifi_set_opmode(STATION_MODE))
{
#ifdef DEBUG
os_printf("Failed to set opmode\r\n");
#endif // DEBUG
}
if(!wifi_set_channel(ACCESS_POINT_CHANNEL))
{
#ifdef DEBUG
os_printf("Failed to set channel\r\n");
#endif // DEBUG
return false;
}
if(!wifi_station_set_config(&st_conf))
{
#ifdef DEBUG
os_printf("Failed to set config\r\n");
#endif // DEBUG
return false;
}
return true;
}
LOCAL void ICACHE_FLASH_ATTR WIFI_start_scan(void)
{
struct scan_config conf;
conf.ssid = ACCESS_POINT_SSID;
conf.bssid = NULL;
conf.channel = ACCESS_POINT_CHANNEL;
conf.show_hidden = TRUE;
wifi_station_scan(&conf, scan_done_cb);
}
void ICACHE_FLASH_ATTR WIFI_connect(void)
{
if(!WIFI_init())
{
#ifdef DEBUG
os_printf("Initialization failed\r\n");
#endif // DEBUG
}
WIFI_start_scan();
/*
if(!wifi_station_connect())
{
#ifdef DEBUG
os_printf("Failed to connect\r\n");
#endif // DEBUG
}*/
}
Код раздающей esp:
Код:
LOCAL void ICACHE_FLASH_ATTR softap_init(void)
{
char ssid[32] = ACCESS_POINT_SSID;
char pwd[64] = ACCESS_POINT_PWD;
struct softap_config ap_config;
ap_config.authmode = AUTH_WPA2_PSK;
ap_config.ssid_len = 32;
os_memcpy(&ap_config.ssid, ssid, 32);
os_memcpy(&ap_config.password, pwd, 64);
ap_config.channel = ACCESS_POINT_CHANNEL;
wifi_set_opmode(SOFTAP_MODE);
if(!wifi_softap_set_config(&ap_config))
{
#ifdef DEBUG
os_printf("\r\nError while setting AP config\r\n");
#endif // DEBUG
}
}
LOCAL void ICACHE_FLASH_ATTR set_station_info(void)
{
struct ip_info info;
info.gw.addr = ipaddr_addr(ACCESS_POINT_IP);
info.ip.addr = ipaddr_addr(ACCESS_POINT_IP);
info.netmask.addr = ipaddr_addr(ACCESS_POINT_NETMASK);
if(!wifi_set_ip_info(SOFTAP_IF, &info))
{
#ifdef DEBUG
os_printf("\r\nError while trying to set ip info\r\n");
#endif // DEBUG
}
}
LOCAL void ICACHE_FLASH_ATTR set_dhcp_lease(void)
{
const char* start_ip = "192.168.0.1";
const char* end_ip = "192.168.0.255";
struct dhcps_lease lease;
lease.start_ip.addr = ipaddr_addr(start_ip);
lease.end_ip.addr = ipaddr_addr(end_ip);
if(!wifi_softap_set_dhcps_lease(&lease))
{
#ifdef DEBUG
os_printf("Error while trying to set DHCP lease\r\n");
#endif // DEBUG
}
}
void ICACHE_FLASH_ATTR SOFTAP_create(void)
{
softap_init();
if(!wifi_softap_dhcps_stop())
{
#ifdef DEBUG
os_printf("\r\nError while trying to stop DHCP\r\n");
#endif // DEBUG
}
set_station_info();
set_dhcp_lease();
if(!wifi_softap_dhcps_start())
{
#ifdef DEBUG
os_printf("\r\nError while trying to start DHCP\r\n");
#endif // DEBUG
}
TCP_accept();
}