// Include required libraries
#include <OneWire.h>
#include <DallasTemperature.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
// Pin definitions
#define ONE_WIRE_BUS 2 // DS18B20 data pin connected to GP2
#define SCREEN_WIDTH 128 // OLED display width
#define SCREEN_HEIGHT 64 // OLED display height
#define OLED_RESET -1 // Reset pin # (or -1 if sharing Arduino reset pin)
// Initialize objects
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
void setup() {
// Start serial communication for debugging
Serial.begin(115200);
// Initialize the DS18B20 sensor
sensors.begin();
// Initialize OLED display with I2C address 0x3C
if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
Serial.println(F("SSD1306 allocation failed"));
for(;;); // Don't proceed, loop forever
}
// Clear the display buffer
display.clearDisplay();
display.setTextSize(2); // Normal 2:1 pixel scale
display.setTextColor(SSD1306_WHITE); // Draw white text
display.setCursor(0,0); // Start at top-left corner
display.display();
}
void loop() {
// Request temperature readings
sensors.requestTemperatures();
// Get temperature in Celsius
float tempC = sensors.getTempCByIndex(0);
// Check if reading is valid
if(tempC == DEVICE_DISCONNECTED_C) {
Serial.println("Error: Could not read temperature data");
return;
}
// Convert temperature to string with 1 decimal place
char tempStr[8];
dtostrf(tempC, 6, 1, tempStr);
// Clear display
display.clearDisplay();
// Display temperature
display.setCursor(0,0);
display.println("Temp:");
display.setCursor(0,20);
display.print(tempStr);
display.print(" C");
// Update display
display.display();
// Print to serial monitor for debugging
Serial.print("Temperature: ");
Serial.print(tempC);
Serial.println(" C");
// Wait 1 second before next reading
delay(1000);
}