Conectar una pantalla OLED SSD1306 a ESPEasy

Última modificación el 19 enero, 2021

Vamos a ver, paso a paso, como podemos añadir una pantalla a nuestro proyecto con NodeMCU y ESPEasy.

En este caso, vamos a hacerlo sobre el medidor de CO2 que publiqué hace unos días, pero se puede hacer con cualquier otro tipo de proyecto.

Una de las ventajas de ESPEasy (y mi favorita, sin duda), es que nos permite conectar a nuestro proyecto muchos accesorios diferentes sin tener que programar ni complicarnos la vida con modificaciones o adaptaciones de firmware. Uno de los elementos más interesantes son las pantallas, o “displays“.

Y no es que nos permita conectar muy fácilmente “una pantalla“, es que son muchas las pantallas diferentes que podemos conectar casi sin esfuerzo.

En este caso he decidido añadir al medidor de CO2 una pantalla de tipo SSD1306 OLED monocromo (caracteres en azul sobre fondo negro) de 0.96 pulgadas (0.96″).

Me he decidido por esta pantalla por estas dos ventajas, aunque no son las únicas:

  • Utiliza solamente dos cables de datos (más los dos de alimentación). Lo que supone que es extremadamente fácil de conectar y, además, al utilizar solo dos pines, deja un montón de pines libres para conectar otros accesorios.
  • La tecnología OLED tiene muy bajo consumo. Importante para quien quiera utilizar la pantalla en un proyecto portable con baterías.
  • Se ve bastante bien en exteriores. Cosa muy importante en determinadas ocasiones.
  • Bajo precio. Estas pantallas se pueden conseguir por unos 3€ con envío desde China o unos 7€ desde España.

Módulo de pantalla blanca OLED IIC de 0,96 pulgadas 128X64 I2C SSD1306

En AliExpress puedes comprar la pantalla SSD1306 por unos 3 Euros, con envío incluido, desde este enlace. Es una tienda con muchas valoraciones positivas y el envío es por AliExpress Standard Shipping, por lo que deberías tenerlo en casa en unas dos semanas.

AZDelivery Modulo Pantalla OLED Display I2C 128 x 64 pixeles 0.96 Pulgadas con caracteres blancos compatible con Arduino y Raspberry Pi con E-Book incluido!
  • ✔️️ La pantalla OLED de AZDelivery de 128 x 64 pixeles tiene un contraste fuerte en la amplia pantalla de 0.96 pulgadas gracias a la innovadora tecnología OLED.
  • ✔️️ Por la alta resolución de 128 x 64 píxeles, la pantalla brinda un amplio espacio para la visualización de muchos elementos.
  • ✔️️ ¡Fácil conexión de la pantalla con Arduino, Raspberry Pi y otros microcontroladores por la interfaz I2C a través de sólo cuatro pines! Gracias al adaptador de pantalla integrado, el módulo puede ser conectado al bus I2C inmediatamente.
  • ✔️️ Cambiando la dirección I2C y soldando un tercer contacto, se pueden operar dos pantallas simultáneamente. El módulo OLED puede ser conectado a 3.3 V.
  • ✔️ ¡Bienvenido a la familia AZDelivery! Aquí encontrará productos de alta calidad para sus proyectos con Arduino y Raspberry Pi. Nos complace ofrecerle una serie de ejemplos de aplicación, guías completas de instalación, E-Books, bibliotecas y asistencia personalizada. ⭐️⭐️⭐️⭐️⭐️ ¡AZDelivery: ¡Su Experto en Microelectrónica!

* IMPORTANTE: Si vas a hacer tu primera compra en AliExpress, entra a través de este enlace recibirás 21€ en cupones de descuento para tus compras.

Conexión de la pantalla SSD1306 al NodeMCU

La conexión no puede ser más fácil. Tenemos que hacer cuatro conexiones. Dos para la alimentación y dos para los datos.

Solamente tenemos que conectar:

  • VDD de SSD1306 a Vin de NodeMCU
  • GND de SSD1306 a GND de NodeMCU
  • SCL de SSD1306 a D1 de NodeMCU
  • SDA de SSD1306 a D2 de NodeMCU

Te dejo el diagrama también en este formato, por si te resulta más sencillo.

Ten en cuenta que en ambos diagramas he utilizado los cables gris y blanco al revés. No mezcles un diagrama con otro.

Ten cuidado porque la serigrafía de la mayoría de las placas NodeMCU V3 están mal y pone D2 en vez de D1 (hay dos D1).

