#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#include <MPU6050.h>
// --- OLED Settings ---
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);
// --- DS18B20 Settings ---
#define ONE_WIRE_BUS 18 // GPIO4 for DS18B20 data pin
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
// --- MPU6050 ---
MPU6050 mpu;
void setup() {
Serial.begin(115200);
Wire.begin();
// Initialize OLED
if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
Serial.println("OLED not found!");
while (1);
}
display.clearDisplay();
// Initialize DS18B20
sensors.begin();
// Initialize MPU6050
mpu.initialize();
if (!mpu.testConnection()) {
Serial.println("MPU6050 connection failed!");
}
display.setTextSize(1);
display.setTextColor(SSD1306_WHITE);
}
void loop() {
// --- Read Temperature ---
sensors.requestTemperatures();
float tempC = sensors.getTempCByIndex(0);
// --- Read Accelerometer ---
int16_t ax, ay, az;
mpu.getAcceleration(&ax, &ay, &az);
// --- Display on OLED ---
display.clearDisplay();
display.setCursor(0, 0);
display.println("ESP32 Sensor Monitor");
display.println("--------------------");
display.print("Temp: ");
display.print(tempC);
display.println(" C");
display.print("AX: "); display.println(ax);
display.print("AY: "); display.println(ay);
display.print("AZ: "); display.println(az);
display.display();
delay(1000);
}