Nosso principal objetivo aqui
é mostrar o funcionamento do módulo serial i2c para Display LCD 2x16 ou 20x4.
Com esse módulo podemos controlar os displays citados acima, utilizando apenas dois
pinos (SDA e SCL), torna muito simples a comunicação, deixando ainda vários outros
GPIOs de nosso microcontrolador livres.
Vamos mostrar o funcionamento
tanto no arduino UNO como no ESP8266. Acompanhe!
Arduino Uno
WiFi ESP8266 NodeMcu ESP-12E
Display LCD 16x2 Serial
Módulo Serial i2c
Nesta parte mostramos o adaptador que foi comprado separadamente, no qual soldamos ao display paralelo na parte de trás. Através dos pinos i2c, o display, então, vai comunicar direto com o Arduino. Portanto, através de um microcontrolador, esse Arduino vai gerenciar todos os comandos para o display, facilitando tanto sua conexão quanto sua programação.
Módulo Serial i2c conectado no Display LCD
Montagem com Arduino
Montagem com ESP8266
Biblioteca
Adicione a biblioteca
“LiquidCrystal_I2C” para comunicação com o display LCD.
Acesse o linke 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 Fonte
Começamos definindo as
bibliotecas e constantes que utilizaremos durante nosso código.
#include <Wire.h> // responsável pela comunicação com a interface i2c #include <LiquidCrystal_I2C.h> // responsável pela comunicação com o display LCD // Inicializa o display no endereço 0x27 //os demais parâmetros, são necessários para o módulo conversar com o LCD //porém podemos utilizar os pinos normalmente sem interferência //parâmetro: POSITIVE > > Backligh LIGADO | NEGATIVE > > Backlight desligado LiquidCrystal_I2C lcd(0x27,2,1,0,4,5,6,7,3, POSITIVE);
Setup
Aqui apenas inicializaremos
nosso objeto para comunicação com o display.
void setup() { //inicializa o display (16 colunas x 2 linhas) lcd.begin (16,2); // ou 20,4 se for o display 20x4 }
Loop
Nosso programa fará com que o
display fique piscando a cada 1 segundo. Um programa simples, mas que já
envolve tudo que precisamos para nos comunicar com o display.
Acender/apagar backlight,
posicionar cursor para escrita e escrever.
void loop() { //acende o backlight do LCD lcd.setBacklight(HIGH); //posiciona o cursor para escrita //.setCursor(coluna, linha) lcd.setCursor(0,0); lcd.print("FERNANDOK.COM"); lcd.setCursor(0,1); lcd.print("ACESSE!!!"); delay(1000); //intervalo de 1s //desliga o backlight do LCD lcd.setBacklight(LOW); delay(1000); //intervalo de 1s }
15 Comentários
Legal! Parabéns pelo vídeo. Explicação muita clara e objetiva!
ResponderExcluirComo o arduino sabe que as portas A4 e A5 são para comunicação? Como mudar o end do conversor?
ResponderExcluirexit status 1
ResponderExcluir'POSITIVE' was not declared in this scope
Boa tarde
Excluiro meu está dando o mesmo erro.
conseguiu resolver? como?
Grato
Tenta mudar o nome da pasta da biblioteca do I2C para "LiquidCristal_I2C"
ExcluirO meu esta dando um erro na wire, o código funciona ´perfeitamente no arduino mas no nodemcu da um erro: C:\Users\Tales\Documents\Arduino\libraries\Wire\utility\twi.c:25:20: fatal error: avr/io.h: No such file or directory
ResponderExcluir#include
Tenho que mudar alguma configuração no código quando se usa outra porta no NodeMCU (ESP8266)?
ResponderExcluirO meu não funcionou
ResponderExcluirdeu erro.
O meu deu esse erro:
ResponderExcluirArduino/libraries/LiquidCrystal/LiquidCrystal.cpp:179:48: error: 'analogWrite' was not declared in this scope
analogWrite ( _backlightPin, value );
Comigo deu o mesmo erro, é só abrir o arquivo LiquidCrystal.cpp e ir até a parte onde o analogWrite está escrito e colocar como comentário, ou simplesmente apagar esse trecho
ExcluirAqui o código compila normalmente, mas o lcd não liga
ResponderExcluirSe conseguiu fala, está dando o mesmo problema cmg
Excluirna ESP não funciona. Ele acende e apaga a luz de fundo, mas escrever não escreve nada. Desconfio que seja por conta dos pinos SDA e SCL
ResponderExcluirFernando, muito bom o conteúdo, como sempre.
ResponderExcluirEstou com dificuldades para usar dois módulos I2C simultaneamente em um ESP8266 NodeMcu ESP-12E.
Estou tentando usar um display oled e um sensor de temperatura hdc10880, a ligação segue o seu exemplo,
os pinos SDA do sensor e do display estão ligados na GPIO D2 e os pinos SDL estão ligados na GPIO D1.
Não consigo fazer os dois funcionarem simultaneamente.
Consegue me dar uma ajuda, por favor?
Abaixo segue o código.
No exemplo abaixo as linhas relacionadas ao Display estão comentadas e dessa forma o sensor funciona e o scan dos dispositivos I2C retorna o endereço do sensor. Quando descomento as linhas do display, o display funciona, o sensor para de funcionar e o scan retorna apenas o endereço do display.
#include
#include
#include "SSD1306Wire.h"
ClosedCube_HDC1080 hdc1080;
//SSD1306Wire display(0x3c);
void setup()
{
Wire.begin();
Serial.begin(115200);
hdc1080.begin(0x40);
Serial.println("Sensor HDC1080 com Arduino");
//display.init();
// display.flipScreenVertically();
}
void loop()
{
//Le os valores de temperatura e umidade
float t = hdc1080.readTemperature();
float h = hdc1080.readHumidity();
Serial.print("Temperatura: ");
Serial.print(t);
Serial.print(" C, Umidade: ");
Serial.print(h);
Serial.println(" %");
// display.clear();
// display.setFont(ArialMT_Plain_10);
// display.drawString(10, 15, String(t));
// display.drawString(10, 30, String(millis()));
// display.display();
delay(3000);
scan();
}
void scan()
{
byte error, address;
int nDevices;
Serial.println("Scanning...");
nDevices = 0;
for(address = 1; address < 127; address++ )
{
Wire.beginTransmission(address);
error = Wire.endTransmission();
if (error == 0)
{
Serial.print("I2C device found at address 0x");
if (address<16)
Serial.print("0");
Serial.print(address,HEX);
Serial.println(" !");
nDevices++;
}
else if (error==4)
{
Serial.print("Unknow error at address 0x");
if (address<16)
Serial.print("0");
Serial.println(address,HEX);
}
}
if (nDevices == 0)
Serial.println("No I2C devices found\n");
else
Serial.println("done\n");
}
Olá Fernando não consigo baixar a biblioteca tem outro link.
ResponderExcluirAgradeço o excelente trabalho.