Home › Tag Archives › Controle Remoto

Como obter dispositivo e função de um código de controle remoto NEC

Eu me deparei com esse problema ao chegar a essa página do RemoteCentral que lista os comandos como sendo compostos de dispositivo, sub-dispostitivo e função.

Depois eu me deparei com esta outra que faz o mesmo.

Por exemplo, o código para Power é descrito como:
Protocol NECx2, device 7, subdevice 7, OBC 2

Mas de onde vem isso? Eu sempre decodifiquei esse código como sendo E0E040BF. Como um número tão complexo esconde apenas os números 7, 7 e 2?

Eu encontrei a resposta ao analisar o funcionamento do programa SamsungBlinkie para Arduino

O código hexadecimal é dividido em três partes (as duas primeiras em conjunto formam o chamado “endereço”):

E0 -> dispositivo 7
E0 -> sub-dispositivo 7
40BF -> função 2

Vendo esses números em binário a coisa começa a fazer sentido.

E0 = 11100000. Note que se você espelhar esse número, vira 00000111, que é 7. Já sabemos então de onde vem o dispositivo e o sub-dispositivo.

A função é codificada de forma ainda mais confusa, mas se você olhar em binário rapidamente entende.

O primeiro byte corresponde a um 2 binário espelhado e o segundo byte é uma inversão bit a bit do primeiro e funciona como um “checksum” para que o dispositivo tenha certeza de que leu corretamente.

Note que a Samsung usa um código NEC estendido. Nos códigos NEC tradicionais ou a segunda parte do endereço também é um checksum da primeira ou não existe segunda parte no endereço.

Códigos discretos de controle remoto para TVs Samsung

Códigos ou comandos “discretos” são comandos cujo resultado não depende do atual estado do aparelho. Por exemplo, quando você manda um comando “Power” para uma TV, esse comando pode ser “Power On” ou “Power Off”, dependendo do estado atual da TV. Se a TV já estiver ligada e você mandar um comando Power querendo ligá-la, vai desligar.

Então para ter certeza de que você vai ligar quando quer ligar, precisa do código discreto de PowerON da TV. Códigos discretos são essenciais  para uma automação sem falhas.

Convertendo os códigos no formato Pronto Hex publicados no RemoteCentral usando a informação que dei no post anterior, chegamos a essa lista:

 

Não há garantia de que todos os códigos funcionem no seu modelo Samsung e eu só testei até agora PowerOn e PowerOff.

Como converter comandos no formato Pronto Hex para o formato da irLib

No momento eu vou apenas mostrar como se faz para comandos NEC.

No RemoteCentral você vai encontrar muitos códigos de controle remoto infravermelho, mas num formato difícil de armazenar na limitada memória do Arduino: O Pronto Hex. Esse formato tem a vantagem de descrever completamente como é o sinal transmitido, mas é muito inconveniente.  Vou tomar por base os comandos de TV Samsung.

Por exemplo, vamos decodificar o comando discreto para selecionar a porta HDMI4:

Device Code: 7.7 Function: 197HDMI 4 (SIDE)
0000 006D 0000 0022 00AC 00AB 0015 0041 0015 0041 0015 0041 0015 0016 0015 0016 0015 0016 0015 0016 0015 0016 0015 0041 0015 0041 0015 0041 0015 0016 0015 0016 0015 0016 0015 0016 0015 0016 0015 0041 0015 0016 0015 0041 0015 0016 0015 0016 0015 0016 0015 0041 0015 0041 0015 0016 0015 0041 0015 0016 0015 0041 0015 0041 0015 0041 0015 0016 0015 0016 0015 0689

Os primeiros seis valores podem ser ignorados, porque são parte do protocolo NEC.

0000 006D 0000 0022 00AC 00AB

O código mesmo só começa a partir do sétimo valor e devem ser organizados em grupos de dois. Cada grupo que tenha dois números iguais ou próximos é um “0”. Cada uma cujo segundo valor seja cerca do dobro do primeiro é um “1”

Os dois últimos grupos são ignorados porque são a finalização do protocolo.

O código é 11100000111000001010001101011100 ou E0E0A35C

Veja a minha lista de comandos discretos para TVs Samsung.

Códigos do controle remoto do DVR ControlBR iDVR CBR-ST16H

controle_remoto_DVR_ControlBR_iDVR_CBR-ST16H_DSC02640_640_automalabs.com.br

Protocolo NEC de 32 bits

 

Códigos do controle remoto do receptor de satélite ASAMÉRICA

Nota: Eu não anotei o modelo do receptor onde esse controle funcionava. Não sei se funciona com todos ASAMÉRICA.

Protocolo NEC de 32 bits

 

Códigos do controle remoto do receptor de satélite OI TV SD

Este controle remoto não tem a palavra “HD”. Os códigos do receptor HD são estes.

Protocolo RC6 de 36 bits

 

Códigos do controle remoto do receptor de satélite OI TV HD

Protocolo RC6 de 36 bits

 
 Controle_Remoto_OI_small_automalabs.com.br

 

Códigos do controle remoto lennox RC-109

Este remoto é usado em uma TV Lenoxx cujo modelo ainda não sei.

Protocolo NEC 32 bits

 

 

Códigos do controle remoto do receptor ISDB-T Aquário DTV-6000

Este controle não apenas é parecido com o do receptor ISDB-T comercializado pela Infokit. Os códigos são os mesmos.

Protocolo NEC de 32bits

 

 

Códigos do controle remoto do receptor de satélite GVT/VIVO

Até onde sei todos os aparelhos da GVT usam o mesmo controle remoto e a VIVO ao comprar a GVT só mudou o nome.

Protocolo RC6 de 36 bits

O quinto byte alterna (é um protocolo Philips) entre “A” (00001010) e “2” (00000010)

Controle_remoto_GVT_DSC02639_640_automalabs.com.br

Este controle tem uma particularidade. As rotinas de leitura da biblioteca IRremoteESP8266 interpretam sem problemas os comandos acima, mas se você usar esses comandos com a função sendRC6 da mesma biblioteca, o receptor da GVT ignora completamente. A mesma biblioteca mostra que o que ela está transmitindo não bate com o remoto original. Se você transmitir com 36 bits é completamente diferente. Se transmitir como 32 bits o código decodificado confere, mas há uma diferença.

Analisando bit por bit eu identifiquei essa diferença. É assim a forma real do código da tecla “zero”:

remoto_gvt_SignalPlot_key0

O zero em preto é o start bit do protocolo RC6. Tudo depois dele (10000000011100000010011000000000) já é o código para a tecla zero (80702600 em binário).

Os quatro bits que antecedem o start bit (1110) não existem no protocolo RC6 como definido pela biblioteca.

E criei uma nova função que chamei de sendRC6gvt.

Eu acrescentei essa rotina ao arquivo IRremoteESP8266.cpp e a chamada para ela em IRremoteESP8266.h. Eu estou usando a versão 1.x. Se você estiver usando a versão 2.x vai precisar fazer algumas mudanças.

Note que você deve chamar essa rotina alternativa dizendo que o código é de 32bits e não de 36.  Os outros 4 bits, do cabeçalho, minha rotina transmite “por fora”.