Escolha uma Página

Motivação

Estamos na era da integrações entre sistemas e dispositivos, onde a internet está presente fazendo parte de nossas vidas e de nosso dia-a-dia. Cada vez mais teremos computadores, tables, celulares e pequenos dispositivos integrados com a rede mundial de computadores possibilitando a automatização de resistências, automóveis, eletrodomésticos, etc. Precisamos facilitar e otimizar estas integrações, torna-las simples.

É fácil notar como para os desenvolvedores em modo geral falar de Iot – Internet Of things parece sempre um assunto complexo e de difícil implementação, principalmente quando o assunto aborda linguagens com C/C++, Assembler e integrações com sistemas de alto nível como APIs REST e serviços em cloud.

Neste te artigo, proponho um Stack para solucionar problemas de integrações de devices com sistemas de alto nível de maneira simples, eficaz e produtiva.

Node.js – implementar com Javascript para dispositivos eletrônicos?

Sim, é isso mesmo, que tal desenvolver integrações com sensores, led, sistemas de comunicação serial, I2C, USB, Relay, Infrared, Ethernet para Embeed Devices de maneira simples e produtiva? Use Node.js 🙂 Desta maneira, você poderá desenvolver sua API Rest, um portal de visualização de dados, sistemas de backend e também Embeeded aplication tudo com apenas um linguagem de programação, o que facilita tudo. Você poderá compartilhar, portar e reutilizar códigos entre as plataformas, e sem contar que desta maneira você não precisará de um time gigante multidisciplinar com diversos skills de linguagens de programação. Parece bom, não?

Arquitetura da solução e ferramentas

Neste artigo iremos criar um sistema de monitoração de temperatura onde as leituras obtidas pelo sensor, instalado no Intel Edison, serão publicadas no Slack. O Slack é uma ferramenta de troca de mensagens, possui uma rica interface Web e também conta com versões para desktop e mobile que é uma ótima solução para notificação e alertas.

Para essa proposta tornar-se realidade precisamos de algumas ferramentas, segue o Stack proposto para solução de integração e implementação deste exemplo.

 

imagem01

Intel Edison Board para IoT

                Poderosa plataforma de desenvolvimento de sistemas embarcados baseada e totalmente compatível com o Arduino. Tem suporte não só a Node.js mas tem como C/C++, Java, Python, entre outras.

  • Dual-core Intel® Atom™ processor at 500 MHz
  • 1 GB DDR3 RAM, 4 GB eMMC flash
  • 40 multiplexed GPIO interfaces
  • Bluetooth* 4.0, Wi-Fi*
  • Yocto Project*, Brillo*
  • Arduino* compatible
  • Open-source software development environment
  • C/C++, Python*, Node.js*, HTML5, JavaScript*

Intel Edison Ofical references: https://software.intel.com/en-us/iot/hardware/edison

imagem2

imagem3imagem4

Intel XDK Development IDE

A Intel fornece uma ponderosa IDE para o desenvolvimento de soluções mobile e IoT, a Intel XDK que pode ser baixada na seguinte url: https://software.intel.com/en-us/intel-xdk. É também, uma excelente ferramenta para quem deseja desenvolver aplicações mobile cross-platform.   imagem5

imagem6

 

Configurando uma nova Url de integração no portal de administração do Slack

Para efetuarmos notificações no Slack, precisamos criar um canal ou utilizar um canal existente. E em seguida, definir dentro da configuração uma url de integração que irá apontar todos os dados recebidos para o canal desejado. Basta seguir os passos indicados abaixo:

  1. Clique em novo canalimagem7
  2. Defina um nome, a descrição para o novo canal e click em “Create Channel”imagem8
  3. Pronto, seu novo canal foi criado.
  4. Agora vamos definir uma nova integração para o canal. Click em “Manage” conforme indicado abaixo.imagem10
  5. Adicione uma nova configuração
  6. imagem11Selecione o canal e confirme a criação do novo canal.imagem12
  7. Anote a nova WebHook url que foi gerada, precisaremos indicá-la no código para enviarmos o os dados via Http POST para o canal correto.imagem13
  8. Pronto, já configuramos tudo no Slack. 🙂 Veja a indicação de sucesso na configuração da Url de notificação na mensagem indicada no canal.imagem14

Configurações de hardware

Para que o código apresentado funcione corretamente é necessário que o Intel XDK esteja instalado corretamente, o Intel Edison esteja com acesso a internet via Wi-Fi de preferência, o sensor de temperatura Grove Kit esteja conectado na porta analógica A0, o led de indicação de processamento esteja conectado na GPIO2, o Intel Edison devidamente conectada a estação de desenvolvimento e integrado com a IDE Intel XDK. Para dúvidas de como efetuar a configuração do Intel Edison e da Intel XDK acesse as urls indicadas abaixo:

imagem15

Baixe o código e grave no Intel Edison

Pronto, com tudo devidamente configurado, baixe o código do repositório GitHub:

git clone https://github.com/alexandrebl/IoT-SlackIntegration

Abra a IDE Intel XDK e em seguida o projeto através do arquivo IoTTempMonitor.xdk.

