Nesta prática você vai aprender a montar com o NodeMCU…
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:
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:
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:
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:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 |
#include <IRremoteESP8266.h> //INCLUSÃO DE BIBLIOTECA int RECV_PIN = 12; //PINO DIGITAL EM QUE O FOTORRECEPTOR ESTÁ CONECTADO - GPIO12 / PINO D6 IRrecv irrecv(RECV_PIN); //VARIÁVEL DO TIPO IRrecv decode_results results; //VARIÁVEL QUE ARMAZENA OS RESULTADOS void setup(){ Serial.begin(115200); //INICIALIZA A SERIAL irrecv.enableIRIn(); //INICIALIZA O RECEPTOR } //MÉTODO RESPONSÁVEL POR FAZER A DECODIFICAÇÃO DO SINAL IR RECEBIDO //OS DADOS SÃO PASSADOS PARA A BIBLIOTECA IRREMOTE QUE FAZ TODO O //TRATAMENTO E RETORNA AS INFORMAÇÕES DE ACORDO COM O PROTOCOLO RECONHECIDO void dump(decode_results *results) { int count = results->rawlen; if (results->decode_type == UNKNOWN) { Serial.print("Unknown encoding: "); } else if (results->decode_type == NEC) { Serial.print("Decoded NEC: "); } else if (results->decode_type == SONY) { Serial.print("Decoded SONY: "); } else if (results->decode_type == RC5) { Serial.print("Decoded RC5: "); } else if (results->decode_type == RC6) { Serial.print("Decoded RC6: "); } else if (results->decode_type == PANASONIC) { Serial.print("Decoded PANASONIC - Address: "); Serial.print(results->panasonicAddress, HEX); Serial.print(" Value: "); } else if (results->decode_type == LG) { Serial.print("Decoded LG: "); } else if (results->decode_type == JVC) { Serial.print("Decoded JVC: "); } else if (results->decode_type == AIWA_RC_T501) { Serial.print("Decoded AIWA RC T501: "); } else if (results->decode_type == WHYNTER) { Serial.print("Decoded Whynter: "); } Serial.print(results->value, HEX); Serial.print(" ("); Serial.print(results->bits, DEC); Serial.println(" bits)"); Serial.print("Raw ("); Serial.print(count, DEC); Serial.print("): "); for (int i = 1; i < count; i++) { if (i & 1) { Serial.print(results->rawbuf[i]*USECPERTICK, DEC); } else { Serial.write('-'); Serial.print((unsigned long) results->rawbuf[i]*USECPERTICK, DEC); } Serial.print(" "); } Serial.println(); } void loop() { //RETORNA NA SERIAL AS INFORMAÇÕES FINAIS SOBRE O COMANDO IR QUE FOI IDENTIFICADO if (irrecv.decode(&results)) { Serial.println(results.value, HEX); dump(&results); irrecv.resume(); //RECEBE O PRÓXIMO VALOR } } |
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:
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”.
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:
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.
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:
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:
Para finalizar o processo de substituição, é necessário eliminar os sinais de ‘–’. Novamente pressione “Ctrl + U” para abrir a ferramenta de substituição:
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:
É 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: NodeMCU – Utilizando com Interruptor Three Way
Próxima postagem: NodeMCU – Enviando códigos clonados do Controle Remoto (Método RAW)
Amigo você desenhou o seu circuito em qual programa?
Olá João.
Agradeço pelo comentário!
No Fritzing.
0xFFFFFFFF no protocolo NEC quer dizer a repetição do ultimo comando, não é um comando inválido!
Olá, qual seria a diferença entre o fototransistor e o fotorreceptor?
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.
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.
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.
Eu conseguiria um pino so pra enviar e receber o codigo IR ? E como ?
Olá Emanuel.
Agradeço pelo comentário!
Não é possível fazer desta forma.
Boa tarde Euler,
Quais portas devo usar para adaptar esse projeto para o ESP32 ?
Grato,
Olá Ederson.
Agradeço pelo comentário!
Não implementei com ESP32, logo, não consigo te orientar.
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 ?
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.
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
Olá Aristeu.
Verifique se definiu a velocidade correta no monitor serial.
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.
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.
Conseguiu resolver o problema Victor?
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.
Estou exatamente com o mesmo problema. Caso consigam alguma alternativa, avisem aqui. Farei o mesmo.
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.
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.
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.
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.
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.
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
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.
ola boa noite
esta dando erro na IDE coloco esse codigo
da esse erro ‘IRrecv’ does not name a type
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.