Properly checking for errors during a WiFi connection?

General discussions and questions abound development of code with MicroPython that is not hardware specific.
Target audience: MicroPython Users.
kevinkk525
Posts: 969
Joined: Sat Feb 03, 2018 7:02 pm

Re: Properly checking for errors during a WiFi connection?

Post by kevinkk525 » Fri Jan 31, 2020 2:38 pm

you import network so STAT_NO_AP_FOUND is not defined in global space but in network.

Therefore you have to check against "network.STAT_NO_AP_FOUND" or do "from network import *"
Kevin Köck
Micropython Smarthome Firmware (with Home-Assistant integration): https://github.com/kevinkk525/pysmartnode

tll
Posts: 13
Joined: Fri Feb 07, 2020 10:16 am

Re: Properly checking for errors during a WiFi connection?

Post by tll » Sat Feb 08, 2020 7:53 pm

I am not sure if this will be of any help... I wonder if looking at both, the espressif and MP source modules you may be able to figure out what is handled and any mappings...

For example, this is from esp_wifi.h

Code: Select all

[size=85][size=50][size=50]
[size=50][/size]#define ESP_ERR_WIFI_NOT_INIT    (ESP_ERR_WIFI_BASE + 1)   /*!< WiFi driver was not installed by esp_wifi_init */
#define ESP_ERR_WIFI_NOT_STARTED (ESP_ERR_WIFI_BASE + 2)   /*!< WiFi driver was not started by esp_wifi_start */
#define ESP_ERR_WIFI_NOT_STOPPED (ESP_ERR_WIFI_BASE + 3)   /*!< WiFi driver was not stopped by esp_wifi_stop */
#define ESP_ERR_WIFI_IF          (ESP_ERR_WIFI_BASE + 4)   /*!< WiFi interface error */
#define ESP_ERR_WIFI_MODE        (ESP_ERR_WIFI_BASE + 5)   /*!< WiFi mode error */
#define ESP_ERR_WIFI_STATE       (ESP_ERR_WIFI_BASE + 6)   /*!< WiFi internal state error */
#define ESP_ERR_WIFI_CONN        (ESP_ERR_WIFI_BASE + 7)   /*!< WiFi internal control block of station or soft-AP error */
#define ESP_ERR_WIFI_NVS         (ESP_ERR_WIFI_BASE + 8)   /*!< WiFi internal NVS module error */
#define ESP_ERR_WIFI_MAC         (ESP_ERR_WIFI_BASE + 9)   /*!< MAC address is invalid */
#define ESP_ERR_WIFI_SSID        (ESP_ERR_WIFI_BASE + 10)   /*!< SSID is invalid */
#define ESP_ERR_WIFI_PASSWORD    (ESP_ERR_WIFI_BASE + 11)  /*!< Password is invalid */
#define ESP_ERR_WIFI_TIMEOUT     (ESP_ERR_WIFI_BASE + 12)  /*!< Timeout error */
#define ESP_ERR_WIFI_WAKE_FAIL   (ESP_ERR_WIFI_BASE + 13)  /*!< WiFi is in sleep state(RF closed) and wakeup fail */
#define ESP_ERR_WIFI_WOULD_BLOCK (ESP_ERR_WIFI_BASE + 14)  /*!< The caller would block */
#define ESP_ERR_WIFI_NOT_CONNECT (ESP_ERR_WIFI_BASE + 15)  /*!< Station still in disconnect status */[/size][/size][/size]

and in esp_err.h

Code: Select all

#define ESP_ERR_WIFI_BASE           0x3000  /*!< Starting number of WiFi error codes */

ncotti
Posts: 2
Joined: Thu Dec 23, 2021 7:49 pm

Re: Properly checking for errors during a WiFi connection?

Post by ncotti » Fri Feb 11, 2022 12:41 pm

This post is rather old, but i found the error definitions. As you can see in the micropython "modnetwork.h" https://github.com/micropython/micropyt ... dnetwork.h file,
// Error cases are referenced from wifi_err_reason_t in ESP-IDF
.

