Arduino - Sensor de Temperatura y Humedad - Pantalla OLED

En este tutorial, vamos a aprender:

Sensor de temperatura y humedad DHT11/DHT22 para Arduino con pantalla OLED

Hardware Requerido

1×Arduino Uno R3
1×Cable USB 2.0 tipo A/B (para PC USB-A)
1×Cable USB 2.0 tipo C/B (para PC USB-C)
1×Pantalla OLED I2C SSD1306 128x64
1×Pantalla OLED I2C SSD1306 128x32
1×Sensor de Temperatura y Humedad DHT11
1×Cables Puente

You can use DHT22 sensor instead of DHT11 sensor.

1×(Recomendado) Shield de Bloque de Terminales de Tornillo para Arduino Uno
1×(Recomendado) Shield de Protoboard para Arduino Uno
1×(Recomendado) Carcasa para Arduino Uno
1×(Recomendado) Placa Base de Prototipado y Kit de Protoboard para Arduino Uno

Or you can buy the following kits:

1×DIYables STEM V3 Starter Kit (Arduino included)
1×DIYables Sensor Kit (30 sensors/displays)
1×DIYables Sensor Kit (18 sensors/displays)
Divulgación: Algunos de los enlaces proporcionados en esta sección son enlaces de afiliado de Amazon. Podemos recibir una comisión por las compras realizadas a través de estos enlaces sin costo adicional para usted. Apreciamos su apoyo.

Acerca de la pantalla OLED, sensor de temperatura y humedad DHT11 y DHT22

Si no conoces la pantalla OLED, el sensor de temperatura y humedad DHT11 y DHT22 (disposición de pines, cómo funciona, cómo programarlo ...), aprende sobre ellos en los siguientes tutoriales:

Diagrama de Cableado

Arduino - Cableado del LCD y del módulo DHT11

Diagrama de cableado del sensor DHT11 para Arduino y OLED

This image is created using Fritzing. Click to enlarge image

Arduino - Cableado del LCD para el módulo DHT22

Diagrama de cableado de Arduino para sensor DHT22 y OLED

This image is created using Fritzing. Click to enlarge image

Código de Arduino - Sensor DHT11 - OLED

/* * Este código de Arduino fue desarrollado por es.newbiely.com * Este código de Arduino se proporciona al público sin ninguna restricción. * Para tutoriales completos y diagramas de cableado, visite: * https://es.newbiely.com/tutorials/arduino/arduino-temperature-humidity-sensor-oled-display */ #include <Wire.h> #include <Adafruit_GFX.h> #include <Adafruit_SSD1306.h> #include <DHT.h> #define SCREEN_WIDTH 128 // OLED display width, in pixels #define SCREEN_HEIGHT 64 // OLED display height, in pixels #define DHTPIN 2 // pin connected to DHT11 sensor #define DHTTYPE DHT11 Adafruit_SSD1306 oled(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1); // create SSD1306 display object connected to I2C DHT dht(DHTPIN, DHTTYPE); String temperature; String humidity; void setup() { Serial.begin(9600); // initialize OLED display with address 0x3C for 128x64 if (!oled.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { Serial.println(F("SSD1306 allocation failed")); while (true) ; } delay(2000); // wait for initializing oled.clearDisplay(); // clear display oled.setTextSize(3); // text size oled.setTextColor(WHITE); // text color oled.setCursor(0, 10); // position to display dht.begin(); // initialize DHT11 the temperature and humidity sensor temperature.reserve(10); // to avoid fragmenting memory when using String humidity.reserve(10); // to avoid fragmenting memory when using String } void loop() { float humi = dht.readHumidity(); // read humidity float tempC = dht.readTemperature(); // read temperature // check if any reads failed if (isnan(humi) || isnan(tempC)) { temperature = "Failed"; humidity = "Failed"; } else { temperature = String(tempC, 1); // one decimal places temperature += char(247); // degree character temperature += "C"; humidity = String(humi, 1); // one decimal places humidity += "%"; } Serial.print(tempC); // print to Serial Monitor Serial.print("°C | " ); // print to Serial Monitor Serial.print(humi); // print to Serial Monitor Serial.println("%"); // print to Serial Monitor oledDisplayCenter(temperature, humidity); // display temperature and humidity on OLED } void oledDisplayCenter(String temperature, String humidity) { int16_t x1; int16_t y1; uint16_t width_T; uint16_t height_T; uint16_t width_H; uint16_t height_H; oled.getTextBounds(temperature, 0, 0, &x1, &y1, &width_T, &height_T); oled.getTextBounds(temperature, 0, 0, &x1, &y1, &width_H, &height_H); // display on horizontal and vertical center oled.clearDisplay(); // clear display oled.setCursor((SCREEN_WIDTH - width_T) / 2, SCREEN_HEIGHT / 2 - height_T - 5); oled.println(temperature); // text to display oled.setCursor((SCREEN_WIDTH - width_H) / 2, SCREEN_HEIGHT / 2 + 5); oled.println(humidity); // text to display oled.display(); }

