CENTRAL DE ATENDIMENTO
De segunda à sexta das 8:00 às 17:30
(11) 3522-7626 / vendas@robocore.net
Retornar
ao topo

Módulo I2C - Primeiros Passos



O Módulo LCD I²C ou I2C é ideal para ser utilizado em projetos envolvendo LCDs, podendo estar presente em projetos com Arduino ou outros Microcontroladores que tenham suporte ao protocolo I²C onde há diversos dispositivos (não necessariamente LCDs) que comunicarão entre si com apenas duas linhas de dados.
O protocolo I²C foi desenvolvido pela Philips (atual NXP) visando conectar diversos dispositivos (periféricos) utilizando apenas as duas linhas de dados citados acima (SDA e SCL) Serial Data e Serial Clock. A ideia principal é definir um endereço hexadecimal para cada dispositivo e no momento de comunicação somente o dispositivo solicitado responderá.

Conhecendo cada um dos itens do Módulo LCD I²C:
  • DIP SWITCH: Define o endereço do seu dispositivo (podendo ir de 0x20 a 0x27).
  • Trimpot (potenciômetro): Para quantificar a luminosidade do Backlight do seu Display LCD
  • Conectores Latch (ou IDC): Utilizando Jumpers M/F ou F/F você conecterá o módulo tanto com seu Mestre (no caso desse tutorial uma BlackBoard) quanto a seus Slaves.

Para módulos I2C adquiridos até Agosto de 2020, utilize a tabela a seguir.



Para módulos I2C adquiridos após Agosto de 2020, utilize a tabela a seguir.




Para começar nosso tutorial precisamos primeiramente instalar a Biblioteca LiquidCrystal_I2C disponível clicando aqui.
Caso não saiba adicionar uma biblioteca na IDE dê uma olhada no tutorial: Adicionando Bibliotecas na IDE do Arduino.


Nota: o módulo I2C pode ser soldado sob o LCD, desde que sejam feitas as mesmas conexões (exemplo).

Abaixo segue um código básico de Hello World no endereço 0x20 (no conector DIP SWITCH eles devem estar todos setados para cima conforme a ilustração acima):


Agora que já sabemos imprimir na tela do LCD uma informação, vamos a um exemplo que tem como função exibir na Tela do LCD qual a temperatura captada por um LM35. Lembrando que o intuito deste código é apresentar algumas funções disponíveis na Biblioteca. O endereço agora será 0x27 altere o endereço no DIP Switch, deixe todos setados para baixo.


Solução de Problemas

Endereço I2C não está Funcionando

Caso esteja tendo dificuldades em obter ou acessar o endereço I2C do seu módulo, utilize o exemplo "i2c_scanner" da Arduino IDE (Arquivo > Exemplos > Wire), para obter mais facilmente o endereço correspondente do seu módulo. Se o exemplo retornar um erro pelo monitor serial ao escanear pelo endereço, tente inverter a conexão dos pinos SDA e SCL do circuito.

Vale lembrar que, após obter o endereço do módulo, é necessário alterar o endereço no código também.



Para fazer comentários é necessário estar logado. Efetuar login.

Você ainda nao é cadastrado? Cadastre-se agora!


doutorfaria
date Enviado: 2020-10-07 18:40:03
Estava com um problema, após seguir todos passos ficava uma linha preenchida, não aparecia menssagem, passei scaner e descobri..................endereço errado, não é 0x27 é 0x38

Giovanni5
date Enviado: 2020-10-08 08:04:31
doutorfaria
Isso é bem estranho, pois nenhum dos módulos I2C que vendemos possui possibilidade para o endereço 0x38, o conjunto está funcionando corretamente? Por gentileza encaminhe um e-mail para suporte@robocore.net, com o número do seu pedido, uma captura de tela do resultado no monitor serial do exemplo "i2c_sacnner" (Arquivo > Exemplos > Wire), e algumas fotos do módulo recebido.

lcmoro2009
date Enviado: 2020-10-03 09:34:44
Bom dia, estou tentando um projeto com relógio digital LCD+I2C+RTC DS3231...  não consigo acertar a programação, aparece erro 'POSITIVE' was not declared in this scope, já baixei as bibliotecas e o erro persiste. Estou usando a linha >LiquidCrystal_I2C LCD(0x27,2,1,0,4,5,6,7,3, POSITIVE)...Tentei somente verificar e não enviar para o Arduino, mas mesmo assim aparece este erro...Se usar a linha >LiquidCrystal_I2C lcd(0x20,16,2) estaria certo também, pode ajudar?

