/*
Projeto: Sensor de Temperatura (DS18B20) com Display OLED
Descrição: Lê o valor de temperatura do sensor DS18B20
e exibe o dado no display OLED 128x64 (I2C).
*/
// -------------------- Bibliotecas --------------------
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <OneWire.h>
#include <DallasTemperature.h>
// -------------------- Definições --------------------
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
#define PINO_DS A0 // pino de dados do DS18B20 (use o mesmo que está ligado)
// Objetos do display e sensor
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);
OneWire oneWire(PINO_DS);
DallasTemperature sensors(&oneWire);
// -------------------- Setup --------------------
void setup() {
Serial.begin(115200);
// Inicializa o display OLED
if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
Serial.println(F("Falha ao iniciar o display OLED"));
for (;;);
}
// Inicializa o sensor de temperatura
sensors.begin();
display.clearDisplay();
display.setTextColor(SSD1306_WHITE);
display.setTextSize(1); // fonte normal
display.setCursor(0, 0);
display.println("Sensor DS18B20");
display.display();
delay(1500);
}
// -------------------- Loop --------------------
void loop() {
// Solicita a leitura do sensor
sensors.requestTemperatures();
float temperatura = sensors.getTempCByIndex(0);
// Exibe no Serial Monitor
Serial.print("Temperatura: ");
Serial.print(temperatura);
Serial.println(" °C");
// Limpa a tela e mostra a leitura
display.clearDisplay();
display.setTextSize(2);
display.setCursor(0, 15);
display.print("Temp:");
display.setTextSize(3);
display.setCursor(15, 40);
if (temperatura == DEVICE_DISCONNECTED_C) {
display.setTextSize(2);
display.setCursor(10, 25);
display.print("Erro!");
} else {
display.print(temperatura, 1);
display.print((char)247); // símbolo de grau
display.print("C");
}
display.display();
delay(2000); // Atualiza a cada 2 segundos
}