Pasos R\u00e1pidos

  • Abre el IDE de Arduino en tu PC.
  • Navega al icono Bibliotecas en la barra izquierda del IDE de Arduino.
  • Busca “SSD1306”, luego encuentra la biblioteca SSD1306 de Adafruit
  • Haz clic en el botón Instalar para instalar la biblioteca.
Biblioteca OLED para Arduino
  • Se te pedirá instalar otras dependencias de la biblioteca
  • Haz clic en el botón Instalar todo para instalar todas las dependencias de la biblioteca.
Biblioteca de sensores Adafruit GFX para Arduino
  • Busca “DHT”, luego encuentra la biblioteca de sensores DHT de Adafruit
  • Haz clic en el botón Instalar para instalar la biblioteca.
Biblioteca de sensores DHT para Arduino
  • Se le pedirá instalar algunas dependencias de bibliotecas adicionales.
  • Haga clic en el botón Instalar Todo para todas las dependencias de la biblioteca.
Biblioteca de sensores unificados de Adafruit para Arduino
  • Copia el código anterior y ábrelo con el IDE de Arduino
  • Haz clic en el botón Upload en el IDE de Arduino para subir el código al Arduino
  • Coloca el sensor en agua caliente y fría, o sujétalo con la mano
  • Ver el resultado en el OLED y en el Monitor Serial

※ Nota:

El código de la sección Acerca de alinea automáticamente el texto horizontal y verticalmente en la pantalla OLED.

Código de Arduino - Sensor DHT22 - OLED

/* * Este código de Arduino fue desarrollado por es.newbiely.com * Este código de Arduino se proporciona al público sin ninguna restricción. * Para tutoriales completos y diagramas de cableado, visite: * https://es.newbiely.com/tutorials/arduino/arduino-temperature-humidity-sensor-oled-display */ #include <Wire.h> #include <Adafruit_GFX.h> #include <Adafruit_SSD1306.h> #include <DHT.h> #define SCREEN_WIDTH 128 // OLED display width, in pixels #define SCREEN_HEIGHT 64 // OLED display height, in pixels #define DHTPIN 2 // pin connected to DHT22 sensor #define DHTTYPE DHT22 Adafruit_SSD1306 oled(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1); // create SSD1306 display object connected to I2C DHT dht(DHTPIN, DHTTYPE); String temperature; String humidity; void setup() { Serial.begin(9600); // initialize OLED display with address 0x3C for 128x64 if (!oled.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { Serial.println(F("SSD1306 allocation failed")); while (true) ; } delay(2000); // wait for initializing oled.clearDisplay(); // clear display oled.setTextSize(3); // text size oled.setTextColor(WHITE); // text color oled.setCursor(0, 10); // position to display dht.begin(); // initialize DHT22 the temperature and humidity sensor temperature.reserve(10); // to avoid fragmenting memory when using String humidity.reserve(10); // to avoid fragmenting memory when using String } void loop() { float humi = dht.readHumidity(); // read humidity float tempC = dht.readTemperature(); // read temperature // check if any reads failed if (isnan(humi) || isnan(tempC)) { temperature = "Failed"; humidity = "Failed"; } else { temperature = String(tempC, 1); // one decimal places temperature += char(247); // degree character temperature += "C"; humidity = String(humi, 1); // one decimal places humidity += "%"; Serial.print(tempC); // print to Serial Monitor Serial.print("°C | " ); // print to Serial Monitor Serial.print(humi); // print to Serial Monitor Serial.println("%"); // print to Serial Monitor } oledDisplayCenter(temperature, humidity); // display temperature and humidity on OLED } void oledDisplayCenter(String temperature, String humidity) { int16_t x1; int16_t y1; uint16_t width_T; uint16_t height_T; uint16_t width_H; uint16_t height_H; oled.getTextBounds(temperature, 0, 0, &x1, &y1, &width_T, &height_T); oled.getTextBounds(temperature, 0, 0, &x1, &y1, &width_H, &height_H); // display on horizontal and vertical center oled.clearDisplay(); // clear display oled.setCursor((SCREEN_WIDTH - width_T) / 2, SCREEN_HEIGHT / 2 - height_T - 5); oled.println(temperature); // text to display oled.setCursor((SCREEN_WIDTH - width_H) / 2, SCREEN_HEIGHT / 2 + 5); oled.println(humidity); // text to display oled.display(); }

※ Nota:

El código para DHT11 y DHT22 es idéntico, excepto por una línea de código. La biblioteca para DHT11 y DHT22 es la misma.

Video Tutorial

Estamos considerando crear tutoriales en video. Si considera que los tutoriales en video son importantes, suscríbase a nuestro canal de YouTube para motivarnos a crear los videos.

※ NUESTROS MENSAJES

  • No dude en compartir el enlace de este tutorial. Sin embargo, por favor no use nuestro contenido en otros sitios web. Hemos invertido mucho esfuerzo y tiempo en crear el contenido, ¡por favor respete nuestro trabajo!