Obviamente D1 es la que aparece marcada erróneamente como D2 entre D0 y “la otra” D2.

IMPORTANTE: No te fíes del orden de las conexiones y compruébalas dos veces en tu placa. Como indica el usuario Zulú, en los comentarios, algunas veces diferentes fabricantes hacen cambios de ese tipo que nos pueden amargar el día, si no tenemos cuidado.

La conexión a otra placa, diferente al NodeMCU (Wemos D1 Mini, por ejemplo), basada en ESP8266, u otra pasada en ESP32, será muy parecida. Solamente tendremos que estar atentos al cambio en las conexiones.

Configuración

La configuración es, igualmente, muy sencilla.

Tenemos que seguir los siguientes pasos (pulsa en cada imagen para verla más grande):

Vamos a Tools -> I2C Scan.

Esto hará un escaneo de los dispositivos conectados al NodeMCU mediante I2C, y nos los mostrará.


Nos debería aparecer algo similar a esto.

Significa que ESPEasy ha detectado la pantalla un dispositivo de tipo PCF8574A OLED en la dirección 0x3C


Vamos a Devices

Aquí veremos la lista de dispositivos que tenemos creados (si es que hay alguno, si lo estamos haciendo con el medidor de CO2 nos debería aparecer el sensor MH-Z19)


Pulsamos en Add, en un dispositivo libre, para añadir nuestro nuevo dispositivo.


Seleccionamos del desplegable el dispositivo que queremos añadir, en este caso “Display – OLED SSD1306”


Introducimos los datos de configuración:

  1. El nombre que queremos darle al dispositivo
  2. Habilitamos el dispositivo
  3. Seleccionamos “Normal” o “Rotated” según si tenemos la pantalla con los pines arriba o abajo
  4. La resolución de la pantalla en pixels. Con la pantalla que yo estoy usando 128×64
  5. El tamaño de los caracteres. Prueba a ver cuál te gusta.
  6. Desde “Line 1” hasta “Line 8” pondremos las ocho posibles líneas que queremos que aparezcan en la pantalla, tal y como explico más adelante.
  7. Tenemos la opción de conectar un pulsador a uno de los pines de NodeMCU para encender la pantalla, de mono que normalmente esté apagada.
  8. El tiempo que tardará en apagarse la pantalla si la encendemos mediante el botón del punto 7.
  9. El tiempo de actualización de la pantalla. Cada cuanto tiempo se actualizarán los datos.

Cuando estemos conformes con la configuración, pulsamos “Submit” y ya deberíamos empezar a ver información en la pantalla.

Mostrando texto en la pantalla SSD1306

La pantalla SSD1306 nos permite mostrar, en la configuración que hemos visto anteriormente, ocho líneas de texto.

Estas ocho líneas de texto pueden contener los siguientes tipos de datos:

  • Un texto fijo
  • El valor de un sensor
  • Una variable de ESPEasy como, por ejemplo, la hora actual.

Mostrando texto fijo

Como hemos visto en el punto anterior, tenemos ocho líneas de texto en las que podemos mostrar tanto un texto fijo (en el ejemplo anterior, en la línea 1 se muestra el texto fijo ” MEDIDOR CO2″ con dos espacios por delante para que aparezca centrado en la pantalla).

Para mostrar texto fijo, simplemente tenemos que teclear el texto que queremos mostrar en la línea correspondiente.

Podemos añadir mayúsculas, minúsculas y algunos caracteres especiales mediante la inclusión de ciertos códigos (nota que no es posible escribir vocales acentuadas):

NombreCaracterCódigo
Grados˚{D}
Grados centígrados˚CdegreeC
degree_C
Comillas francesas«
»
{<<}
{>>}
Letra griega Microµ{u}
Moneda€
Â¥
£
¢
{E}
{Y}
{P}
{c}
Símbolos matemáticosx¹
x²
x³
¼
½
¾
±
×
÷
{^1}
{^2}
{^3}
{1_4}
{1_2}
{3_4}
{+-}
{x}
{..}

Mostrando el valor de los dispositivos