So, that definition is made in this following file in the IDF-PY repository: https://github.com/espressif/esp-idf/bl ... fi_types.h

Code: Select all

typedef enum {
    WIFI_REASON_UNSPECIFIED              = 1,
    WIFI_REASON_AUTH_EXPIRE              = 2,
    WIFI_REASON_AUTH_LEAVE               = 3,
    WIFI_REASON_ASSOC_EXPIRE             = 4,
    WIFI_REASON_ASSOC_TOOMANY            = 5,
    WIFI_REASON_NOT_AUTHED               = 6,
    WIFI_REASON_NOT_ASSOCED              = 7,
    WIFI_REASON_ASSOC_LEAVE              = 8,
    WIFI_REASON_ASSOC_NOT_AUTHED         = 9,
    WIFI_REASON_DISASSOC_PWRCAP_BAD      = 10,
    WIFI_REASON_DISASSOC_SUPCHAN_BAD     = 11,
    WIFI_REASON_BSS_TRANSITION_DISASSOC  = 12,
    WIFI_REASON_IE_INVALID               = 13,
    WIFI_REASON_MIC_FAILURE              = 14,
    WIFI_REASON_4WAY_HANDSHAKE_TIMEOUT   = 15,
    WIFI_REASON_GROUP_KEY_UPDATE_TIMEOUT = 16,
    WIFI_REASON_IE_IN_4WAY_DIFFERS       = 17,
    WIFI_REASON_GROUP_CIPHER_INVALID     = 18,
    WIFI_REASON_PAIRWISE_CIPHER_INVALID  = 19,
    WIFI_REASON_AKMP_INVALID             = 20,
    WIFI_REASON_UNSUPP_RSN_IE_VERSION    = 21,
    WIFI_REASON_INVALID_RSN_IE_CAP       = 22,
    WIFI_REASON_802_1X_AUTH_FAILED       = 23,
    WIFI_REASON_CIPHER_SUITE_REJECTED    = 24,

    WIFI_REASON_INVALID_PMKID            = 53,

    WIFI_REASON_BEACON_TIMEOUT           = 200,
    WIFI_REASON_NO_AP_FOUND              = 201,
    WIFI_REASON_AUTH_FAIL                = 202,
    WIFI_REASON_ASSOC_FAIL               = 203,
    WIFI_REASON_HANDSHAKE_TIMEOUT        = 204,
    WIFI_REASON_CONNECTION_FAIL          = 205,
    WIFI_REASON_AP_TSF_RESET             = 206,
    WIFI_REASON_ROAMING                  = 207,
} wifi_err_reason_t;

ihornehrutsa
Posts: 35
Joined: Sat Oct 26, 2019 8:38 pm

Re: Properly checking for errors during a WiFi connection?

Post by ihornehrutsa » Fri Nov 10, 2023 8:04 pm

esp32/network_wlan: Fix network.WLAN.status().
https://github.com/micropython/micropython/pull/12932

status() can return STAT_NO_AP_FOUND and STAT_WRONG_PASSWORD.
This allows users to set the correct credentials.

becorey
Posts: 2
Joined: Thu Aug 13, 2020 4:48 pm

Re: Properly checking for errors during a WiFi connection?

Post by becorey » Wed Sep 25, 2024 5:19 pm

For what it's worth here is my code to display the text of the status instead of the number to make it more readable:

Code: Select all

def status_text(wlan):
	statuses = ['STAT_IDLE', 'STAT_CONNECTING', 'STAT_WRONG_PASSWORD',
				'STAT_NO_AP_FOUND', 'STAT_ASSOC_FAIL', 'STAT_BEACON_TIMEOUT',
				'STAT_HANDSHAKE_TIMEOUT', 'STAT_GOT_IP']
	statDict = {getattr(network, s): s for s in statuses}
	statDict.update({8: 'DISCONNECTED'})
	statDict.update({2: '2 (unknown)'})

	status = wlan.status()
	text = statDict[status]
	return text

Post Reply