#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define SCREEN_WIDTH 128 // Ancho de la pantalla OLED en píxeles
#define SCREEN_HEIGHT 64 // Alto de la pantalla OLED en píxeles
// Inicializa el objeto display OLED utilizando las bibliotecas Adafruit
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);
const int sensorPin = 27; // Pin del sensor NTC conectado al ESP32
void setup() {
Serial.begin(9600);
// Inicializa la comunicación I2C (pines SDA: GPIO21, SCL: GPIO22)
Wire.begin(21, 22);
// Inicializa el display OLED con dirección I2C predeterminada (0x3C)
if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
Serial.println(F("Error al iniciar SSD1306"));
while (true); // En caso de error detiene el programa
}
delay(2000);
display.clearDisplay();
}
void loop() {
float temp = readTemperature();
drawGraph(temp);
delay(500);
}
float readTemperature(){
int reading = analogRead(sensorPin);
float voltage = reading * (5.0 /1023.0);
float resistance = ((5.0 - voltage)/voltage) *10000;
float temperature =(1/(log(resistance/10000)/3959 +1/(273.15+25))) -273.15;
return temperature;
}
void drawGraph(float temp){
display.clearDisplay();
display.setCursor(0, 0);
display.print("Temperature: ");
display.print(temp);
display.print(" C");
// Dibuja un rectángulo como fondo del gráfico
display.drawRect(0, 0, SCREEN_WIDTH-1, SCREEN_HEIGHT-1, WHITE);
// Calcula la posición en el eje Y para dibujar el valor de temperatura
int yPosition = map(temp, -50.0f, 100.0f, SCREEN_HEIGHT-2 ,1);
for (int x = 3; x < SCREEN_WIDTH-3; x++) {
// Dibuja una línea vertical desde la parte inferior hasta la posición de la temperatura
display.drawLine(x,yPosition,x,(SCREEN_HEIGHT -2), WHITE);
}
display.display();
}