Para mostrar el valor de un dispositivo (un sensor de temperatura, humedad, CO2 o cualquier otra cosa) solamente tenemos que incluir el nombre de dispositivo y el valor que queremos mostrar en el formato [DISPOSITIVO#VALOR]

En el ejemplo he mostrado el valor PPM del dispositivo CO2.

Si vemos la configuración de ese dispositivo (desde la pestaña Devices y seleccionando el dispositivo que queremos ver):

Podemos ver que el nombre del dispositivo es “CO2” y el valor que queremos mostrar en pantalla es “PPM”, por tanto, tendremos que poner en la línea en la que queramos mostrarlo [CO2#PPM].

Mostrando variables del sistema

Existen un número de variables que actualiza el propio ESPEasy y que podemos mostrar.

Estas variables son las siguientes:

  • %sysname% – Se sustituye por el nombre de la unidad de ESPEasy (definido en la pestaña Config).
  • %ip% – Se sustituye por la IP del ESPEasy
  • %systime% – Se sustituye por la hora actual

Combinando los tres

Podemos combinar en una misma línea texto fijo, valores de sensores y variables de ESPEasy, lo que nos permite por ejemplo poner en una línea “CO2: [CO2#PPM] ppm” para poder incluir un título, antes del valor del sensor, y las unidades después.

También podríamos escribir “HORA: %sistime%” o “IP: %ip%”

Configuración de NTP en ESPEasy, o “poniendo el NodeMCU en hora”

Si quieres mostrar la hora actual en pantalla, mediante %sistime%”, o la necesitas por algún otro motivo, tienes que tener en cuenta que el NodeMCU no tiene reloj interno por lo que necesita consultar la hora de internet.

Esto lo hace mediante el protocolo NTP (Network Time Protocol, o Protocolo de Tiempo de Red, en español), que es un sistema de uso muy habitual en equipos informáticos (probablemente tu equipo lo utilice, aunque tú no lo sepas, como es el caso de Windows y de Mac OS) y ESPEasy está preparado para utilizarlo muy fácilmente.

Para configurarlo tendremos que seguir una serie de pasos:

  1. Vamos a la pestaña “Tools” (Herramientas)
  2. Seleccionamos la opción “Advanced Settings” (Ajustes Avanzados)
  3. Activamos el uso del protocolo NTP y asignamos como servidor de tiempo europe.pool.ntp.org (o el que prefieras)
  4. Activamos la opción DST para que ESPEasy realice automáticamente el cambio de hora de verano e invierno
  5. Introducimos la diferencia horaria que corresponda. En España 60 minutos, excepto Canarias que son 0.

Instrucciones paso a paso en video

Aunque el proceso es sencillo, y no debería dar demasiados quebraderos de cabeza a nadie, he grabado un video con las instrucciones paso a paso para añadir la pantalla.

Aún más opciones

Si quieres, todavía más opciones de visualización, te recomiendo que al seleccionar el display en el desplegable de ESPEasy pruebes el “Display – OLED SSD1306/SH1106 Framed” (en lugar del “Display – OLED SSD1306” que hemos utilizado antes).

El “Display – OLED SSD1306/SH1106 Framed” consume algo más de memoria del ESP8266 que el “Display – OLED SSD1306“, por lo que en dispositivos con muchos sensores conectados o muchas reglas extensas podría llegar a darte problemas de memoria.

Yo lo he utilizado para escribir el artículo Sensores de CO2 MH-Z19B FALSOS y en el video que le acompaña, con dos sensores MH-Z19B conectados (uno original y otro falso), el display SSD1306 y tres LED WS2812B sin ningún problema, y todavía queda memoria libre para más cosas.

La puesta en marcha es prácticamente igual. Así es como lo tengo configurado yo:

Y así el contenido (en este caso le digo que oculte la cabecera (donde podría salir el SSID de la red wifi, entre otros muchos datos), le digo que si hay alguna línea demasiado larga haga scroll, que encienda el display al llegar nuevo texto -por si lo hubiera apagado desde alguna regla-, y el Line 1 y Line 2 pongo que me muestre los datos de los dos sensores que tengo conectados.

Si te ha gustado esta página, compártela.

10 comentarios en «Conectar una pantalla OLED SSD1306 a ESPEasy»

  1. Muchas gracias por tomarte el trabajo de compartir estos proyectos.
    Anoche acabé de configurar el sensor de CO2 y aprovechando que tenía por un cajón una pantalla OLED que nunca puse a un ala volante con INAV , voy a completar el proyecto del CO2 con la pantalla , que me parece más cómoda de manejar y muy fácil de instalar con tus magníficas explicaciones.
    Y una pregunta, como hay que hacer para conectar el
    NodeMcu a otra red wifi si nos lo llevamos a otro sitio ?
    Muchas Gracias.
    Saludos.

    Responder
    • Hola Zulú.

      Estupendo, ya nos contarás que tal te ha ido con la pantalla y si, al seguir el tutorial, encuentras algún fallo o algo que haya que mejorar.

      Sobre el tema de la wifi, si te lo llevas a otro sitio:

      Te hablo de memoria, pero creo recordar que sí el ESPEasy no es capaz de conectarse al punto de acceso que tiene configurado (como sería el caso que tú dices, cuando te lo llevas a otro sitio), te vuelve a crear el punto de acceso con SSID “ESPEasy” (como vimos en el tutorial de instalación) para que te conectes a él desde el móvil y puedas configurar el punto de acceso que quieras en ese momento.

      De todas formas, yo lo que haría, si lo fuera a usar en “portable” a menudo, sería configurar en mi móvil la “Zona Wifi” para compartir su conexión mediante wifi, poniéndole como SSID y password las mismas que tenga en casa.
      De esta forma, cuando lo enciendas fuera de casa, con el móvil compartiendo la conexión, se conectará a él automáticamente.
      Esto en Android se puede hacer sin problema, en iOS (iPhone) no me acuerdo, porque hace tiempo que no lo uso.

      Responder
  2. Que buena idea lo de la Zona WiFi con el mismo SSID y password que la de casa ¡
    Ya lo tengo todo funcionando incluida la pantalla OLED.
    He cambiado algunas líneas para adaptarlas a mis necesidades y la verdad es que es superfácil : cambias lo que sea , le das a Submit e inmediatamente ves los cambios en la pantalla y asi hasta dejarlo al gusto de cada uno.
    La única incidencia que he tenido al seguir el tutorial es que en el dibujo del cableado de la SSD1306 al NodeMCU los cables Rojo (VCC)y Negro (GND) en mi pantalla que también es una SSD1306 vienen cambiados, supongo que será otro fabricante. No estaría de mas advertir que eso puede pasar y que no hay que fiarse solo de los colores sino comprobar dos veces el positivo y el negativo , el resultado puede ser desastroso, lo digo por experiencias anteriores. :-).
    Por lo demás todo fenomenal. Un diez.
    Estaré atento a nuevas mejoras de este proyecto , y le echaré un vistazo a la CNC a ver si soy capaz de hacer algo , es un artilugio que no debería faltar en ningún taller de aeromodelismo.
    Muchas gracias.
    Un saludo.

    Responder
    • Muchas gracias por todo.

      Sobre el aviso a cerca de las conexiones, muchas gracias, igualmente, ya lo he incluido en el artículo y, aprovechando que justo estaba montando el video con el tutorial, me ha venido muy bien para incluirlo también.

      Si haces el proyecto de la CNC tennos al corriente de tus avances. Efectivamente, para temas de aeromodelismo, tiene muchísimas posibilidades.

      Responder
  3. Hola Mariete, lo primero agradecerte tanto esfuerzo por explicarnos a los “ignorantes” en esta materia todos los pasos para crearnos el medidor Co2, tengo ya todo comprado y deseando llegue para montarlo y experimentar. Te quería preguntar una duda que me surge, ¿la toma de energía (alimentación) del medidor, de dónde sale, si es portátil? y por otro lado, ¿nos pues recomendar alguna caja que tenga aireación para que no se caliente y lo podamos montar quedando cuco?… jejeje
    Muchas gracias por darnos tu tiempo
    Saludos

    Responder
    • Hola Luis.

      Muchas gracias a ti ?

      Espero que te salga bien a la primera, la mayoría no ha tenido dificultad. Si te surge alguna duda, ya ves que aquí empieza a haber, entre todos, una base de conocimiento importante, por lo que es fácil que puedas encontrar la ayuda que necesites.

      La alimentación es a través del USB. Cualquier cargador de móvil a partir de 500mA te servirá. Mientras que tenga más de 500mA, reales, no tendrás problemas. Lo recomendable es utilizar un cargador de, al menos, 1A (1000mA) para evitar posibles problemas. También puedes utilizarlo con los “power bank” de baterías sin problema (yo los uso para dejarlos alguna vez, una noche, en el exterior para que se autocalibren).

      Ten en cuenta que el consumo es relativamente alto, por lo que no es posible utilizarlo con baterías permanentemente.

      Sobre la caja… no he visto nada demasiado interesante. La mejor opción son las cajas impresas en 3D.

      Responder

Deja un comentario