SUPORTE TÉCNICO
De segunda à sexta pelo e-mail:
suporte@robocore.net
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!


jucomeia23
date Enviado: 2021-05-20 20:42:01
Olá tenho dois LCDs com I2C e os dois possuem o mesmo endereço. Tem como alterar o endereço? O I2C já veio soldado no LCD e não veio esse DIP Switch.

Giovanni5
date Enviado: 2021-05-21 08:11:07
jucomeia23
Se o seu módulo não possui um DIP switch ou outro método seletor, é sinal que ele possui um endereço I2C fixo, e não é possível alterá-lo.

matheus.pinheiro.per
date Enviado: 2021-04-19 16:24:49
boa tarde! fiz o i2c scan e constou o endereço 0x38, porem nao aparece o texto (ja alterei todas as posiçoes possiveis das chaves e nada de aparecerem letras, apenas a tela azul ligada).
quando coloco o mesmo codigo em outro lcd, funciona normalmente

matheus.pinheiro.per
date Enviado: 2021-04-19 16:27:47
matheus.pinheiro.per
existe algo que eu possa estar esqquecendo?

Giovanni5
date Enviado: 2021-04-19 16:50:58
matheus.pinheiro.per
Você já chegou a tentar ajustar o contraste do display? Essa é uma "configuração" que acaba sendo esquecida com frequência no uso de LCDs, e que faz com que as mensagens não sejam exibidas. No módulo LCD I2C esse ajuste é feito girando o eixo do trimpot da placa.

matheus.pinheiro.per
date Enviado: 2021-04-20 14:30:06
matheus.pinheiro.per
Eu estava esquecendo de alterar o endereço do módulo no código,  estava mudando apenas no dip switch, demorou mas agora foi! Obrigado Giovanni!

matheus.pinheiro.per
date Enviado: 2021-04-02 16:45:19
boa tarde! qual o uso dos endereços e o dip switch?

Giovanni5
date Enviado: 2021-04-05 08:24:42
matheus.pinheiro.per
O DIP Switch é usado para alterar o endereço I2C do módulo, e o endereço possui a funcionalidade que o seu próprio nome já diz, ele é o endereço para qual as mensagens de controle do LCD serão enviadas. Você pode pensar que essa comunicação é como uma entrega de cartas, cada carta tem um endereço para ser entregue, mas se o endereço estiver diferente do configurado, a carta não será entregue, e o display não será controlado, consequentemente.

matheus.pinheiro.per
date Enviado: 2021-04-05 10:04:36
matheus.pinheiro.per
meu modulo só aparece o fundo azul (mesmo mudando o potenciometro) será que se eu soldar o modulo no visor resolve? (as vezes só ascende quando da uma mexida nele, mas nada de aparecer as escritas)

Giovanni5
date Enviado: 2021-04-05 10:34:46
matheus.pinheiro.per
Sem a solda do módulo ao display LCD, podem ocorrer diversos maus contatos no circuito, que devem impedir o funcionamento correto do display. Portanto é recomendada a solda do display ao módulo. Além disso, certifique-se que o endereço I2C configurado no código é o mesmo que o configurado pelo DIP Switch do módulo (as tabelas acima ajudam a saber qual foi o endereço configurado no módulo).

matheus.pinheiro.per
date Enviado: 2021-04-05 10:46:23
matheus.pinheiro.per
Giovanni, quanto a posição do módulo, na foto de exemplo ele aparece montado ao contrario do desenho do exemplo, existe alguma diferença entre soldar eles desses dois jeitos??

Giovanni5
date Enviado: 2021-04-05 11:00:09
matheus.pinheiro.per
A posição do módulo em relação ao display não influencia no seu funcionamento, o importante é que as conexões estejam corretas. Normalmente usamos o módulo I2C soldado à parte de baixo do display, para facilitar a fixação em estruturas de projetos.