Abra o arquivo mais.js e substitua a url do WebHook na linha 113 pela url configurada conforme os passos já apresentados anteriormente e salve o arquivo.imagem16Confira as conexões com o Intel Edison Breakout Board e clique no botão de Upload conforme indicado abaixo:

imagem17

Após o upload a aplicação entrará em processamento e irá apresentar as leituras e as mensagens indicado que o processo de POST para o Slack foi efetuado com sucesso.

imagem18

 

Aplicação em execução no Intel Edison

Podemos abrir o Slack cliente, seja web, desktop ou mobile e visualizar as mensagem de notificação no Chanel.

imagem19

 

Caso sua aplicação não inicialize automaticamente você pode acessar o terminal do Intel Edison e efetuar o startup manualmente. Acesse o Intel Edison pelo serial terminal e execute os seguintes passos: imagem20

O código!!! 🙂

O código principal está no arquivo main.js que está totalmente comentado para facilitar o entendimento e a manutenção do comportamento da aplicação. Mas antes de tudo, avaliem o diagrama de fluxo de dados para facilitar o entendimento da responsabilidade de cada método e de como a aplicação se comporta. imagem21

 

/*
    Iot Intel Edison Api REST Slack Integration
    by Alexandre Brandão Lustosa
    Github: https://github.com/alexandrebl
    Twitter: https://twitter.com/abrandaolustosa
    LinkedIn: https://www.linkedin.com/in/abrandaol
    E-mail: alexandre.brandao.lustosa@gmail.com
            alexandre@insidesis.com
*/
//Load mraa eletronic sensor library
var mraa = require(“mraa”);
//Load http request library
var request = require(‘request’);
//Sensor variable
var tempSensor = new mraa.Aio(0);
//Led process indicator
var ledProcess = new mraa.Gpio(2);
//Initialize application
main();
//Main function
function main(){
    //Print message
    console.log(“Config”);
    //Setup configurations
    config();
    //Set loop process each 4 seconds
    setInterval(function () {
        //Set led process indicator on
        ledProcessOn();
        //Read Sensor
        var data = readTempSensor();
        //Post data on Slack
        postOnSlack(data);
        //Set led process indicator on
        ledProcessOff();
    }, 4000);
}
//Setup configuration
function config(){
    //Set pin direction
    ledProcess.dir(mraa.DIR_OUT);
}
//Read temperature sensor
function readTempSensor() {
    //Read sensor
    var a = tempSensor.read();
    //Set resistênce value
    var resistance = (1023 – a) * 10000 / a;
    //Convert temperature to celsius according mraa datasheet
    var celsius_temperature = 1 / (Math.log(resistance / 10000) / 3975 + 1 / 298.15) – 273.15;
    //Convert temperature to fahrenheit
    var fahrenheit_temperature = (celsius_temperature * (9 / 5)) + 32;
    //Print message
    console.log(“Fahrenheit Temperature: ” + fahrenheit_temperature);
    //Print message
    console.log(“Celcius Temperature: ” + celsius_temperature);
    //Set response message
    var data = formatData(fahrenheit_temperature, celsius_temperature);
    //Return
    return data;
}
//Set led process indicator on
function ledProcessOn(){
    //Write signal to up
    ledProcess.write(1);
}
//Set led process indicator off
function ledProcessOff(){
    //Write signal to down
    ledProcess.write(0);
}
//Format message
function formatData(fahrenheit, celsius){
    //Set message
    var msg = “Fahrenheit: ” + fahrenheit.toFixed(2) + “°F / Celsius: ” + celsius.toFixed(2) + “°C”;
    //Set data
    var data = {
        “text”: “Actual local temperature:”,
        “attachments”: [
            {
                “color”: “#0066ff”,
                “text”: msg,
                “footer”: “Slack API IoT Integration with Intel Edison”,
                “footer_icon”: “https://platform.slack-edge.com/img/default_application_icon.png”,
            }
        ]
    };
    //Return
    return data;
}
//Post data on Slack  WebHoook Integration
function postOnSlack(data){
    //Set options and message
    var options = {
        //Webhook uri, replace by your uri Slack web hook integration
        uri: ‘https://hooks.slack.com/services/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’,
        method: ‘POST’, //Request type
        json: data      //Data
    };
    //Do post request
    request(options, function (error, response, body) {
        //Verify response
        if (!error && response.statusCode == 200) {
            //Print message
            console.log(“Success”);
        }else{
            //Print message
            console.log(error);
        }
    });
}

Este código fonte entre outros exemplos de sistemas e bibliotecas para IoT estão disponíveis para download no GibHub: https://github.com/alexandrebl

 Conclusão

 

Não há nada melhor que aplicarmos nosso conhecimento em uma área emergente e que terá cada vez mais impacto na vida das pessoas. Use usas ideias, resolva problemas e diminua a complexidade de suas implementações, use o Intel Edison with Node.js, cause impacto, seja um Intel Maker e mude o mundo ao se redor.

Quer receber as novidades de e-commerce em primeira mão?

x