#include <OneWire.h>
#include <DallasTemperature.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
// Data wire is connected to pin 5
#define ONE_WIRE_BUS 5
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
// OLED display setup
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);
// Variable to hold sensor's ID
DeviceAddress sensorAddress;
void setup() {
Serial.begin(115200);
// Start up the DS18B20 library
sensors.begin();
// Check for the presence of the sensor and get the address
if (!sensors.getAddress(sensorAddress, 0)) {
Serial.println("No DS18B20 sensor found!");
while (1);
}
// Initialize the OLED display
if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
Serial.println(F("SSD1306 allocation failed"));
for (;;);
}
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(SSD1306_WHITE);
display.setCursor(0, 0);
display.print("Initializing DS18B20");
display.display();
delay(2000);
// Print sensor address
Serial.print("DS18B20 Address: ");
printAddress(sensorAddress);
Serial.println();
}
void loop() {
// Request temperature from the sensor
sensors.requestTemperatures();
float tempC = sensors.getTempC(sensorAddress);
float tempF = sensors.toFahrenheit(tempC);
// Print results to Serial
Serial.print("Temperature: ");
Serial.print(tempC, 1);
Serial.print(" C, ");
Serial.print(tempF, 1);
Serial.println(" F");
// Display results on OLED
display.clearDisplay();
display.setCursor(0, 0);
display.print("Temp: ");
display.print(tempC, 1);
display.print(" C / ");
display.print(tempF, 1);
display.println(" F");
// Display sensor ID
display.println("Sensor ID: ");
display.print(" ");
printAddressOLED(sensorAddress);
display.display();
delay(2000);
}
// Function to print the sensor's address to Serial
void printAddress(DeviceAddress deviceAddress) {
for (uint8_t i = 0; i < 8; i++) {
if (deviceAddress[i] < 16) Serial.print("0");
Serial.print(deviceAddress[i], HEX);
}
}
// Function to print the sensor's address on OLED
void printAddressOLED(DeviceAddress deviceAddress) {
for (uint8_t i = 0; i < 8; i++) {
if (deviceAddress[i] < 16) display.print("0");
display.print(deviceAddress[i], HEX);
}
}
nano:12
nano:11
nano:10
nano:9
nano:8
nano:7
nano:6
nano:5
nano:4
nano:3
nano:2
nano:GND.2
nano:RESET.2
nano:0
nano:1
nano:13
nano:3.3V
nano:AREF
nano:A0
nano:A1
nano:A2
nano:A3
nano:A4
nano:A5
nano:A6
nano:A7
nano:5V
nano:RESET
nano:GND.1
nano:VIN
nano:12.2
nano:5V.2
nano:13.2
nano:11.2
nano:RESET.3
nano:GND.3
Loading
ssd1306
ssd1306
Loading
ds18b20
ds18b20