kurten
date Enviado: 2021-03-08 09:37:24
ja montei 2 vezes e nao funciona....ja troquei botao, jumpers...estou compilando e mandando master / slave corretamente,,,
queria umas dicas do que pode ser

Giovanni5
date Enviado: 2021-03-08 10:19:39
kurten
Aparentemente você comentou no tutorial errado. De toda forma, já respondemos o seu comentário no outro tutorial com os erros mais comuns que influenciam no funcionamento daquele experimento. Se continuar com dúvidas mesmo ao verificar as questões mencionadas, encaminhe um e-mail para suporte@robocore.net, com algumas fotos do circuito montado, e um breve resumo do comportamento que está tendo com o conjunto montado.

vdomingos1978
date Enviado: 2020-11-20 11:42:37
Bom dia, Estou com uma dificuldade

estou carregando este sketch,:

#include <Wire.h>
#include <LiquidCrystal_I2C.h> // LiquidCrystal_I2C library
HX711_ADC LoadCell(4, 5); // data pin, clock pin
LiquidCrystal_I2C lcd(0x27, 20, 4);

mas esta dando este erro:

no matching function for call to &#39;LiquidCrystal_I2C::begin()&#39;

tentei fazer somente o scanner , mas tb não vai.

Giovanni5
date Enviado: 2020-11-20 12:02:22
vdomingos1978
Tente trocar o comando "lcd.begin()" por "lcd.init()", e observe o resultado. É possível que você tenha instalado uma versão mais atualizada desta biblioteca, que usa a função "init()" para inicialização do módulo, ao invés de "begin()".

brendapeixoto5
date Enviado: 2020-11-09 17:06:04
Para que serve a linha 
LiquidCrystal_I2C lcd(0x27,16,2); ?

Francois
date Enviado: 2020-11-09 17:22:01
brendapeixoto5
Essa linha declara o objeto <lcd> para ser usado na sequência do código com a funções da biblioteca, como <lcd.print()> e <lcd.clear()>. Já os valores entre parênteses são os parâmetros da criação, que são, respectivamente, o endereço no barramento I2C (em hexadecimal), a quantidade de colunas e a quantidade de linhas.

leandrommcontato
date Enviado: 2020-11-06 17:26:59
Francois, mas o sensor que estou usando é de umidade e temperatura, o DHT. Montei um sistema onde ele detecta umidade e temperatura, acionando um climatizador ligado ao módulo relé quando está acima de 30°C. Deu muito certo. Fiquei bem feliz com o resultado. Vou conferir o datasheet do sensor.

Francois
date Enviado: 2020-11-06 18:01:25
leandrommcontato
Ótimo, que bom que funcionou. Apenas para referência, os sensores DHT11 e DHT22 são digitais, então não é preciso alterar a tensão de referência como foi feito para o LM35 (são circuitos distintos).

leandrommcontato
date Enviado: 2020-11-06 01:15:08
Eu fiz um projeto com esse modulo, mas utilizando o sensor de umidade e temperatura, adaptando os códigos, acrescentando algumas coisas.  Está funcionando perfeitamente, consigo mostrar temperatura e umidade. Por que no seu código, é modificado a referência de 5V para 1,1V?

Francois
date Enviado: 2020-11-06 10:58:13
leandrommcontato
O sensor de temperatura LM35 pode ser alimentado com 5 V e a saída dele é de 10 mV/ºC. A tensão de referência padrão da BlackBoard Uno é de 5 V, logo a resolução do ADC é de ~5 mV/LSB. Ou seja, cada grau Celsius provoca uma variação de duas unidades no ADC. Quando usamos a tensão de referência em 1,1 V, a resolução passa a ser de ~1 mV/LSB, ou seja, uma variação de 10 unidades para cada grau Celsius. Essa precisão pode ajudar a fazer cortes melhores no seu código, entre outras funções. Apenas lembre que essa tensão de referência vale para todos os pinos analógicos.

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 &#39;POSITIVE&#39; 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 &#128077;&#128077;