Hoje vou mostrar para você como utilizar um display de LCD de TFT no NodeMCU ESP8266 para exibir dados de temperatura e umidade de um determinado ambiente em tempo real. Faço um exemplo de uso do display com o DHT22, que é o medidor de temperatura e umidade. Neste vídeo, especificamente, uso um display compacto para esse nosso termômetro digital, o qual é gráfico e permite monitoramento no próprio sistema. O objeto de hoje, portanto, é aprender sobre o manuseio do display de cristal líquido usando o ESP8266.
Módulo gráfico LCD 128x128 RGB TFT ILI 9163C
O display que utilizamos neste
projeto é 128x128 pixels. O 0,0 fica no canto superior esquerdo e este modelo
tem tanto funções de impressão de texto quanto impressões gráficas, as quais
vamos tratar mais a frente.
Sensor de Umidade e Temperatura AM2302 DHT22
Vamos utilizar na nossa
montagem o AM2302 DHT22, que um sensor que gosto bastante por ser bem preciso.
Circuito
No projeto nós temos um
ESP8266 já programado e utilizando a alimentação pela USB. O DHT22 está ligado
com o Data e com o resistor pull up para o ESP8266, o qual controla o display
LCD.
Montagem
Temos aqui o esquema elétrico da
nossa montagem, que mostra o NodeMCU, o sensor e o display. Lembrando que este
é um display serial, i2c, ou seja, de utilização mais fácil por possuir mais
pinos.
Biblioteca
Como vamos programar o display
com a linguagem C do arduino, precisamos da biblioteca do DHT22 bem como do
LCD.
Então, primeiro, adicione a
seguinte biblioteca “DHT sensor library” para comunicação com o sensor de
umidade e temperatura.
Basta acessar “Sketch >>
Incluir Bibliotecas >> Gerenciar Bibliotecas...”
Agora, adicione a seguinte
biblioteca “Adafruit-GFX-Library-master”.
Basta acessar “Sketch >>
Incluir Bibliotecas >> Gerenciar Bibliotecas...”
Adicione também a biblioteca
“TFT_ILI9163C” para comunicação com o módulo gráfico LCD.
Acesse o link e faça download da biblioteca.
Descompacte o arquivo e cole
na pasta de bibliotecas da IDE do arduino.
C:/Program Files
(x86)/Arduino/libraries
Código
Primeiramente vamos adicionar
as bibliotecas que serão utilizadas em nosso código.
#include <TFT_ILI9163C.h> //utilizada para se comunicar com o módulo LCD #include <DHT.h> //utilizada para se comunicar com o sensor de umidade e temperatura
Definições
Veremos abaixo as variáveis
que utilizaremos durante o programa e a instância dos objetos.
#define DHTPIN D6 // pino que conectaremos o sensor DHT22 #define DHTTYPE DHT22 // DHT22 é o tipo do sensor que utilizaremos (importante para o construtor) DHT dht(DHTPIN, DHTTYPE); // construtor do objeto que utilizaremos para se comunicar com o sensor // Color definitions #define BLACK 0x0000 #define BLUE 0x001F #define RED 0xF800 #define GREEN 0x07E0 #define CYAN 0x07FF #define MAGENTA 0xF81F #define YELLOW 0xFFE0 #define WHITE 0xFFFF #define __CS D1 // pino que conectaremos o CS do módulo LCD #define __DC D4 // pino que conectaremos o RS do módulo LCD TFT_ILI9163C display = TFT_ILI9163C(__CS, __DC); // construtor do objeto que utilizaremos para se comunicar com o módulo LCD
Setup
Na função setup(), faremos a
inicialização da variável “dht”, que é responsável pela comunicação com o
sensor de umidade e temperatura, inicializaremos também a variável “display”
que utilizaremos para se comunicar com o módulo LCD.
Também faremos a configuração
do objeto para começar a desenhar em tela.
void setup(void) { dht.begin(); // inicialização para se comunicar com o sensor display.begin(); // inicialização para se comunicar com o módulo LCD display.clearScreen(); // limpa a tela, removendo todos os desenhos display.fillScreen(BLACK); // pinta a tela toda de preto display.setTextSize(2); // configura o tamanho do texto com o tamanho 2 display.setTextColor(GREEN); // configura a cor do texto como verde display.setCursor(5,10); // posiciona o cursor para começar a escrita a partir do (x,y) display.print("TEMPERATUR"); // escreve em tela display.setCursor(22,70); // reposiciona o cursor display.print("UMIDADE"); // escreve em tela display.setTextColor(WHITE); // configura a cor do texto como branco (a partir de agora) delay(1000); // espera de 1 segundo }
Loop
Na função loop(), vamos
recuperar a umidade e temperatura lida pelo sensor e escrever na tela no local
específico. A cada intervalo de 5 segundos o valor é lido do sensor e escrito
em tela.
void loop() { int h = dht.readHumidity(); // faz a leitura da umidade do sensor int t = dht.readTemperature(); // faz a leitura da temperatura do sensor //as 2 linhas seguintes utilizando o método “fillRect”, são para fazer a limpeza do local onde escreveremos a umidade e a temperatura, apagaremos o valor atual para escrever novamente atualizado. display.fillRect(5,32,120,20,BLACK); // fillRect(x,y, width, height, color); display.fillRect(5,92,120,20,BLACK); display.setCursor(40,35); // reposiciona o cursor para escrever display.print(t); // escreve a temperatura em tela display.print((char)247); // escreve o símbolo de grau ° através de código display.print("C"); // coloca o “C” para indicar que é graus Celcius display.setCursor(40,95); // reposiciona o cursor para escrever display.print(h); // escreve a umidade em tela display.print("%"); // escreve o símbolo de “porcentagem” para indicar a umidade delay(5000); }
Algumas outras funções interessantes
//rotaciona o conteúdo da tela
(parâmetros 0,1,2 ou 3)
display.setRotation(uint8_t);
//inverte as cores do display
(faz um negativo)
display.invertDisplay(boolean);
//desenha um único pixel na
tela na posição (x,y)
display.drawPixel(x, y,
color);
//desenha uma linha vertical
na posição
display.drawFastVLine(x, y,
width, color);
//desenha uma linha vertical
na posição especificada
display.drawFastHLine(x, y,
width, color);
//desenha uma linha horizontal
na posição especificada
display.drawRect(x, y, width,
heigh, color);
//desenha um círculo na
posição especificada
display.drawCircle(x, y,
radius, color);
Arquivos para download:
2 Comentários
Parabéns!! O blog está incrível!!! ótima explicação sobre o ESP!!!
ResponderExcluirMuito bom....vou me escrever...
ResponderExcluir