Problema con lectura de sensor DHT22

Cordial saludos, actualmente estoy experimentando un error con un DHT22 debido a que en algunos momentos me arroja la temperatura con caracteres especial y no se a que se debe.

#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include "DHT.h" // Include the DHT library

// DHT22 Configuration
#define DHTPIN 18 // Pin donde esta conectador el sensor
#define DHTTYPE DHT22 // especificacion del sensor DHT22
DHT dht(DHTPIN, DHTTYPE); // Inicializamos el sensor DHT

// OLED configuracion de pantalla
#define SCREEN_WIDTH 128 // OLED pantalla ancho, in pixeles
#define SCREEN_HEIGHT 64 // OLED pantalla alto, en pixeles
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);

float humedad;
float temperatura;

void setup() {
// Initialize Serial Monitor
Serial.begin(115200);
Serial.println(F("Tecnoianxel IG...!"));

// Initialize the DHT sensor
dht.begin();

// Initialize the OLED display
if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
Serial.println(F("SSD1306 allocation failed"));
for (;;);
}
delay(2000);
display.clearDisplay();
display.setTextColor(SSD1306_WHITE);
}

void loop() {
delay(5000);
// Leemos la temperatura y humedad relativa del sensor DHT22
float humedad = dht.readHumidity();
float temperatura = dht.readTemperature();

// Check if any readings failed
if (isnan(humedad) || isnan(temperatura)) {
Serial.println(F("Fallo al conectar sensor DHT22!"));
return;
}

// Display the readings on the OLED screen
display.clearDisplay();

// Muestra temperatura
display.setTextSize(1);
display.setCursor(0, 7);
display.print("Temperatura: ");
display.setTextSize(2);
display.setCursor(0, 16);
display.print(temperatura);
display.print(" ");
display.setTextSize(1);
display.cp437(true); // Enable extended ASCII for the degree symbol
display.write(167); // Degree symbol
display.setTextSize(2);
display.print("C");

// Muestra humedad
display.setTextSize(1);
display.setCursor(0, 37);
display.print("Humedad: ");
display.setTextSize(2);
display.setCursor(0, 50);
display.print(humedad);
display.print(" %");

display.display();

// Print values to Serial Monitor
Serial.print(F("Temperatura:"));
Serial.print(temperatura);
Serial.println(F("°C"));
Serial.print(F("Humedad:"));
Serial.print(humedad);
Serial.println(F("%"));

// Wait 2 seconds between readings
}`

Estoy usando un ESP32+Oled 128*64 i2c, DHT22, para capturar humedad y temperatura


Anexo error

Moderador:
Por favor, lee las Normas del foro y publica/edita tu código/error usando etiquetas de código.
Ve a edición, luego selecciona todo el código que has publicado/editado, lo cortas y click en (<CODE/>)


Gracias, corregido

Como tienes el Monitor serie en este punto que te indico con la captura.

No creo que sea esto pero prueba reemplazando las ultimas líneas del Serial Monitor por esta única

Serial.printf("Temperatura: %.2f°C\nHumedad: %.2f%%\n", temperatura, humedad);

Hi,
Cuando lees el DHE22 debes de tener un delay de 2 segunos de lectura a lecturas.Anadele el delay para ver si te trabaja.

Ya tiene 5 segundos. ;

Hi,
Gracias MaximoEsfuerzo no me di cuenta ya que yo simpre pongo el delay despues de la lectura. Asi me asugurp que tiene que esperar por el delay.

Hola @vallejo1594 ,

Tuve un caso similar, y se trataba de un falso contacto del sensor en el breadboard, eso provocaba una falla de sincronización de la comunicación, los bits perdidos llevaban a interpretaciones erradas hasta que volvía a sincronizar, cosa que ocurría cada tanto o cuando lo movía en el breadboard.
Lo tienes soldado o en un breadboard? En el último caso prueba todas las monadas que uno suele (solemos) hacer cuando hay en un falso contacto en el breadboard...
A ver cómo va!

Buena suerte!

Gaby.//

Hi,
Normalmente el pin de salida del sensor se le debe anadir una resistensia de "PULLUP" de 1K a 10K, Anadele una para ver si resuelve el problema