/** * Change IP configuration settings disabling the dhcp client * @param local_ip Static ip configuration * @param gateway Static gateway configuration * @param subnet Static Subnet mask * @param dns1 Static DNS server 1 * @param dns2 Static DNS server 2 */ bool WiFiSTAClass::config(IPAddress local_ip, IPAddress gateway, IPAddress subnet, IPAddress dns1, IPAddress dns2) { if(!WiFi.enableSTA(true)) { return false; } esp_wifi_start(); tcpip_adapter_ip_info_t info; info.ip.addr = static_cast<uint32_t>(local_ip); info.gw.addr = static_cast<uint32_t>(gateway); info.netmask.addr = static_cast<uint32_t>(subnet); tcpip_adapter_dhcpc_stop(TCPIP_ADAPTER_IF_STA); if(tcpip_adapter_set_ip_info(TCPIP_ADAPTER_IF_STA, &info) == ESP_OK) { _useStaticIp = true; } else { return false; } ip_addr_t d; if(dns1 != (uint32_t)0x00000000) { // Set DNS1-Server d.u_addr.ip4.addr = static_cast<uint32_t>(dns1); dns_setserver(0, &d); } if(dns2 != (uint32_t)0x00000000) { // Set DNS2-Server d.u_addr.ip4.addr = static_cast<uint32_t>(dns2); dns_setserver(1, &d); } return true; }
/** * Start Wifi connection * if passphrase is set the most secure supported mode will be automatically selected * @param ssid const char* Pointer to the SSID string. * @param passphrase const char * Optional. Passphrase. Valid characters in a passphrase must be between ASCII 32-126 (decimal). * @param bssid uint8_t[6] Optional. BSSID / MAC of AP * @param channel Optional. Channel of AP * @param connect Optional. call connect * @return */ wl_status_t WiFiSTAClass::begin(const char* ssid, const char *passphrase, int32_t channel, const uint8_t* bssid, bool connect) { if(!WiFi.enableSTA(true)) { // enable STA failed return WL_CONNECT_FAILED; } if(!ssid || *ssid == 0x00 || strlen(ssid) > 31) { // fail SSID too long or missing! return WL_CONNECT_FAILED; } if(passphrase && strlen(passphrase) > 63) { // fail passphrase too long! return WL_CONNECT_FAILED; } wifi_config_t conf; strcpy(reinterpret_cast<char*>(conf.sta.ssid), ssid); if(passphrase) { strcpy(reinterpret_cast<char*>(conf.sta.password), passphrase); } else { *conf.sta.password = 0; } if(bssid) { conf.sta.bssid_set = 1; memcpy((void *) &conf.sta.bssid[0], (void *) bssid, 6); } else { conf.sta.bssid_set = 0; } wifi_config_t current_conf; esp_wifi_get_config(WIFI_IF_STA, ¤t_conf); if(!sta_config_equal(current_conf, conf)) { esp_wifi_set_config(WIFI_IF_STA, &conf); } if(channel > 0 && channel <= 13) { esp_wifi_set_channel(channel, WIFI_SECOND_CHAN_NONE); } esp_wifi_start(); if(connect) { esp_wifi_connect(); } if(!_useStaticIp) { tcpip_adapter_dhcpc_start(TCPIP_ADAPTER_IF_STA); } else { tcpip_adapter_dhcpc_stop(TCPIP_ADAPTER_IF_STA); } return status(); }
/** * Use to connect to SDK config. * @return wl_status_t */ wl_status_t WiFiSTAClass::begin() { if(!WiFi.enableSTA(true)) { // enable STA failed return WL_CONNECT_FAILED; } esp_wifi_start(); esp_wifi_connect(); if(!_useStaticIp) { tcpip_adapter_dhcpc_start(TCPIP_ADAPTER_IF_STA); } else { tcpip_adapter_dhcpc_stop(TCPIP_ADAPTER_IF_STA); } return status(); }
/** * Become a station connecting to an existing access point. */ static void becomeStation(connection_info_t *pConnectionInfo) { ESP_LOGD(tag, "- Connecting to access point \"%s\" ...", pConnectionInfo->ssid); assert(strlen(pConnectionInfo->ssid) > 0); // If we have a static IP address information, use that. if (pConnectionInfo->ipInfo.ip.addr != 0) { ESP_LOGD(tag, " - using a static IP address of " IPSTR, IP2STR(&pConnectionInfo->ipInfo.ip)); tcpip_adapter_dhcpc_stop(TCPIP_ADAPTER_IF_STA); tcpip_adapter_set_ip_info(TCPIP_ADAPTER_IF_STA, &pConnectionInfo->ipInfo); } else { tcpip_adapter_dhcpc_start(TCPIP_ADAPTER_IF_STA); } ESP_ERROR_CHECK( esp_wifi_set_mode(WIFI_MODE_STA)); wifi_config_t sta_config; sta_config.sta.bssid_set = 0; memcpy(sta_config.sta.ssid, pConnectionInfo->ssid, SSID_SIZE); memcpy(sta_config.sta.password, pConnectionInfo->password, PASSWORD_SIZE); ESP_ERROR_CHECK(esp_wifi_set_config(WIFI_IF_STA, &sta_config)); ESP_ERROR_CHECK(esp_wifi_start()); ESP_ERROR_CHECK(esp_wifi_connect()); } // becomeStation