NodeMCU – Clonando Teclas do Controle Remoto (Método RAW)

NodeMCU – Clonando Teclas do Controle Remoto (Método RAW)

Nesta prática você vai aprender a clonar as teclas de um controle remoto utilizando o NodeMCU em conjunto com um fotorreceptor infravermelho. A clonagem das teclas será feita utilizando o método RAW.

A tecnologia dominante nos controles remotos de TVs, aparelho de som, DVD, BluRay e muitos outros aparelhos  é o infravermelho (IR). O princípio básico no funcionamento de um controle remoto IR é o uso da luz para levar sinais entre o controle e o aparelho que será controlado.

O infravermelho está na faixa invisível do espectro eletromagnético:

img01_nodemcu_clonando_um_controle_remoto_tv_dvd_bluray_sky_ar_condicionado_arduino

O controle remoto IR envia sinais que representam códigos específicos para controle de aparelhos. Estes códigos correspondem a comandos como ligar, desligar, aumentar o volume, diminuir volume ou mudar de canal por exemplo. O receptor IR decodifica em dados o sinal enviado pelo controle remoto e executa a tarefa correspondente ao comando recebido.

É importante ressaltar que sinais IR não são transmitidos através de paredes. É necessário que o emissor IR (controle remoto por exemplo) esteja apontado para o receptor IR. Além disso, o sinal IR está sujeito a interferências do ambiente. Para minimizar as interferências causadas por outras fontes de luz infravermelho, o receptor IR responde apenas a um comprimento de onda que normalmente é de 980nm.

A luz do sol pode confundir o receptor IR, pois possui luz infravermelha no comprimento de onda na faixa de 980nm. Para minimizar este problema o sinal de um controle remoto IR é modulado a uma frequência não presente na luz do sol e o receptor responde apenas ao sinal modulado a 980nm nessa frequência. O sistema não é perfeito, contudo diminui muito as interferências.

A título de curiosidade e aprendizado:

img02_nodemcu_clonando_um_controle_remoto_tv_dvd_bluray_sky_ar_condicionado_arduino

Na imagem acima temos dois componentes e ambos são sensíveis à luz infravermelha. Do lado esquerdo temos um fototransistor e do lado direito um fotorreceptor. O fotorreceptor é que utilizamos para clonar os sinais IR vindos do controle remoto.

O fotorreceptor é comumente utilizado em projetos que usam controle remoto IR e geralmente opera na faixa de 38KHz, contudo há alguns modelos que são capazes de ler outras frequências.

O envio de sinais IR se dá através de protocolos específicos. Abaixo temos uma lista com alguns protocolos:

ITT Protocol
JVC Protocol
Mitsubishi Protocol
NEC Protocol
LG Protocol
Samsung Protocol
Nokia NRC17
Sharp Protocol
Sony SIRC
Philips RC-5
Philips RC-6
Phiilps RC-MM
Philips RECS80
RCA Protocol
X-Sat Protocol

O fotorreceptor IR em conjunto com o NodeMCU consegue reconhecer diversos protocolos de sinais IR, contudo o comando para enviar o código de volta ao aparelho a ser controlado se torna complicado em muitos casos devido a programação complexa para tratar de forma correta o sinal IR antes de ser enviado. Protocolos do tipo NEC, LG e Samsung são mais tranquilos de trabalhar e os mais comuns.

Uma alternativa aos protocolos mencionados acima, é a utilização do método RAW para enviar os sinais IR decodificados de volta ao aparelho a ser controlado. Utilizando este método não é necessário saber qual protocolo corresponde ao aparelho que será controlado, necessitando saber somente a linha de códigos RAW, tamanho da linha e a frequência do sinal. Vale ressaltar que o código RAW precisa ser trabalhado antes de ser enviado ao aparelho a ser controlado.

Nos passos abaixo você vai aprender a trabalhar o código RAW antes de adicioná-lo ao código final, porém antes disso será necessário montar o circuito com o fotorreceptor IR que será responsável por capturar o sinal IR vindo do controle remoto que será clonado.

Abaixo está a lista dos itens necessários para esta prática e mais informações sobre eles.

NodeMCU
Fotorreceptor / Receptor IR VS1838B
Controle Remoto Infravermelho (pode ser outro modelo)
Protoboard
Cabo Jumper Macho-Fêmea

Abaixo está o esquema de ligação para esta prática:

img03_nodemcu_clonando_um_controle_remoto_tv_dvd_bluray_sky_ar_condicionado_arduino

Feito o esquema de ligação, será necessário instalar uma biblioteca na IDE do Arduino para em seguida carregar o código no NodeMCU.

