Skip to main content

WLAN Driver

Advanced WLAN functionality for ESP-IDF.

Functions for WLAN initialization and management.

Overview​

The WLAN Driver provides a simplified, high-level interface for WiFi connectivity on ESP32 platforms. It wraps the standard ESP-IDF WiFi driver to provide easy-to-use functions for common modes like Station (STA) and Access Point (AP).

This driver is designed for:

  • Simplicity : One-function initialization for STA and AP modes
  • Reliability : Built-in event handling and retry logic
  • Convenience : Abstracts complex event loops and state machines

Key Features​

  • ✅ Station Mode (STA) : Connect to existing WiFi networks
  • ✅ Access Point Mode (AP) : Create a WiFi hotspot
  • ✅ Security : Supports WPA/WPA2/WPA3 authentication (via Kconfig)
  • ✅ Status Monitoring : Simple mechanism to check connection status
  • ✅ Event Handling : Integrated event group management for connection states

Architecture​

The driver follows a layered architecture:

API Modules​

The API is organized into main functional areas:

Initialization​

Functions for setting up WiFi in different modes:

  • Station Mode : Connect to a router
  • Access Point Mode : Host a network

Key functions:

  • wb_wifi_init_sta() - Initialize as Station (Client)
  • wb_wifi_init_ap() - Initialize as Access Point (Hotspot)

Management​

Functions for controlling the WiFi lifecycle:

Key functions:

  • wb_wifi_check_status() - Get current connection status
  • wb_wifi_deinit() - Stop WiFi and free resources

Quick Start Guide​

Installation​

Ensure wb-idf-core is included in your project components.

Station Mode Example​

Connecting to a WiFi network:

#include "wb-idf-wlan.h"
#include "nvs_flash.h"

void app_main(void)
{
// 1. Initialize NVS (Required for WiFi)
esp_err_t ret = nvs_flash_init();
if (ret == ESP_ERR_NVS_NO_FREE_PAGES || ret == ESP_ERR_NVS_NEW_VERSION_FOUND) {
ESP_ERROR_CHECK(nvs_flash_erase());
ret = nvs_flash_init();
}
ESP_ERROR_CHECK(ret);

// 2. Initialize WiFi in Station Mode
char *ssid = "MyWiFiNetwork";
char *password = "mysupersecretpassword";

ESP_LOGI("WLAN", "Connecting to %s...", ssid);
wb_wifi_init_sta(ssid, password);

// 3. Check status (Optional)
if (wb_wifi_check_status() == WIFI_CONNECTED_BIT) {
ESP_LOGI("WLAN", "Connected successfully!");
}
}

Access Point Mode Example​

Creating a WiFi hotspot:

#include "wb-idf-wlan.h"
#include "nvs_flash.h"

void app_main(void)
{
// NVS Init...

// Initialize WiFi in AP Mode
char *ap_ssid = "MyESP32Hotspot";
char *ap_password = "password123";

ESP_LOGI("WLAN", "Starting AP: %s", ap_ssid);
wb_wifi_init_ap(ap_ssid, ap_password);
}

Troubleshooting​

Common Issues​

Connection Failed

The device attempts to connect but eventually fails or times out.

  • Incorrect SSID or Password.

  • Signal too weak.

  • Router authentication settings mismatch (e.g., WPA3 required but not enabled in Kconfig).

  • Double check credentials.

  • Move closer to the router.

  • Check menuconfig settings under Component config -> Wi-Fi .

WiFi Init Failed

  • NVS not initialized before WiFi.

  • Power supply insufficiency.

  • Ensure nvs_flash_init() is called first.

  • Check power supply stability.

Best Practices​

NVS Initialization​

Always initialize NVS Flash ( nvs_flash_init() ) before initializing WiFi, as the WiFi driver stores calibration data in NVS.

Event Handling​

The driver uses an internal Event Group. The wb_wifi_check_status() function can be used to poll the status, but for more complex applications, consider hooking into the standard ESP-IDF event loop if you need asynchronous notifications.

License​

Copyright (c) 2024 WhirlingBits

Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at

[http://www.apache.org/licenses/LICENSE-2.0](http://www.apache.org/licenses/LICENSE-2.0)

Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.

Support & Contributing​

  • GitHub Issues

  • WhirlingBits Team

Macros​

WB_STATION_ESP_MAXIMUM_RETRY CONFIG_STATION_ESP_MAXIMUM_RETRY​

Initialize WiFi station mode with SSID and password.

WB_AP_ESP_WIFI_CHANNEL CONFIG_AP_ESP_WIFI_CHANNEL​

Initialize WiFi station mode with SSID and password.

WB_AP_MAX_STA_CONN CONFIG_AP_ESP_MAX_STA_CONN​

Initialize WiFi station mode with SSID and password.

WIFI_CONNECTED_BIT BIT0​

Initialize WiFi station mode with SSID and password.

WIFI_FAIL_BIT BIT1​

Initialize WiFi station mode with SSID and password.

Functions​

wb_wifi_init_sta​

Initialize WiFi station mode with SSID and password.

void wb_wifi_init_sta(char *sta_ssid, char *sta_password)

Parameters:

  • sta_ssid (char *): Pointer to null-terminated string containing the SSID of the WiFi network to connect to
  • sta_password (char *): Pointer to null-terminated string containing the password for the WiFi network

Returns:

void

Initializes the WiFi interface in station (client) mode and connects to the specified WiFi network using the provided SSID and password.

Note: Ensure that WiFi is initialized before calling this function

Note: The SSID and password strings must remain valid during the function execution


wb_wifi_init_ap​

Initialize WiFi in Access Point (AP) mode.

void wb_wifi_init_ap(char *ap_ssid, char *ap_password)

Parameters:

  • ap_ssid (char *): Pointer to the SSID string for the Access Point. Must be a null-terminated string.
  • ap_password (char *): Pointer to the password string for the Access Point. Must be a null-terminated string.

Returns:

void

Configures the WiFi module to operate as an Access Point, allowing other devices to connect to it using the provided SSID and password.

Note: Ensure that the WiFi module is properly initialized before calling this function.

Note: The SSID and password strings must remain valid until the function returns.


wb_wifi_deinit​

Deinitialize WiFi.

void wb_wifi_deinit(void)

Parameters:

  • **** (void)

Returns:

void

Deinitializes the WiFi interface, releasing any resources and stopping any ongoing WiFi operations.


wb_wifi_check_status​

Check WiFi connection status.

int wb_wifi_check_status()

Returns:

int Status code representing the WiFi connection state

Returns the current status of the WiFi connection.