@@ -199,23 +199,48 @@ void WiFiSTAClass::_setStatus(wl_status_t status)
199
199
*/
200
200
bool WiFiSTAClass::config (IPAddress local_ip, IPAddress gateway, IPAddress subnet, IPAddress dns1, IPAddress dns2)
201
201
{
202
+ esp_err_t err = ESP_OK;
202
203
203
204
if (!WiFi.enableSTA (true )) {
204
205
return false ;
205
206
}
206
207
esp_wifi_start ();
207
208
208
209
tcpip_adapter_ip_info_t info;
209
- info.ip .addr = static_cast <uint32_t >(local_ip);
210
- info.gw .addr = static_cast <uint32_t >(gateway);
211
- info.netmask .addr = static_cast <uint32_t >(subnet);
212
210
213
- tcpip_adapter_dhcpc_stop (TCPIP_ADAPTER_IF_STA);
214
- if (tcpip_adapter_set_ip_info (TCPIP_ADAPTER_IF_STA, &info) == ESP_OK) {
215
- _useStaticIp = true ;
211
+ if (local_ip != (uint32_t )0x00000000 ){
212
+ info.ip .addr = static_cast <uint32_t >(local_ip);
213
+ info.gw .addr = static_cast <uint32_t >(gateway);
214
+ info.netmask .addr = static_cast <uint32_t >(subnet);
216
215
} else {
216
+ info.ip .addr = 0 ;
217
+ info.gw .addr = 0 ;
218
+ info.netmask .addr = 0 ;
219
+ }
220
+
221
+ err = tcpip_adapter_dhcpc_stop (TCPIP_ADAPTER_IF_STA);
222
+ if (err != ESP_OK && err != ESP_ERR_TCPIP_ADAPTER_DHCP_ALREADY_STOPPED){
223
+ log_e (" DHCP could not be stopped! Error: %d" , err);
217
224
return false ;
218
225
}
226
+
227
+ err = tcpip_adapter_set_ip_info (TCPIP_ADAPTER_IF_STA, &info);
228
+ if (err != ERR_OK){
229
+ log_e (" STA IP could not be configured! Error: %d" , err);
230
+ return false ;
231
+ }
232
+
233
+ if (info.ip .addr ){
234
+ _useStaticIp = true ;
235
+ } else {
236
+ err = tcpip_adapter_dhcpc_start (TCPIP_ADAPTER_IF_STA);
237
+ if (err != ESP_OK && err != ESP_ERR_TCPIP_ADAPTER_DHCP_ALREADY_STARTED){
238
+ log_w (" DHCP could not be started! Error: %d" , err);
239
+ return false ;
240
+ }
241
+ _useStaticIp = false ;
242
+ }
243
+
219
244
ip_addr_t d;
220
245
d.type = IPADDR_TYPE_V4;
221
246
0 commit comments