Se ainda não tem a IDE do Arduino instalada e configurada para o NodeMCU e não sabe como fazer a instalação de bibliotecas na IDE, acesse os links abaixo e em seguida retorne para continuar:

NodeMCU – Instalação no Windows
NodeMCU – Configurando a IDE do Arduino
Arduino – Importando bibliotecas para a IDE

Faça o download da biblioteca IRremoteESP8266-master e em seguida faça a instalação da mesma na IDE do Arduino.

Em seguida, será necessário carregar o código no NodeMCU. Conecte o cabo USB no seu NodeMCU e a outra ponta na porta USB do seu computador. Na IDE confira se a placa selecionada é o NodeMCU e se a porta COM selecionada é a correta.

O código para testes está abaixo, basta copiar o mesmo, colar na IDE, salvar e carregar no NodeMCU:

Após o arquivo ser carregado abra o monitor serial da IDE e verifique se a taxa de velocidade no rodapé do monitor está configurada para 115200 bauds, caso não esteja faça a alteração. Aguarde 10 segundos e em seguida aponte o controle remoto que será clonado para o fotorreceptor IR que está conectado ao NodeMCU e aperte algum dos botões e aguarde o fotorreceptor IR capturar e informar os dados no monitor serial:

img04_nodemcu_clonando_um_controle_remoto_tv_dvd_bluray_sky_ar_condicionado_arduino

Na imagem acima é possível ver um exemplo de captura de código IR vindo de um controle remoto de uma TV LG 32 polegadas. Veja abaixo a descrição dos dados destacados na imagem acima:

20DF10EF: código hexadecimal referente ao botão apertado. A biblioteca IRremote do NodeMCU captura o código do botão pressionado no controle remoto e gera o valor hexadecimal do mesmo. Vale ressaltar que o valor pode ser convertido para outras bases numéricas (binário, por exemplo).
32 bits: frequência do sinal IR.
68: tamanho da linha RAW (68 blocos).

Os demais dados da linha RAW que estão sublinhados por uma linha azul é a sequência RAW que precisamos, onde começa a partir do primeiro bloco de código da linha e vai até o último bloco da sequência.

Sempre pressione a tecla a ser clonada por pelo menos 5 vezes e veja se o código hexadecimal se mantém igual, pois pode ocorrer de uma sequência inválida ser identificada e consequentemente você pegará uma linha RAW inválida. É importante ressaltar que a biblioteca IRremoteESP8266 aos poucos está sendo melhorada, logo, pode ocorrer de você ter dificuldades em pegar o código correto da tecla do seu controle remoto.

Outra consideração importante é que nem sempre os dados da linha RAW (de um código válido) serão iguais, mesmo que você pressione por diversas vezes o mesmo botão. Sempre haverá variações na linha RAW, contudo todas as linhas (de um código válido) são válidas.

Caso você mantenha a tecla do controle pressionada constantemente, o fotorreceptor vai decodificar uma sequência inválida do tipo “FFFFFFFF” de “0 BITS”.

img05_nodemcu_clonando_um_controle_remoto_tv_dvd_bluray_sky_ar_condicionado_arduino

Nos passos abaixo vamos trabalhar a linha RAW e deixa-la pronta para ser enviada de volta ao aparelho que será controlado através do NodeMCU.

Como exemplo será utilizado à linha RAW da imagem abaixo:

img06_nodemcu_clonando_um_controle_remoto_tv_dvd_bluray_sky_ar_condicionado_arduino

A linha RAW inteira não é possível ser observada no monitor serial, porém basta você rolar a barra de rolagem horizontal do monitor serial para identificar todos os blocos de códigos da linha e selecionar a linha completa.

img06-1_nodemcu_clonando_um_controle_remoto_tv_dvd_bluray_sky_ar_condicionado_arduino

Acima está à linha RAW completa que foi retirada do monitor serial (selecione toda à linha e dê “Ctrl + C”). Veja que ela possui números negativos e positivos.

Primeiro será necessário trocar todos os espaços da sequência por uma ‘,’ (VÍRGULA). Uma forma mais simples de fazer essa troca é através do Excel ou no próprio Word. Abra algum dos dois programas e cole a sua sequência RAW. Utilize o comando “Ctrl + U” para abrir a ferramenta de substituição:

img07_nodemcu_clonando_um_controle_remoto_tv_dvd_bluray_sky_ar_condicionado_arduino

Em “Localizar” aperte a tecla de espaço do seu teclado apenas uma vez e em “Substituir por” coloque uma vírgula e clique em substituir tudo. Sua sequência passa ter um formato similar ao da sequência abaixo:

