#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <OneWire.h>
#include <DallasTemperature.h>
// OLED config
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
#define OLED_RESET -1
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
// DS18B20 config
#define ONE_WIRE_BUS 2
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
// Constants
#define MAX_SENSORS 3
DeviceAddress sensorAddresses[MAX_SENSORS];
uint8_t foundSensors = 0;
void setup() {
Serial.begin(9600);
// OLED init
if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
Serial.println("OLED failed");
for (;;);
}
display.clearDisplay();
display.setTextColor(SSD1306_WHITE);
display.setTextSize(1);
display.setCursor(0, 0);
display.println("Initializing...");
display.display();
// DS18B20 init
sensors.begin();
foundSensors = 0;
// Scan for up to MAX_SENSORS
DeviceAddress tempAddr;
for (uint8_t i = 0; i < sensors.getDeviceCount() && foundSensors < MAX_SENSORS; i++) {
if (sensors.getAddress(tempAddr, i)) {
memcpy(sensorAddresses[foundSensors], tempAddr, sizeof(DeviceAddress));
sensors.setResolution(sensorAddresses[foundSensors], 12);
foundSensors++;
}
}
display.clearDisplay();
display.setCursor(0, 0);
display.print("Found ");
display.print(foundSensors);
display.println(" sensor(s)");
display.display();
delay(1500);
}
void loop() {
sensors.requestTemperatures();
display.clearDisplay();
if (foundSensors == 0) {
display.setCursor(0, 0);
display.setTextSize(1);
display.println("No sensors found");
} else {
display.setTextSize(1);
for (uint8_t i = 0; i < foundSensors && i < MAX_SENSORS; i++) {
float tempC = sensors.getTempC(sensorAddresses[i]);
display.setCursor(0, i * 20); // Space readings vertically
display.print("Sensor ");
display.print(i + 1);
display.print(": ");
if (tempC != DEVICE_DISCONNECTED_C) {
display.print(tempC, 1);
display.print(" C");
} else {
display.print("Error");
}
}
}
display.display();
delay(2000);
}
Loading
ds18b20
ds18b20
Loading
ds18b20
ds18b20