Unable to access AP mode after 5 cycle
Posted: Tue May 18, 2021 3:47 am
Hi genius,
Im using ESP8266 freertos sdk. esptool.py v2.4.0. Im using AP mode and HTTP server to access webpage. However, the webpage can only be access after 5 cycle. Seems like some socket is not properly closed and caused httprx_tx error. Below I describe my cycle.
1- Init AP mode & create webpage
2- Connect with PC
3- Submit Button
4- Deinit AP mode & delete webpage
5- Go to step 1
Below is my code
Below is httpd error printed in ESP log
Below is the full debug log
Thanks in advanced
Im using ESP8266 freertos sdk. esptool.py v2.4.0. Im using AP mode and HTTP server to access webpage. However, the webpage can only be access after 5 cycle. Seems like some socket is not properly closed and caused httprx_tx error. Below I describe my cycle.
1- Init AP mode & create webpage
2- Connect with PC
3- Submit Button
4- Deinit AP mode & delete webpage
5- Go to step 1
Below is my code
Code: Select all
//-------------------------------------------------------------------------------------
// Function :
// Description:
//-------------------------------------------------------------------------------------
uint8_t Wifi_Initialize_Process(void)
{
uint8_t ret = INITIALIZE_PROCESS;
if(Wifi.wIsChanged == WIFI_TO_AP)
{
Tcount_WifiAP = Wifi_AP_Interval;
Wifi.wMode = WIFI_MODEAP;
Wifi.wStatus = WIFI_APCONFIG;
Wifi.wIsChanged = WIFI_NO_CHANGE;
Initialise_wifi();
Wifi_Start_Ap();
#ifdef WIFI_USE_WEBPAGE
Wifi_Server_Create();
#endif
}
else
{
Wifi.wMode = WIFI_MODENONE;
Wifi.wStatus = WIFI_READY;
Wifi.wIsChanged = WIFI_NO_CHANGE;
Initialise_wifi();
}
ret = BACKGROUND_PROCESS;
#ifdef _DEBUG_
_DEBUG_("Wifi: INITIALIZE_PROCESS ok");
#endif
return ret;
}
//-------------------------------------------------------------------------------------
// Function :
// Description:
//-------------------------------------------------------------------------------------
void Initialise_wifi(void)
{
if(Wifi.wMode > WIFI_MODENONE)
{
esp_err_t err;
tcpip_adapter_init();
err = tcpip_adapter_dhcps_stop(TCPIP_ADAPTER_IF_AP);
if(err != ESP_OK)
{
#ifdef _DEBUG_
_DEBUG_("Wifi: tcpip_adapter_dhcps_stop() : %s", esp_err_to_name(err));
#endif
}
tcpip_adapter_ip_info_t ip_info;
IP4_ADDR(&ip_info.ip, Esp_Param.Ap_IP[0], Esp_Param.Ap_IP[1], Esp_Param.Ap_IP[2], Esp_Param.Ap_IP[3]);
IP4_ADDR(&ip_info.gw, Esp_Param.Ap_IP[0], Esp_Param.Ap_IP[1], Esp_Param.Ap_IP[2], Esp_Param.Ap_IP[3]);
IP4_ADDR(&ip_info.netmask, 255, 255, 255, 0);
#ifdef _DEBUG_
_DEBUG_("Wifi: ip_info.ip = " IPSTR, IP2STR(&ip_info.ip));
#endif
err = tcpip_adapter_set_ip_info(TCPIP_ADAPTER_IF_AP, &ip_info); //set static IP
if(err != ESP_OK)
{
#ifdef _DEBUG_
_DEBUG_("Wifi: tcpip_adapter_set_ip_info() : %s", esp_err_to_name(err));
#endif
}
err = tcpip_adapter_dhcps_start(TCPIP_ADAPTER_IF_AP);
if(err != ESP_OK)
{
#ifdef _DEBUG_
_DEBUG_("Wifi: tcpip_adapter_dhcps_start() : %s", esp_err_to_name(err));
#endif
}
err = esp_event_loop_create_default();
if(err != ESP_OK)
{
#ifdef _DEBUG_
_DEBUG_("Wifi: esp_event_loop_create_default() : %s", esp_err_to_name(err));
#endif
}
wifi_init_config_t cfg = WIFI_INIT_CONFIG_DEFAULT();
err = esp_wifi_init(&cfg);
if(err != ESP_OK)
{
#ifdef _DEBUG_
_DEBUG_("Wifi: esp_wifi_init() : %s", esp_err_to_name(err));
#endif
}
err = esp_wifi_set_storage(WIFI_STORAGE_RAM);
if(err != ESP_OK)
{
#ifdef _DEBUG_
_DEBUG_("Wifi: esp_wifi_set_storage() : %s", esp_err_to_name(err));
#endif
}
err = esp_event_handler_register(WIFI_EVENT, ESP_EVENT_ANY_ID, &event_handler, NULL);
if(err != ESP_OK)
{
#ifdef _DEBUG_
_DEBUG_("Wifi: esp_event_handler_register() : %s", esp_err_to_name(err));
#endif
}
err = esp_event_handler_register(IP_EVENT, ESP_EVENT_ANY_ID, &event_handler, NULL);
if(err != ESP_OK)
{
#ifdef _DEBUG_
_DEBUG_("Wifi: esp_event_handler_register() : %s", esp_err_to_name(err));
#endif
}
}
}
//-------------------------------------------------------------------------------------
// Function :
// Description:
//-------------------------------------------------------------------------------------
void DeInitialize_Wifi(void)
{
if(Wifi.wMode > WIFI_MODENONE)
{
esp_err_t err;
#ifdef WIFI_USE_WEBPAGE
Wifi_Server_Delete();
#endif
err = esp_event_handler_unregister(ESP_EVENT_ANY_BASE, ESP_EVENT_ANY_ID, &event_handler);
if(err != ESP_OK)
{
#ifdef _DEBUG_
_DEBUG_("Wifi: esp_event_handler_unregister() : %s", esp_err_to_name(err));
#endif
}
if(Wifi.wConnection == STA_CONNECTED)
{
err = esp_wifi_disconnect();
if(err != ESP_OK)
{
#ifdef _DEBUG_
_DEBUG_("Wifi: esp_wifi_disconnect() : %s", esp_err_to_name(err));
#endif
}
}
err = esp_wifi_stop();
if(err != ESP_OK)
{
#ifdef _DEBUG_
_DEBUG_("Wifi: esp_wifi_stop() : %s", esp_err_to_name(err));
#endif
}
err = esp_wifi_deinit();
if(err != ESP_OK)
{
#ifdef _DEBUG_
_DEBUG_("Wifi: esp_wifi_deinit() : %s", esp_err_to_name(err));
#endif
}
#ifdef _DEBUG_
_DEBUG_("Wifi: esp_wifi_stop() & esp_wifi_deinit()");
#endif
err = esp_event_loop_delete_default();
if(err != ESP_OK)
{
#ifdef _DEBUG_
_DEBUG_("Wifi: esp_event_loop_delete_default() : %s", esp_err_to_name(err));
#endif
}
#ifdef _DEBUG_
_DEBUG_("Wifi: esp_event_handler_unregister() & esp_event_loop_delete_default()");
#endif
}
}
//-------------------------------------------------------------------------------------
// Function :
// Description:
//-------------------------------------------------------------------------------------
void Wifi_Start_Ap()
{
esp_err_t err;
wifi_config_t wifi_config = {0};
memset(&wifi_config, 0 , sizeof(wifi_config));
wifi_config.ap.max_connection = 1;
wifi_config.ap.authmode = WIFI_AUTH_WPA2_PSK;
sprintf((char*)wifi_config.ap.ssid, Esp_Param.AP_Ssid);
sprintf((char*)wifi_config.ap.password, Esp_Param.AP_Pass);
err = esp_wifi_set_mode(WIFI_MODE_AP);
if(err != ESP_OK)
{
#ifdef _DEBUG_
_DEBUG_("Wifi: esp_wifi_set_mode() : %s", esp_err_to_name(err));
#endif
}
err = esp_wifi_set_config(ESP_IF_WIFI_AP, &wifi_config);
if(err != ESP_OK)
{
#ifdef _DEBUG_
_DEBUG_("Wifi: esp_wifi_set_config() : %s", esp_err_to_name(err));
#endif
}
err = esp_wifi_start();
if(err != ESP_OK)
{
#ifdef _DEBUG_
_DEBUG_("Wifi: esp_wifi_start() : %s", esp_err_to_name(err));
#endif
}
}
//-------------------------------------------------------------------------------------
// Function :
// Description:
//-------------------------------------------------------------------------------------
void Wifi_Server_Create(void)
{
if(server == 0)
{
httpd_config_t config = HTTPD_DEFAULT_CONFIG();
config.stack_size = Http_SERVER_Config_Stack_Size;
config.lru_purge_enable = true;
#ifdef _DEBUG_
_DEBUG_("HttpServer: Starting server");
#endif
if(httpd_start(&server, &config) != ESP_OK)
{
#ifdef _DEBUG_
_DEBUG_("HttpServer: COULD NOT START SERVER");
#endif
}
if(uri_handler_inited == 0)
{
uri_handler_inited = 1;
httpd_uri_t first_end_point_config = {
.uri = "/",
.method = HTTP_GET,
.handler = on_url_hit};
httpd_register_uri_handler(server,&first_end_point_config);
httpd_uri_t setwifi_end_point_config = {
.uri = "/api/setwifi",
.method = HTTP_POST,
.handler = on_setwifi_set};
httpd_register_uri_handler(server,&setwifi_end_point_config);
}
}
}
//-------------------------------------------------------------------------------------
// Function :
// Description:
//-------------------------------------------------------------------------------------
void Wifi_Server_Delete(void)
{
if(server != 0)
{
#ifdef _DEBUG_
_DEBUG_("HttpServer: Delete server");
#endif
esp_err_t err;
if(uri_handler_inited == 1)
{
uri_handler_inited = 0;
httpd_unregister_uri_handler(server, "/", HTTP_GET);
httpd_unregister_uri_handler(server, "/api/setwifi", HTTP_POST);
}
err = httpd_stop(server);
if(err != ESP_OK)
{
#ifdef _DEBUG_
_DEBUG_("Wifi: httpd_stop() : %s", esp_err_to_name(err));
#endif
}
server = 0;
}
}
(11:37:50.392) W (197233) httpd_txrx: httpd_sock_err: error in send : 0<CR><LF>
Below is the full debug log
(11:37:25.758) I (170692) Main: Exit config<CR><LF>
(11:37:25.758) I (170694) Main: Input[1] = 0 (615)<CR><LF>
(11:37:25.758) Wifi: Wifi.wIsChanged = WIFI_TO_NONE<CR><LF>
(11:37:25.758) HttpServer: Delete server<CR><LF>
(11:37:25.840) Wifi: WIFI_EVENT_AP_DISCONNECTED<CR><LF>
(11:37:25.840) Wifi: esp_wifi_stop() & esp_wifi_deinit()<CR><LF>
(11:37:25.840) Wifi: esp_event_handler_unregister() & esp_event_loop_delete_default()<CR><LF>
(11:37:25.840) Wifi: INITIALIZE_PROCESS ok<CR><LF>
(11:37:29.895) I (174843) Main: Enter config<CR><LF>
(11:37:29.895) Wifi: Wifi.wIsChanged = WIFI_TO_AP<CR><LF>
(11:37:29.895) Wifi: ip_info.ip = 13.18.0.10<CR><LF>
(11:37:31.879) set channel in sleep mode, fail and exit<CR><LF>
(11:37:31.879) HttpServer: Starting server<CR><LF>
(11:37:31.879) Wifi: INITIALIZE_PROCESS ok<CR><LF>
(11:37:37.506) Wifi: WIFI_EVENT_AP_CONNECTED<CR><LF>
(11:37:39.402) Wifi: Free Stack: 384<CR><LF>
(11:37:42.136) Wifi: Free Stack: 256<CR><LF>
(11:37:50.392) W (197233) httpd_txrx: httpd_sock_err: error in send : 0<CR><LF>
(11:37:50.392) I (197241) HttpServer: iLen = 898<CR><LF>
(11:37:50.392) I (197253) HttpServer: iLen = 785<CR><LF>
(11:37:52.453) I (199315) HttpServer: watermark : 1024<CR><LF>
(11:40:00.847) I (327663) Main: Exit config<CR><LF>
Thanks in advanced