img07-1_nodemcu_clonando_um_controle_remoto_tv_dvd_bluray_sky_ar_condicionado_arduino

Para finalizar o processo de substituição, é necessário eliminar os sinais de ‘’. Novamente pressione “Ctrl + U” para abrir a ferramenta de substituição:

img08_nodemcu_clonando_um_controle_remoto_tv_dvd_bluray_sky_ar_condicionado_arduino

Em “Localizar” aperte a tecla ‘’ do seu teclado apenas uma vez e em “Substituir por” deixe sem espaço e sem nenhum caractere e clique em substituir tudo. Sua sequência passa ter um formato similar ao da sequência abaixo:

img08-1_nodemcu_clonando_um_controle_remoto_tv_dvd_bluray_sky_ar_condicionado_arduino

É interessante executar esse processo de substituição após ter todas as linhas RAWs correspondentes aos botões do seu controle remoto, pois tendo todas em um único local você pode efetuar as substituições em todas as linhas simultaneamente e tornar menos trabalhoso esse processo.

Não deixe de salvar cada linha RAW. É ideal que elas fiquem salvas em uma planilha.

Na próxima prática vamos inserir no código fonte as linhas RAW clonadas para que quando um comando for enviado pelo monitor serial, o RAW correspondente seja enviado ao aparelho a ser controlado.

Clique no link abaixo e acesse a próxima prática:

NodeMCU – Enviando códigos clonados do Controle Remoto (Método RAW)

Gostou deste tutorial? Então deixa seu comentário, dúvida ou sugestão aí embaixo!

Loja online: https://www.masterwalkershop.com.br
Fan page no Facebook: https://www.facebook.com/masterwalkershop

Nos ajude a espalhar conhecimento clicando no botão de compartilhar (f Like) que está mais abaixo.

Obrigado e até a próxima!

Seu feedback é muito importante! Que tal dar uma nota para esta postagem?! Faça sua avaliação aqui embaixo.



Postagem anterior:
Próxima postagem:
Postagem feita por

Formado em Engenharia da Computação, Técnico em Eletroeletrônica, Fundador e Diretor da MasterWalker Electronic Shop. Se preocupa com o aprendizado dos seus clientes e daqueles interessados em aprender sobre Arduino e plataformas embarcadas em geral.

