Como usar o NodeMCU ESP8266 com display Oled I2C
Neste post vamos ver como incrementar o seu projeto de IoT mostrando a conexão do Módulo wifi NodeMCU ESP8266 com display Oled I2C, um componente com baixo consumo de energia, que não possui backlight e pode ajudar o seu projeto a funcionar por longos períodos economizando energia ao mesmo tempo em que mostra informações importantes na sua tela.
Para maiores informações sobre a utilização de display Oled, confira outros posts sobre display Oled I2C aqui no Arduino e Cia.
Circuito NodeMCU ESP8266 com display Oled
Vamos conectar o display Oled I2C no NodeMCU ESP8266 utilizando para a comunicação I2C os pinos D1 para o SDA e D2 para SCL, conforme o circuito abaixo:

A alimentação será feita por meio dos pinos GND e 3V3 do NodeMCU. Nesse ponto, preste bastante atenção na ligação já que em alguns displays a posição dos pinos Vcc e GND está invertida, ok?
Configurando o ESP8266 na IDE Arduino
Antes de partir para a programação do NodeMCU, precisamos configurar a IDE e inserir o ESP8266 (e consequentemente o NodeMCU) na lista de placas. Siga o procedimento abaixo.
Entre na IDE do Arduino e selecione Arquivo => Preferências. Na tela de Preferências, insira o link abaixo no campo URLs adicionais de Gerenciadores de placas:
http://arduino.esp8266.com/stable/package_esp8266com_index.json
Sua tela ficará assim:

Clique em OK para retornar à tela principal da IDE. Selecione agora o menu Ferramentas => Placa => Gerenciador de placas. Dentro do gerenciador, procure por esp8266 by ESP8266 Community e clique em instalar:

Esse procedimento disponibiliza as placas da linha ESP8266 na lista de placas da IDE do Arduino e agora basta selecionar a placa NodeMCU 1.0 (ESP-12E module) no menu Ferramentas => Placa, conforme imagem abaixo:

Com esse procedimento, estamos com a IDE configurada para o ESP8266 e prontos para carregar o programa que vai controlar o display Oled conectado no NodeMCU.
Programando o NodeMCU com IDE Arduino
Com a IDE configurada para as placas ESP8266, vamos agora instalar a biblioteca para o display Oled, que tem o controlador SSD1306. Para isso, acesse o menu Sketch => Incluir Biblioteca => Gerenciar Bibliotecas. No Gerenciador de Biblioteca (tela abaixo), procure por SSD1306 e selecione a biblioteca chamada ESP8266 and ESP32 Oled Driver for SSD1306 Display. Clique em Instalar:

Com a biblioteca devidamente instalada, carregue o programa abaixo no NodeMCU:
//Programa: NodeMCU ESP8266 com display Oled I2C
//Autor: Arduino e Cia
#include <Wire.h>
#include "SSD1306Wire.h"
//Pinos do NodeMCU
// SDA => D1
// SCL => D2
// Inicializa o display Oled
SSD1306Wire display(0x3c, D1, D2);
void setup()
{
Serial.begin(115200);
display.init();
display.flipScreenVertically();
}
void telainicial()
{
//Apaga o display
display.clear();
display.setTextAlignment(TEXT_ALIGN_CENTER);
//Seleciona a fonte
display.setFont(ArialMT_Plain_16);
display.drawString(63, 10, "NodeMCU");
display.drawString(63, 26, "ESP8266");
display.drawString(63, 45, "Display Oled");
display.display();
}
void graficos()
{
display.clear();
//Desenha um quadrado
display.drawRect(12, 12, 30, 30);
//Desenha um quadrado cheio
display.fillRect(20, 20, 35, 35);
//Desenha circulos
for (int i = 1; i < 8; i++)
{
display.setColor(WHITE);
display.drawCircle(92, 32, i * 3);
}
display.display();
}
void ProgressBar()
{
for (int counter = 0; counter <= 100; counter++)
{
display.clear();
//Desenha a barra de progresso
display.drawProgressBar(0, 32, 120, 10, counter);
//Atualiza a porcentagem completa
display.setTextAlignment(TEXT_ALIGN_CENTER);
display.drawString(64, 15, String(counter) + "%");
display.display();
delay(10);
}
}
void loop()
{
telainicial();
delay(3000);
graficos();
delay(3000);
ProgressBar();
delay(3000);
}
O programa mostra na tela exemplos de texto, como o exemplo da imagem no início deste post, e também exemplos gráficos. Confira também um exemplo prático de uso do NodeMCU ESP8266 com display Oled I2C no post Relógio com NodeMCU ESP8266 usando NTP.
Gostei,nota 10!
Seguindo o tutorial, consegui verificar e carregar no NODE MCU porém nada apareceu na tela do display OLED.
Alguém ja passou por isso?
Oi Lucas,
Tudo bem? Pode ser que o seu display oled tenha um endereço diferente do que foi usado no tutorial. Você tem alguma maneira de descobrir o endereço desse display? (por exemplo usando o Arduino e o I2C Scanner?)
Abraço!
Adilson
Tem um ESP8266, que vem com bateria e possui OLED e um joystick para controlar as funções, mas até hj nunca achei um exemplo de OLED com scroll.
http://www.areresearch.net/2018/02/the-all-you-can-possibly-want-esp8266.html#comment-form
galera estou usando um esp8266 e um sensor de oximetria (max30100) estou querendo gerar as informações no Oled so que ele so gera na porta serial o que pode ser
Seria bom o idiota que fez esse post "avisar" que se DEVE usar SSD1306Wire display(0x3c, 2,0 ) para o esp8266-01 ; e não SSD1306Wire display(0x3c, D1, D2); como esta em todos os Sketchs. Um forte abraço.
Oi Lefo!
Hahaha tranquilo. Obrigado pela dica. 🙂
Abraço!
Adilson
Lefo, você sempre foi retardado ou foi um acidente de percurso?
Adilson, parabéns pelos artigos e pela paciência com gente mau agradecida e burra!
😀
Excelente exemplo ! Exatamente o que procurava =) Vlw Adilson !! [ ] Sertorio@Credicard@1997 =) lembra ? =)
Hahahaha Grande Eduardo! 😀
Bons tempos! Abraço!
Adilson
Pessoal, bom dia, sou muito fã de todos aqui. Tenho uma dúvida. Eu acabei comprando um display OLED 128×64 1.3″ com 4 pinos, no entanto, os pinos são os seguintes: VDD, GND, SCK e SDA. Eu consigo usar nesse projeto? Pois eu conectei e apareceu uma imagem distorcida.
Forte abraço a todos.
Oi Wilson,
Consegue sim, o SCK é o SCL, no caso (clock). Se você ligou dessa maneira e não apareceu a imagem correta, pode ser alguma coisa relacionada ao endereço I2C, que está diferente do programa apresentado no post.
Para verificar o endereço I2C, recomendo o uso do I2CScanner. Tem no blog. 😉
Abraço!
Adilson
interessante, consigo usar o wifi em paralelo com o esp-now?
por exemplo um esp receber dados de vários outros e mostrar esses dados numa página web comum?
ou até mesmo carregar isso para a nuvem
Oi Gelson,
Consegue sim. Vou montar um tutorial sobre isso.
Abraço!
Adilson
Olá, tudo bem?
Posoo ligar o oled em outros pinos d3 e d4?