In this tutorial, we’ll show you how to display the public IP address of your ESP32 on an OLED display. This can be useful when you want to monitor your device’s connectivity status and ensure it’s connected to the internet with a valid IP address.
We’ll be using the following libraries and components:
- Adafruit SSD1306 library for OLED display
- Adafruit GFX library for graphics
- HTTPClient library for making HTTP requests
- ArduinoJson library for parsing JSON data
- An OLED display (128×64 resolution) compatible with SSD1306 driver
Let’s get started!
Step 1: Install the Required Libraries
First, you’ll need to install the following libraries in your Arduino IDE:
- Adafruit SSD1306: https://github.com/adafruit/Adafruit_SSD1306
- Adafruit GFX: https://github.com/adafruit/Adafruit-GFX-Library
- ArduinoJson: https://arduinojson.org/ (you can also install this via the Arduino Library Manager)
Step 2: Set Up the Hardware
For this tutorial, we’ll be using an OLED display with a resolution of 128×64 pixels, driven by the SSD1306 controller. Connect the OLED display to your ESP32 according to the following wiring diagram:
- OLED SDA -> ESP32 GPIO4 (SDA)
- OLED SCL -> ESP32 GPIO15 (SCL)
- OLED RST -> ESP32 GPIO16 (RST)
- OLED VCC -> 3.3V
- OLED GND -> GND
Step 3: Configure Your Wi-Fi Credentials
Replace "your_SSID"
and "your_PASSWORD"
in the provided code with your actual Wi-Fi network name and password.
Step 4: Upload the Sketch
Upload the following Arduino sketch to your ESP32:
#include <Wire.h>
#include <WiFi.h>
#include <HTTPClient.h>
#include <ArduinoJson.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
// Replace with your WiFi credentials
const char* ssid = "your_SSID";
const char* password = "your_PASSWORD";
// OLED display pins
#define OLED_SDA 4
#define OLED_SCL 15
#define OLED_RST 16
Adafruit_SSD1306 display(128, 64, &Wire, OLED_RST);
String getPublicIP() {
HTTPClient http;
String payload;
http.begin("http://api.ipify.org?format=json");
int httpCode = http.GET();
if (httpCode > 0) {
payload = http.getString();
} else {
payload = "";
}
http.end();
return payload;
}
void setup() {
// Set up the OLED display
pinMode(OLED_RST, OUTPUT);
digitalWrite(OLED_RST, LOW);
delay(20);
digitalWrite(OLED_RST, HIGH);
Wire.begin(OLED_SDA, OLED_SCL);
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(0, 0);
// Connect to Wi-Fi
WiFi.begin(ssid, password);
display.println("Connecting to WiFi...");
display.display();
while (WiFi.status() != WL_CONNECTED) {
delay(500);
display.print(".");
display.display();
}
// Get public IP address
String publicIPJson = getPublicIP();
// Show the public IP address on the OLED display
display.clearDisplay();
display.setCursor(0, 0);
display.println("Connected!");
display.print("Public IP: ");
if (publicIPJson != "") {
StaticJsonDocument<128> doc;
deserializeJson(doc, publicIPJson);
const char* ip = doc["ip"];
display.println(ip);
} else {
display.println("Error");
}
display.display();
}
void loop() {
// Nothing to do here
}
This code connects your ESP32 to the specified Wi-Fi network and retrieves its public IP address from the ipify
API. The public IP address is then displayed on the OLED screen.
Step 5: Verify the Results
After uploading the sketch to your ESP32, open the Serial Monitor in the Arduino IDE. You should see your device connecting to the Wi-Fi network and then displaying its public IP address on the OLED display.
Conclusion:
In this tutorial, we showed you how to display the public IP address of your ESP32 on an OLED display. This can be a helpful addition to your IoT projects, giving you a simple way to monitor the connectivity status of your devices.
You can further enhance this project by adding more features, such as periodically checking for a new IP address, displaying additional network information, or even connecting to a remote server to report its status. The possibilities are endless!