Giovanni5
date Enviado: 2020-10-05 08:39:52
lcmoro2009
O objeto "LCD" da biblioteca "LiquidCrystal_I2C" deve ser criado com o endereço I2C da comunicação (no seu caso 0x27), e com o número de colunas e linhas, respectivamente. Portanto, se você estiver utilizando um display 16x2, é necessário utilizar o comando "LiquidCrystal_I2C lcd(0x27,16,2)", e se estiver utilizando um display 20x4, é necessário usar o comando "LiquidCrystal_I2C lcd(0x27,20,4)".  O comando que você comentou ("LiquidCrystal_I2C LCD(0x27,2,1,0,4,5,6,7,3, POSITIVE)") é considerado errado para a biblioteca, pois ele possui parâmetros demais.

lcmoro2009
date Enviado: 2020-10-05 12:28:52
lcmoro2009
Ok... Obrigado 👍👍

brendapeixoto5
date Enviado: 2020-09-10 09:11:29
Como seria a ligação do I2C com o Esp32?

Giovanni5
date Enviado: 2020-09-10 10:01:04
brendapeixoto5
A ligação do módulo LCD I2C com o ESP32 é basicamente a mesma, basta alimentar o módulo utilizando os pinos Vin e GND da placa, para que o módulo receba uma tensão de 5 V (enquanto a placa está conectada ao computador), e então conectar os pinos SCL e SDA do módulo aos pinos D22 e D21 da placa, respectivamente.

