/** * 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; }
/** * Configure access point * @param local_ip access point IP * @param gateway gateway IP * @param subnet subnet mask */ bool WiFiAPClass::softAPConfig(IPAddress local_ip, IPAddress gateway, IPAddress subnet) { if(!WiFi.enableAP(true)) { // enable AP failed return false; } 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_dhcps_stop(TCPIP_ADAPTER_IF_AP); if(tcpip_adapter_set_ip_info(TCPIP_ADAPTER_IF_AP, &info)) { return tcpip_adapter_dhcps_start(TCPIP_ADAPTER_IF_AP); } return false; }
/** * 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