Skip to content

Reconfigure WiFi with static IP after initialization #523

@br0kenpixel

Description

@br0kenpixel

My project stores a list of APs and tries to connect to the best one. I'd like to implement a feature that allows setting a static IP for some of those networks, while relying on DHCP for others.

When I first initialize EspWifi I'm not doing any static IP setup. However, I have a separate connect() method for connecting to a specific network. I'd like to "reconfigure" the STA interface with a static IP configuration.

This is essentially my WiFi initialization code:

let wifi = WifiDriver::new(modem, sys_loop, None)?;
esp!(unsafe { esp_wifi_set_storage(wifi_storage_t_WIFI_STORAGE_RAM) })?;

let mut wifi = EspWifi::wrap_all(wifi, EspNetif::new_with_conf(&ip_config)?)?;
wifi.set_configuration(&Configuration::Client(ClientConfiguration::default()))?;

wifi.start()?;
esp!(unsafe { esp_wifi_set_country_code(WIFI_COUNTRY_CODE.as_ptr().cast(), true) })?;

My connect() method is the following:

pub fn connect(&mut self, ssid: &str, psk: &str, auth: AuthMethod, static_ip_config: Option<NetifConfiguration>, timeout: Duration) -> OsResult<()> {
    if let Some(config) = static_ip_config {
        // ESP_ERR_INVALID_ARG
        self.driver.swap_netif_sta(EspNetif::new_with_conf(&config)?)?;
    }

    // ...
}

However, swap_netif_sta() returns ESP_ERR_INVALID_ARG. I tried calling EspWifi::stop() before swap_netif_sta(), but I get the same error. Is something like this even possible?

If I initialize EspWifi with static configuration, it works, but I can't do that because at that point I don't know which network I'll actually connect to. My app needs to perform a scan first and then do some filtering. This would require removing support for multiple APs and only relying on a single one.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions