Descrição
O HUBIr é o resultado de um projeto proposto na disciplina de Infraestrutura de Hardware, ministrada pelo professor Victor Medeiros, no primeiro semestre de 2017 na UFRPE. Tem como objetivo facilitar o manuseio de um ou mais dispositivos controlados através de sinais infravermelho, podendo ser aplicado em ambientes residenciais ou corporativos. Para o desenvolvimento do sistema foi utilizada a plataforma NodeMCU, baseada no módulo ESP8266. Para controlar o HUBIr foi desenvolvido um aplicativo Android.
A arquitetura do projeto e sua comunicação foi planejada em reuniões com o orientador e foi definida conforme Figura abaixo.

O HUBIr é composto por dois módulos, o NodeMCU e um circuito de LEDs infravermelho para envio dos comandos aos dispositivos. A comunicação entre o HUBIr e a aplicação é realizada via WiFi, utilizando uma API REST para comunicação e JSON para a serialização dos dados. Com a arquitetura definida, começamos a planejar a interação entre HUBIr e a aplicação.
Nosso protótipo foi desenvolvido com dois princípios norteadores: ser facilmente configurado e usado. Tivemos como inspiração o funcionamento do dispositivo Chromecast do Google. Na primeira inicialização o HUBIr cria uma rede WiFi permitindo que o usuário, pelo aplicativo, configure a rede que deve se conectar. Recebendo essa informação desliga a rede que está fornecendo e se conecta na rede informada. Caso o usuário forneça dados incorretos ou erre alguma informação, o HUBIr disponibiliza novamente a rede WiFi para ser configurado. Após a configuração do sistema ser realizada o usuário já pode utilizá-lo para controlar qualquer dispositivo que aceite comandos infravermelho através aplicativo.
A seguir é apresentado as telas do aplicativo:
O MVP dá suporte apenas a projetores da Epson, ar-condicionados da LG e fornece uma opção para envio de qualquer comando IR pelo HUBIr, desde que esteja no formato Pronto Hex.
Componentes de Hardware
- NodeMCU v1.0
- Um resistor de 10 Ohms
- Três LEDs infravermelho
Bibliotecas e Ferramentas Utilizadas
Bibliotecas para a IDE do Arduino:
- ESP8266 Core: https://github.com/esp8266/Arduino
- ArduinoJson: https://github.com/bblanchon/ArduinoJson
- IRremoteESP8266 v1.2.0: https://github.com/markszabo/IRremoteESP8266
- ProntoHex: https://github.com/probonopd/ProntoHex
Banco de dados com os códigos infravermelho:
- irbd.tk: http://irdb.tk/
- lg-ac-lirc¹: https://github.com/nokru/lg-ac-lirc/tree/master/raw
Para o desenvolvimento da aplicação Android foi utilizado a ferramenta MIT App Inventor.
OBS¹: Usamos os códigos raw disponibilizados pelo usuário nokru e convertemos usando a ferramenta IrScrutinizer para o formato Pronto Hex.
Conexão dos Componentes de Hardware
Código-fonte
O HUBIr possuem duas funções que são executadas quando recebe as requisições REST realizadas pelo aplicativo:
server.on("/new_ssid", new_ssid); server.on("/ir", send_ir);
As duas tem o funcionamento parecido. Recebem o JSON da requisição, tratam usando a biblioteca ArduinoJson e realizam o os seus procedimentos. A função send_ir, descrita abaixo:
void send_ir() { //Handler for the body path String string_json = server.arg("plain"); StaticJsonBuffer<512> jsonBuffer; JsonObject& json = jsonBuffer.parseObject(string_json); <strong>String pronto_hex = json["command"];</strong> <strong> ph.convert(pronto_hex);</strong> <strong> irsend.sendRaw(ph.convertedRaw, ph.length, ph.frequency);</strong> Serial.println(); Serial.println("* IR command received *"); server.send(200, "text/plain", static_json); }
É responsável por receber os comandos no formato pronto hex, enviados pelo aplicativo, e converte para o formato raw e assim emitir o sinal pelos LEDs infravermelhos. A parte do código que realiza esse procedimento está destacada.
A função new_ssid, descrita abaixo:
void new_ssid() { //Handler for the body path String string_json = server.arg("plain"); StaticJsonBuffer<512> jsonBuffer; JsonObject& json = jsonBuffer.parseObject(string_json); <strong>String ssid = json["ssid"];</strong> <strong> String pwd = json["pwd"];</strong> Serial.println(); Serial.println("* New wifi config received *"); server.send(200, "text/plain", static_json); delay(1000); <strong>try_connect(ssid, pwd);</strong> }
É responsável por receber as novas configurações e repassar para a try_connect, onde essa realiza os procedimentos para conectar em uma nova rede ou disponibilizar novamente a rede de configuração do HUBIr.
É sabido que as duas tem trechos bastante parecidos, sendo:
String string_json = server.arg("plain"); StaticJsonBuffer<512> jsonBuffer; JsonObject& json = jsonBuffer.parseObject(string_json);
Isso é necessário para garantir rapidez para recuperar os dados do JSON, caso opte por utilizar somente um para as duas o HUBIr apresentará lentidão quando for consumir esses dados.