Existem 29 comentários para esta postagem
  1. ALBERIO LIMA às 19:42

    0xFFFFFFFF no protocolo NEC quer dizer a repetição do ultimo comando, não é um comando inválido!

  2. Gustavo às 10:56

    Olá, qual seria a diferença entre o fototransistor e o fotorreceptor?

    • Euler Oliveira Autor às 16:27

      Olá Gustavo.

      Agradeço pelo comentário!

      O fototransistor conduz corrente elétrica quando um sinal infravermelho incide sobre ele.

      O fotorreceptor é um circuito que reage a sinais infravermelho que são modulados em uma frequência específica, como, por exemplo, 38KHz. Neste tipo de circuito o receptor só reage a luz IR modulada em uma determinada frequência, desta forma, evita interferência de outras fontes de infravermelho.

  3. Henrique às 13:10

    Olá Euler,
    Estou tentando reproduzir o seu código mas estou recebendo o seguinte erro:

    error: ‘USECPERTICK’ was not declared in this scope

    Eu acreditava que poderia ser algum problema na versão da biblioteca (estava usando a 2.6.5), por isso tentei um downgrade na versão para 2.6.2 e posteriormente para 2.6.0, mas nenhuma delas corrigiu o erro, você saberia me informar qual o motivo dele estar ocorrendo?

    Desde já agradeço pela atenção.

    • Euler Oliveira Autor às 18:51

      Olá Henrique.

      Agradeço pelo comentário!

      Acabei de testar a biblioteca disponibilizada na postagem junto ao código e compilou sem problema algum.

      Está selecionando a placa NodeMCU no menu Ferramentas do IDE? Qual a versão do IDE que está utilizando? Aqui estou com a 1.8.7.

  4. Emanuel às 10:56

    Eu conseguiria um pino so pra enviar e receber o codigo IR ? E como ?

    • Euler Oliveira Autor às 17:55

      Olá Emanuel.

      Agradeço pelo comentário!

      Não é possível fazer desta forma.

  5. Ederson às 16:09

    Boa tarde Euler,
    Quais portas devo usar para adaptar esse projeto para o ESP32 ?

    Grato,

    • Euler Oliveira Autor às 11:36

      Olá Ederson.

      Agradeço pelo comentário!

      Não implementei com ESP32, logo, não consigo te orientar.

  6. José Carlos às 17:01

    Olá Euler Oliveira, também carregue o código, porque com o esp8266 é diferente do arduino, mais não funciona, filmei com uma camera para ver se o led pisca, sim ele pisca mais não acontece nada, já com arduino uno não tenho nenhuma dificuldade, vc sabe o que pode ser ?

    • José Carlos às 17:09

      Outra coisa, estou usando wifi para controlar, estou controlando um led junto, com o led funciona tranquilo, mas o comando do infra não acontece nada, e o led do infra pisca.

  7. Aristeu às 20:27

    Euler, boa noite

    Fiz todo o procedimeno instalei a biblioteca IRremoteESP8266-master copie todo o codigo e colei na ide do arduino carreguei no nodemcu masquando eu clico m qualquer botão do controle remoto ele aciona o LED no node MCU mas não aparece nada no monitor serial

    Estou usando o controle do recepto da NET

    • Euler Oliveira Autor às 21:16

      Olá Aristeu.

      Verifique se definiu a velocidade correta no monitor serial.

  8. Victor às 19:14

    Euler,

    Ao colocar a biblioteca corretamente como faço sempre e compilar o arquivo, me retorna o seguinte erro no início da compilação:

    C:\Users\vhsth\Documents\Arduino\libraries\IRESP8266-master\IRremoteESP8266.cpp:440:31: error: expected initializer before ‘gpio_intr’

    static void ICACHE_FLASH_ATTR gpio_intr(void *arg) {

    exit status 1

    Ja verifiquei dentro do arquivo IRremoteESP8266.cpp da bib e não consegui encontrar a causa da falha.

    Você pode me orientar. Agradecido.

  9. Victor Silva às 14:54

    Boa tarde,

    O controle do meu ar condicionado tem mais de 100 posições. Gostaria de saber onde eu altero o tamanho do vetor que guarda o sinal do IR.

      • Euler Oliveira Autor às 12:21

        Olá Wilkens.

        Infelizmente eu não tenho experiência na clonagem de teclas de controle remoto de ar condicionado. Por este motivo não consigo responder esta questão.

    • abz às 19:26

      Estou exatamente com o mesmo problema. Caso consigam alguma alternativa, avisem aqui. Farei o mesmo.

      • Euler Oliveira Autor às 12:20

        Olá ABZ.

        Infelizmente eu não tenho experiência na clonagem de teclas de controle remoto de ar condicionado. Por este motivo não consigo responder esta questão.

    • Euler Oliveira Autor às 12:20

      Olá Victor.

      Infelizmente eu não tenho experiência na clonagem de teclas de controle remoto de ar condicionado. Por este motivo não consigo responder esta questão.

  10. Anderson às 12:56

    Olá amigo, a minha linha RAW está aparecendo como RAW (100), imagino que é só substituir todo o código 68 para 100. É isso mesmo? Obs: esse RAW 100 veio do ar condicionado.

    • Euler Oliveira Autor às 12:22

      Olá Anderson.

      Não tenho experiência na clonagem de teclas de controle remoto de ar condicionado, mas posso te afirmar que é bem complicado de ser clonado.

  11. Diogenes às 18:30

    Boa noite,
    Tenho uma duvida referente a biblioteca ” IRremoteESP8266-master”, gostaria de saber se ela funciona com a nova versão desta placa, no caso a ESP-32 pois pretendo comprar uma para um projeto, mas caso não funcione na ESP-32, irei comprar a ESP-8266 mesmo.

    Desde ja, agradeço a atenção dada.

  12. joziel às 22:55

    coloquei isso #include resolveu

    mais deu outro erros, esse ‘class decode_results’ has no member named ‘panasonicAddress’
    nao estou conseguindo copila o codigo devido esse massagem. sera que pode me ajuda fico muito grato

    • Euler Oliveira Autor às 07:08

      Conforme respondi anteriormente, Verifique se colocou a biblioteca IRremoteESP8266-master na pasta correta, pois fiz o teste da biblioteca e do código disponível na postagem e está tudo funcionando sem problemas.

  13. joziel às 22:49

    ola boa noite
    esta dando erro na IDE coloco esse codigo
    da esse erro ‘IRrecv’ does not name a type

    • Euler Oliveira Autor às 07:08

      Olá Joziel.

      Verifique se colocou a biblioteca IRremoteESP8266-master na pasta correta. Acabei de testar a biblioteca e o código disponível na postagem e está tudo funcionando normalmente.