Introduction: OIC - Omnidirecional Infrared Center #Dragonboard410C #ESP32 #MQTT #IoT #Qualcomm

    Diego Cardoso; Maikel Luis Kolling; Roger Machado

    Este projeto visa desenvolver uma solução centralizada para o acúmulo de diversos controles remotos de diferentes dispositivos baseados em comando infravermelho. Através de um Smartphone você pode controlar qualquer dispositivo que suporte comando por infravermelho através do protocolo NEC.

    Entidades:

    - A Aplicação é o controle remoto virtual do usuário, por meio dela o usuário aciona seus eletrônicos (TV, Ar-Split, Lâmpada LED). Todas as funcionalides da aplicação são as seguintes: Mapeamento de botões; Controle remoto virtual; Mapeamento de comando de voz; Comando de voz; Estatística de uso.

    - A Central é a Dragonboard, que possui um broker Mosquitto que tem o papel de orquestrar a comunicação e envio dos comandos(via MQTT) para os minimódulos acionarem os dispositivos (via IR). A placa também é responsável pelo mapeamento dos botões dos controles remotos IR, hospedar a aplicação de interface com o usuário e realizar o log de utilização para análise e estátistica.

    - O Módulo emissor 360º é a placa ESP32 com LEDs IR que tem o papel de emissão dos comandos infravermelhos para os dispositivos eletrônicos, comandos esses recebidos pelo orquestrados DragonBoard.

    Requisitos de hardware:

    • - Dragonboard410C
    • - 96boards LinkSprite Mezzanine
    • - Placa ESP32
    • - Receptor IR TSOP4838 38kHz
    • - Transístor TIP122
    • - 6 resistores 100 ohm
    • - 6 LEDs emissores infravermelho

    Requisitos de software:

    • Dragonboard
      • SO Linaro 16+
      • Mosquito MQTT
      • Node.js 8+
      • Quasar Framework (quasar cli)
      • MongoDB 3.4
    • ESP32
      • Arduino IDE (maquina do usuário)
      • Arduino firmware

    Possíveis melhorias:

    • - Suporte à outros protocolos de IR além do NEC
    • - Permitir separação de configurador por cômodos

    Step 1: Unboxing - DragonBoard 410C + LinkSpriteArrow Board

    Características Técnicas:

    DragonBoard410C

    • SoC Qualcomm Snapdragon 410E
    • CPU ARM Cortex-A53 Quad-core up to 1.2 GHz per core
    • GPU Qualcomm Adreno 306 @ 400MHz for PC-class graphics with support for Advanced APIs, including OpenGL ES 3.0, OpenCL, DirectX, and content security
    • RAM 1GB LPDDR3 SDRAM @ 533MHz
    • Storage 8GB eMMC 4.51 on board storage and MicroSD card slot
    • Ethernet Port USB 2.0 expansion
    • Wireless WLAN 802.11 b/g/n 2.4 GHz, Bluetooth 4.1, GPS. On board GPS, BT and WLAN antennas
    • USB 2 x USB 2.0 Host 1 x USB 2.0 OTG
    • Display 1 x HDMI 1.4 (Type A - full) 1 x MIPI-DSI HDMI output up to FHD 1080P
    • Video 1080p@30fps HD video playback and capture with H.264 (AVC), and 720p playback with H.265 (HEVC)
    • Audio PCM/AAC+/MP3/WMA, ECNS, Audio+ post-processing (optional)
    • Camera Integrated ISP with support for image sensors up to 13MP
    • Expansion Interface 40 pin low speed expansion connector: +1.8V, +5V, SYS_DCIN, GND, UART, I2C, SPI, PCM, PWM,GPIO x12 60 pin high speed expansion connector: 4L-MIPI DSI, USB, I2C x2, 2L+4L-MIPI CSI
    • LED 6 x LED: 4xUser controlled, 2xRadio(BT and WLAN activity)
    • Button Power/Reset and Volume Up/down
    • Power Source 8V~18V@3A, Plug specification is inner diameter 1.7mm and outer diameter 4.8mm
    • OS Support Android / Linux / Windows IoT Core

    Kit Mezzanine do Linker:

    O Kit Mezzanine Linker possui uma placa com as seguintes portas: saída analógica, UART, I2C, GPIO e duas entradas analógicas ADC, e o seguinte conjunto de sensores e atuadores:

    • 1 × Button Module
    • 1 × 5mm Red LED Module
    • 1 × LDR Module
    • 1 × Thermal Module
    • 1 × Linear/Slide Potentiometer Module
    • 1 × Tilt Module
    • 1 × Touch Sensor Module
    • 1 × Relay Module

    Step 2: Configurações Iniciais Da Placa DragonBoard410C

    Instalação do S.O. Linux Linaro

    Baixar o arquivo de imagem no seguinte link http://releases.linaro.org/96boards/dragonboard41...

    Preparar imagem em SD para instalar na memória interna utilizando as instruções do link a seguir: http://releases.linaro.org/96boards/dragonboard41...

    Depois de instalada a imagem, configurar o acesso WIFI seguindo o seguinte video:

    Executar os seguintes comandos de atualização:

    sudo apt-get update

    sudo apt-get dist-upgrade

    Agora a placa já está pronta para acesso remoto via SSH no IP recebido por DHCP porta 22

    Caso seja necessário alterar alguma configuração de acesso SSH editar o arquivo localizado no seguinte caminho etc/ssh/sshd.conf


    INSTALAÇÂO DAS BIBLIOTECAS E SERVIDORES


    Instalação mosquito server (broker)

    sudo apt-get install mosquitto mosquitto-clients -y

    // Para testar a instalação subscribe e publish em tópico test: (usar duas linhas de comando)

    mosquitto_sub -h localhost -t test

    mosquitto_pub -h localhost -t test -m "hello world"

    Instalação MongoDb

    sudo apt-get update

    sudo apt-get install mongodb-server

    mongo

    Instalação do Quasar e dependências software:

    sudo npm i -g vue-cli

    sudo npm i -g quasar-cli

    sudo npm i -g yarn

    cd ../software/front

    sudo yarn

    cd ../server

    sudo npm i

    Instalação da biblioteca para acesso à gpio da Dragonboard libmraa:

    sudo add-apt-repository ppa:mraa/mraa

    sudo apt-get update

    sudo apt-get install libmraa2 libmraa-dev libmraa-java python-mraa python3-mraa node-mraa mraa-tools

    Instalação da biblioteca libsoc:

    sudo apt-get install autoconf build-essential libtool-bin pkg-config python-dev python3-dev

    git clone https://github.com/jackmitch/libsoc.git libsoc.git

    cd libsoc.git

    autoreconf -i

    ./configure

    make

    make install

    Fazer o clone do projeto

    git clone https://github.com/diegocardoso93/OIC.git

    Step 3: Montagem Da Central (Dragonboard, Mezzanine, Sensor IR TSOP4838, ESP32, Módulo IR 360º)

    As imagens acima demonstram a montagem que deve ser realizada para a central e juntamente o esquemático detalhado de como devem ser as conexões entre os periféricos.

    Step 4: (opcional) Minimodulo Emissor IR (para Outros Cômodos)

    Caso a utilização seja para mais de um cômodo, essa placa independente (pode ser usada até com bateria), pode ser feita com o flash do mesmo programa utilizado na Central para o ESP32 e estará pronta para receber comandos MQTT e emitindo via IR NEC. Deve ser colocada proxima ao dispositivo que se deseja acionar.

    Step 5: Flash ESP32 Na IDE Do Arduino

    Acesse a pasta hardware > esp32 > IRsender e clique no IRsender.ino

    Neste arquivo deve ser alterado as configurações para as variáveis ssid, password, mqtt_server; no ssid deve ser colocado o nome da rede WiFi local, o password da respectiva, o mqtt_server deve ir o IP da Dragonboard na rede.

    Para adicionar as bibliotecas que o projeto usa, acessar Sketch > Incluir biblioteca > Adicionar biblioteca .ZIP

    Escolher a pasta hardware > esp32 > lib > ESP32_RMT

    repetir o processo para a biblioteca PubSubClient.

    Caso você não tenha configurado o ESP32 como placa suportada pela IDE arduino, você pode seguir o passo a passo apresentado no seguinte link https://github.com/espressif/arduino-esp32

    Após executado os passos acima conectar a placa na USB, se for necessário instalar os drivers do USB, e então clicar em Carregar para compilar e enviar para a memória flash do ESP32 o programa.

    Step 6: Aplicação

    Para rodar a aplicação você deve abrir duas linhas de comando em uma delas ir até a pasta raiz do projeto e executar:
    cd software/front quasar dev Para rodar o backend, abrir uma nova linha de comando e executar: cd software/server npm start

    Agora a aplicação pode ser aberta pelo navegador, digitar no navegador o IP que a Dragonboard está usando e a porta 3000 (servidor).O certificado instalado não possui uma entidade certificadora digital, por isso é necessário aceitar o certificado na mensagem de alerta que será exibida. Marcar o certificado como confiável, repetir o processo para a aplicação portal 8080.

    A tela principal da aplicação possui a opção de Mapear, Controle, Falar, Configurar Voz e Estatísticas.

    Antes de poder enviar qualquer comando a um dispositivo (tv por exemplo) é preciso Mapear os botões, pois os botões estarão apagados no inicio, se a opção Controle for acessada. Para Mapear os botões, deve-se acessar a tela de Mapear e escolher TV (por exemplo), ao abrir todos os botões, você pressiona um e apontando para a Central, pressiona o botão do controle remoto real e pronto, o botão estará Mapeado, repetir o processo para outros botões que se deseja usar para a TV. Ao voltar no menu principal e acessar Controle, TV, o botão configurado estará ativo e já pode ser usado para comando na TV.

    O mapeamento de fala é bastante semelhante ao mapeamento de botão. Após o botão estar mapeado ao acessar a opção do menu principal 'Calibrar Voz' e escolhe o controle TV (por exemplo), os botões configurados aparecerão ativos. Você deve clicar sobre ele e falar e então o comando de fala respectivo será o que efetuará o comando. Para usar o comando de fala deve ser acessado o menu principal, clicar sobre a opção 'Falar' e falar o comando anteriormente configurado, assim o dispositivo será acionado.

    A tela de estatísticas demonstra os botões e controles mais utilizados.

    Step 7: Videos/Imagens Testes Dragonboard + APP + IR