ESP32 Setting Static IP Address

Description

While Wi-Fi connection the router assigns the random IP address to the ESP32 Board. This is because DHCP (Dynamic Host Configuration Protocol) assigns IP addresses dynamically. 

DHCP helps because it avoids the need to set the IP address manually. In-home network, the Router acts as DHCP. 

However, while connecting each time ESP32 might get different IP Addresses. i.e., after reset, Power ON/OFF, etc.

DHCP provides an additional parameter for client configuration.

  • Subnet Mask: It masks the IP address and divides the IP address into network address and host address.
  • Gateway address: Typically, in Home N/W it’s the IP Address of the Router
  • DNS IP address: IP Address of domain name server.

All the above parameters are important for correctly configuring the ESP32 Static address.

While setting a static IP Address, ESP32 doesn’t use DHCP. So we need to pass these parameters.

Note: We should use correct parameters, otherwise some functionalities might not work.

 

Best way to set the fields

Step1: Simply we can connect to Wi-Fi in the normal way and print all the parameters assigned by DHCP. 

Step2: Then, we will assign the static IP address and we will keep all other parameters as it is. 

Arduino IDE Code

The function used for getting the parameters is very straightforward as its naming.

/*
 ESP32 Connect to Wi-Fi and print all parameters
 http:://www.electronicwings.com
*/ 


#include <WiFi.h>

// Replace with your network credentials
const char* ssid = "REPLACE_WITH_YOUR_SSID"; 
const char* password = "REPLACE_WITH_YOUR_PASSWORD";

void initWiFi() {
 WiFi.mode(WIFI_STA);    //Set Wi-Fi Mode as station
 WiFi.begin(ssid, password);   
 
 Serial.println("Connecting to WiFi ..");
 while (WiFi.status() != WL_CONNECTED) {
   Serial.print('.');
   delay(1000);
 }
 
 Serial.print("Local IP: ");
 Serial.println(WiFi.localIP());
 Serial.print("Subnet Mask: " );
 Serial.println(WiFi.subnetMask());
 Serial.print("Gateway IP: ");
 Serial.println(WiFi.gatewayIP());
 Serial.print("DNS 1: ");
 Serial.println(WiFi.dnsIP(0));
 Serial.print("DNS 2: ");
 Serial.println(WiFi.dnsIP(1));
}

void setup() {
 Serial.begin(115200);
 initWiFi();
}

void loop() {
 // put your main code here, to run repeatedly:
}

 

Output

Now we know the parameters like 

  • Subnet Mask
  • Gateway address
  • DNS IP address

Now we can set our own Static IP address, keeping all other parameters similar. 

Note: We can set static IP address which are available.

 

ESP32: Setting a static IP address 

Define the Static IP address and keep all other parameters as it is. Here we are defining the static IP address as 192.168.1.186

IPAddress staticIP(192, 168, 1, 186);

IPAddress gateway(192, 168, 1, 1);
IPAddress subnet(255, 255, 0, 0);
IPAddress dns(192, 168, 1, 1);

We need to use the function WiFi.config() to set all parameters. This function returns Boolean value indicating configuration is successful or not!

if (WiFi.config(staticIP, gateway, subnet, dns, dns) == false) {
   Serial.println("Configuration failed.");
}

 

ESP32Ping

After allocating a static IP address, we will use ESP32Ping.h library, to confirm that we can reach a server outside our network. We can ping to website like google.com or any other.

Note: You might need to add the ESP32Ping library. We are using this (GitHub) library.

To install the library, you just need to download its source code from the GitHub page, unzip it and place it in your Arduino libraries folder. Depending on your installation, it might be located in different paths. Mostly, it is located on:

C:\Users\<user name>\Documents\Arduino\libraries

Note that the extracted root folder will be named ESP32Ping-master. You should rename it simply to ESP32Ping before placing it in the Arduino libraries folder.

Code:

/*
 ESP32 Connect to Wi-Fi with Static Ip address
 http:://www.electronicwings.com
*/ 

#include <WiFi.h>
#include <ESP32Ping.h>
 
const char* ssid = "REPLACE_WITH_YOUR_SSID"; 
const char* password =  "REPLACE_WITH_YOUR_PASSWORD"; 
 
IPAddress staticIP(192, 168, 1, 186);
IPAddress gateway(192, 168, 1, 1);   // Replace this with your gateway IP Addess
IPAddress subnet(255, 255, 0, 0);  // Replace this with your Subnet Mask
IPAddress dns(192, 168, 1, 1);   // Replace this with your DNS

   
void setup(){
 Serial.begin(115200);
 
 if (WiFi.config(staticIP, gateway, subnet, dns, dns) == false) {
   Serial.println("Configuration failed.");
 }
   
 WiFi.begin(ssid, password);
 
 while (WiFi.status() != WL_CONNECTED) {
   delay(500);
   Serial.print("Connecting...\n\n");
 }
 
 Serial.print("Local IP: ");
 Serial.println(WiFi.localIP());
 Serial.print("Subnet Mask: ");
 Serial.println(WiFi.subnetMask());
 Serial.print("Gateway IP: ");
 Serial.println(WiFi.gatewayIP());
 Serial.print("DNS 1: ");
 Serial.println(WiFi.dnsIP(0));
 Serial.print("DNS 2: ");
 Serial.println(WiFi.dnsIP(1));
 
 bool success = Ping.ping("www.electronicwings.com", 3);
 
 if(!success){
   Serial.println("\nPing failed");
   return;
 }
 
 Serial.println("\nPing successful to www.ElectronicWings.com.");
}
   
void loop(){}

Output

 

Now we have successfully set the static IP address to ESP32.


Components Used

ESP32 WROOM
WiFi Development Tools - 802.11 ESP32 General Development Kit, embeds ESP32-WROOM-32E, 4MB flash.
1

Downloads

ESP32_Ping_Code Download
ESP32_Static_IP Download
Ad