Giovanni5
date Enviado: 2020-09-10 10:03:00
brendapeixoto5
Caso o seu projeto não permita a alimentação do ESP32 por USB, será necessária uma alimentação externa de 5 V para o módulo LCD I2C. É possível fazer isso utilizando um regulador de tensão de 5 V (https://www.robocore.net/loja/itens-eletronicos/regulador-de-tensao-5v-7805), por exemplo, porém lembre-se de interligar o GND de ambos os circuitos.

freeman.zanella
date Enviado: 2019-11-23 18:36:37
Olá gostaria de saber se funciona com o NodeMCU?

Giovanni5
date Enviado: 2019-11-25 11:15:37
freeman.zanella
Sim, o Display LCD 16x2, com interface I2C deve ser compatível diretamente com o NodeMCU.

freeman.zanella
date Enviado: 2019-11-25 11:40:26
freeman.zanella
Giovanni5, obg pela resposta.

Eu já adquiri o modulo I2C da robocore e a alguns dias estou tentando usar com o NodeMCU porém até agora não obtive sucesso. Nos exemplos citados nessa documentação é usado 2 portas analógicas do arduino para conectar no modulo, só que no NodeMCU eu tenho apenas 1 porta analógica,  como eu faria para usar este modulo com o NodeMCU?

Giovanni5
date Enviado: 2019-11-25 11:49:11
freeman.zanella
A biblioteca "Wire.h" define os pinos A5 4 A4 como as portas SDA e SCL para a comunicação I2C em placas da plataforma Arduino UNO, porem para a placa NodeMCU, o procedimento é diferente, sendo necessário definir os pinos que serão utilizados para essa comunicação. Talvez o tutorial a seguir possa te ajudar com esse projeto, https://www.instructables.com/id/I2C-LCD-on-NodeMCU-V2-With-Arduino-IDE/ .

freeman.zanella
date Enviado: 2019-11-27 01:53:53
freeman.zanella
Giovanni5, novamente muito obrigado por responder.

Testei o código que você sugeriu e infelizmente também não funcionou, e então, resolvi testar no Arduino Uno usando o primeiro exemplo passado neste tutorial, usei o mesmo esquema desenhado no fritzing, configurei as chaves DIP SWITH e o código, e infelizmente também não funcionou. O Display LCD até liga exibe uma linha em vazio e outra totalmente preenchida, isso acontece tanto com o Arduino Uno e o NodeMCU, não é exibido nenhum erro ou warning em ambos os códigos.

Giovanni5
date Enviado: 2019-11-27 07:46:07
freeman.zanella
Como o LCD apresentou a primeira linha inteiramente preenchida, é possível que se trate de um problema na configuração do contraste, que está muito alto para fornecer letras visíveis. Tente, com o código teste executando, ajustar o contraste do LCD girando lentamente o trimpot do módulo I2C, por meio de uma chave de fenda. Caso a configuração do contraste não apresente resultado positivo, envie um e-mail para suporte@robocore.net, com os dados de seu pedido, um breve relato do que está ocorrendo, os testes já realizados, e algumas fotos da placa e dos resultados obtidos.

Sheren
date Enviado: 2019-09-19 16:52:01
Rodei o código  escanner e ele diz que não  foi encontrado o modulo display

Giovanni5
date Enviado: 2019-09-19 17:13:31
Sheren
Envie um e-mail para suporte@robocore.net com os dados de seu pedido, uma breve descrição do que está ocorrendo, e algumas imagens das conexões feitas com o módulo, das configurações do mesmo, e o código utilizado.

Sheren
date Enviado: 2019-09-20 01:46:32
Sheren
Consegui resolver. Troquei os fios jumpers e resolveu o problema. Valeu!

Sheren
date Enviado: 2019-09-18 23:14:50
Boa noite. Quando eu conecto o LCD ao I2c o LCD só acende a luz e não aparece o texto. o código esta carregado igual ao exemplo, o Dip switch estão com as chaves para cima e com o endereço 0x20 e já testei todas possíveis.  Podem me ajudar

Giovanni5
date Enviado: 2019-09-19 09:15:08
Sheren
Tente ajustar o contraste do display através do Trimpot do módulo I2C, é possível que as mensagens estejam sendo exibidas, porém não estão visíveis.

Sheren
date Enviado: 2019-09-19 10:19:15
Sheren
Já fiz isso, mas não adiantou.

Giovanni5
date Enviado: 2019-09-19 10:53:59
Sheren
Tente inverter a conexão dos pinos SDA e SCL (A4 e A5), caso eles estejam invertidos, a mensagem não será exibida corretamente.

Sheren
date Enviado: 2019-09-19 16:50:49
Sheren
Já fiz isso tb amigo e nada.

gui.dno14
date Enviado: 2019-06-12 23:05:58
Para que serve o outro conector do módulo i2c de vocês? E como usá-lo?

Giovanni5
date Enviado: 2019-06-13 11:22:36
gui.dno14
Os dois conectores são utilizados para a mesma função e da mesma maneira. Você pode utilizar a segunda porta de conexão I2C para conectar um segundo display através do módulo, por exemplo.

gui.dno14
date Enviado: 2019-06-13 15:57:01
gui.dno14
Mas como fazer isso só tem uma barra de pinos para conectar no display

Giovanni5
date Enviado: 2019-06-13 16:28:02
gui.dno14
Para conectar dois displays LCD exibindo a mesma mensagem, é necessário que cada um dos dois displays estejam soldados à um módulo I2C. Com isso, é possível conectar um módulo ao outro, conectando o primeiro display à uma placa da plataforma Arduino, através do conector IDC da esquerda, e utilizar o conector da direita para conectar o segundo módulo I2C.

rladmc
date Enviado: 2019-05-22 15:38:57
Boa tarde, o protocolo i2c não trabalha com grandes distâncias segundo alguns estudos q fiz, minha dúvida é, se colocar o módulo próximo ao Arduino e levar por exemplo com Cabo de rede até o LCD, funcionária?

Giovanni5
date Enviado: 2019-05-22 17:20:05
rladmc
Sim, você pode utilizar um cabo de rede para ligar o display LCD ao módulo I2C, porém isso não aumentará o alcance de comunicação por conta disso. A comunicação I2C teria um alcance parecido com a comunicação serial/paralela do cabo de rede, entretanto, é muito mais fácil utilizar apenas quatro fios do que um cabo de rede completo.

ldr_mt
date Enviado: 2018-10-30 12:40:29
tem como eu usar esse lcd junto com um sensor dht22?

Francois
date Enviado: 2018-10-30 12:46:54
ldr_mt
Sim, basta substituir a rotina de leitura do sensor LM35 por uma rotina para o sensor DHT22.

Giovanni5
date Enviado: 2018-10-28 11:45:02
Oi, Bom dia, Gostaria de saber se é possível utilizar esse módulo com display LCD 64x128? E se sim, como fazer isso, basta ligar as mesmas entradas que o 2x16? Agradeço desde já.

Francois
date Enviado: 2018-10-29 13:28:16
Giovanni5
O módulo LCD I2C (https://www.robocore.net/loja/produtos/modulo-lcd-i2c.html) não é totalmente compatível com o LCD Gráfico 128x64 (https://www.robocore.net/loja/produtos/display-grafico-128x64.html), principalmente por causa da incompatibilidade das bibliotecas.