NodeMCu con OLED y DHT11

Objetivos

 

  • Conectarnos a una red WiFi y mostrar la IP.
  • Leer los datos de un sensor DHT11.
  • Mostrar la temperatura y humedad en la pantalla OLED.[/three-fourth] [clear/]
  •  

    Material requerido.

     

    Vista principal Nodemcu V2
    sensor humedad y temperatura Sensor DHT11

     

    Conexión del DHT11

     

    No vamos a entrar en mucho detalle en este apartado porque ya lo hicimos en su momento en esta otra página en la que utilizamos un NodeMCU para subir los datos de un DHT11 a un servidor. Simplemente vamos a ver el esquema de conexión, y si tenéis alguna duda podéis echar un ojo aquí: NodeMCU DHT11.

    Además en esta ocasión nos vamos a centrar en adquirir los datos y mostrarlos en la pantala OLED, pero no vamos a subirlos a un servidor, pero si os interesa podéis mirarlo también en el enlace del párrafo anterior. Sería exactamente igual

    conexion dht11 esp8266 nodemcuLo que queremos hacer exactamente es  mostrar en la pantalla la red a la que estamos conectados y la IP alternándolo con la temperatura y la humedad que obtengamos.

     

    Programación

     

    Antes de empezar a programar recordad que tenemos que tener descargadas las librerías para el DHT11.zip y para la pantalla esp8266-oled-ssd1306-master. Con eso hecho ya podemos empezar. Lo primero es incluir las librerías y crear las instancias y definir las variables que vamos a necesitar:

    #include <DHT11.h>
    #include <ESP8266WiFi.h>
    #include <Wire.h>
    #include "SSD1306.h"
    
    int pin = 2;
    DHT11 dht11(pin);
    
    const char* ssid = "prometec"; //Nombre de la red WiFi a la que nos vamos a conectar
    const char* password = "*****"; //Contrasena de la red WiFi a la que nos vamos a conectar
    SSD1306 display(0x3c, 5, 4); //GPIO 5 = D1, GPIO 4 = D2
    #define flipDisplay true

    En el setup vamos a conectarnos a la red mientras mostramos el proceso en la pantalla OLED:

    void setup()
    {
     /* Inicializamos la pantalla */
     display.init();
     if (flipDisplay) display.flipScreenVertically();
    
     /* Mostramos la pantalla de bienvenida */
     display.clear();
     display.setFont(ArialMT_Plain_16);
     display.drawString(15, 25, "Prometec.net");
     display.display();
     delay (3000);
     /*Mostrar red en pantala*/
     display.clear();
     display.setFont(ArialMT_Plain_16);
     display.drawString(0, 0, "Connecting to:");
     display.drawString(0, 32, ssid);
     display.display();
    
     /*Conectarnos a la red WiFi*/
     WiFi.begin(ssid, password);
    
     while (WiFi.status() != WL_CONNECTED) {
     delay(500);
     /*Mostrar nuestra IP*/
     String ip = WiFi.localIP().toString();
     display.clear();
     display.drawString(0, 0, "Red: ");
     display.drawString(40, 0, ssid);
     display.drawString(0, 20, "IP address:");
     display.drawString(0, 40, ip);
     display.display();
     }
    }

    Y en el loop vamos a leer los datos del DHT11 y mostrarlos también en la pantalla. Lo mantendremos durante 3 segundos y entonces pasaremos a mostrar de nuevo los datos de la conexión WiFi, que mantendremos también durante tres segundos.

     void loop()
    {
     int err;
     float temp, hum;
     if ((err = dht11.read(hum, temp)) == 0) // Si devuelve 0 es que ha leido bien
     {
     display.clear();
     display.drawString(0, 0, "Temp: ");
     display.drawString(50, 0, String(temp));
     display.drawString(100, 0, "ºC");
     display.drawString(0, 20, "Hum:");
     display.drawString(50, 20, String(hum));
     display.drawString(100, 20, "%");
     display.display();
     }
     else
     {
     display.drawString(0, 0, "Error Num :");
     display.drawString(0, 20, String(err));
     }
     delay(3000); 
     /*Mostrar nuestra IP*/
     String ip = WiFi.localIP().toString();
     display.clear();
     display.drawString(0, 0, "Red: ");
     display.drawString(40, 0, ssid);
     display.drawString(0, 20, "IP address:");
     display.drawString(0, 40, ip);
     display.display();
     delay (3000);
    }

    Y con esto está todo listo. Aquí podéis descargar el programa completo:

    temp_hum 

    ¡Accede al contenido!

    os dejamos también un pequeño vídeo con el resultado.

     

    Resumen de la sesión

     

    En esta sesión hemos aprendido varias cosas importantes:
     

  • Hemos aprendido a mostrar en la pantalla OLED los datos que queramos.
  • Adquirimos los valores de temperatura y humedad de un sensor DHT11 y los mostramos en la pantalla OLED.
     

  • Deja una respuesta