Hii,
I connected waveshare oled module is not working this is a module name https://www.waveshare.com/wiki/2.42inch_OLED_Module I just connected with df robot firebettle esp32 board that is connected with this give wiring data in code
``#include <WiFi.h>
#include <PubSubClient.h>
#include <Wire.h>
#include <SPI.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include
// OLED display dimensions
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
// SPI pin assignments (FireBeetle ESP32-E compatible)
#define OLED_MOSI 23 // DIN
#define OLED_CLK 18 // SCK
#define OLED_DC 16
#define OLED_CS 4
#define OLED_RST 17
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT,
OLED_MOSI, OLED_CLK, OLED_DC, OLED_RST, OLED_CS);
// Wi‑Fi & MQTT credentials
const char* ssid = "Kapshi1";
const char* password = "Kaps2025";
const char* mqtt_server = "192.168.0.42";
// Networking objects
WiFiClient wifiClient;
PubSubClient client(wifiClient);
// Timing
unsigned long lastScanMillis = 0;
// MQ analog pins
const int mqPins[4] = {39, 36, 34, 35};
void setup() {
Serial.begin(115200);
// SPI OLED setup
if (!display.begin(SSD1306_SWITCHCAPVCC)) {
Serial.println(F("SSD1306 allocation failed"));
for (;;);
}
display.clearDisplay();
display.display();
display.setRotation(0);
display.setTextSize(1);
display.setTextColor(SSD1306_WHITE);
// Connect Wi‑Fi
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(300);
Serial.print(".");
}
Serial.println("\nWiFi connected: " + WiFi.localIP().toString());
// Setup MQTT
client.setServer(mqtt_server, 1883);
}
void loop() {
unsigned long now = millis();
// Reconnect Wi‑Fi if needed
if (WiFi.status() != WL_CONNECTED) {
WiFi.reconnect();
}
// Reconnect MQTT if needed
if (!client.connected()) {
static unsigned long lastAttempt = 0;
if (now - lastAttempt > 5000) {
lastAttempt = now;
// ✅ CHANGE 1: MQTT Client ID
if (client.connect("esp4")) {
Serial.println("MQTT connected");
// ✅ CHANGE 2: MQTT Status Topic
client.publish("esp32/esp4/status", "connected");
}
}
} else {
client.loop();
}
// Every second, scan I²C + MQ sensors and publish
if (now - lastScanMillis >= 1000) {
lastScanMillis = now;
// Scan I2C Devices
std::vector<String> i2cDevices;
for (uint8_t addr = 1; addr < 127; addr++) {
Wire.beginTransmission(addr);
if (Wire.endTransmission() == 0) {
String addrStr = "0x";
if (addr < 16) addrStr += '0';
addrStr += String(addr, HEX);
i2cDevices.push_back(addrStr);
}
}
if (i2cDevices.empty()) {
i2cDevices.push_back("No I2C");
}
// Read MQ Sensors
String mqs = "";
for (int i = 0; i < 4; i++) {
int val = analogRead(mqPins[i]);
mqs += "M";
mqs += String(i + 1);
mqs += ":";
mqs += String(val);
mqs += '\n';
}
// Create JSON payload
String jsonPayload = "{";
jsonPayload += "\"i2c\":[";
for (size_t i = 0; i < i2cDevices.size(); i++) {
jsonPayload += "\"" + i2cDevices[i] + "\"";
if (i < i2cDevices.size() - 1) jsonPayload += ",";
}
jsonPayload += "],";
jsonPayload += "\"mq\":[";
for (int i = 0; i < 4; i++) {
int val = analogRead(mqPins[i]);
jsonPayload += "\"M" + String(i + 1) + ":" + String(val) + "\"";
if (i < 3) jsonPayload += ",";
}
jsonPayload += "]}";
// ✅ CHANGE 3: Sensor topic
client.publish("esp32/esp4/sensors", jsonPayload.c_str());
Serial.println("Published JSON:");
Serial.println(jsonPayload);
// OLED Display
display.clearDisplay();
display.setCursor(0, 0);
display.println("I2C + MQ List:");
int line = 1;
for (String dev : i2cDevices) {
display.setCursor(0, line * 8);
display.println(dev);
if (++line >= 8) break;
}
for (int i = 0; i < 4 && line < 8; i++) {
int val = analogRead(mqPins[i]);
display.setCursor(0, line * 8);
display.print("M");
display.print(i + 1);
display.print(":");
display.println(val);
line++;
}
display.display();
}
}
that is the code to display the oled
`

