Skip to content

Reconfigure WiFi with static IP after initialization #523

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.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

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