65
OpenDevice Open IoT (Internet Of Things) Platform and Framework. “Conjunto de ferramentas e APIs para construção de soluções de Internet das Coisas” Ricardo JL Rufino <[email protected]>

OpenDevice IoT - 2016 (LowLevel)

Embed Size (px)

Citation preview

Page 1: OpenDevice IoT - 2016 (LowLevel)

OpenDeviceOpen IoT (Internet Of Things) Platform and

Framework.

“Conjunto de ferramentas e APIs para construção de soluções de Internet das Coisas”

Ricardo JL Rufino <[email protected]>

Page 2: OpenDevice IoT - 2016 (LowLevel)

AgendaAgenda

● Introdução a Internet das Coisas (fast !!)● Arduino● OpenDevice (Hands-On)

● Arduino / Raspberry e Similares● Protocolos de Comunicação● Brincando via JavaScript● Comunicação em real-time utilizando WebSockets● Utilizando o Android

Page 3: OpenDevice IoT - 2016 (LowLevel)

AgendaApresentação

Ricardo JL Rufino

➔ Esp. em Engenharia de Software➔ Mestrado em Gestão de TI (UFPE)➔ Sócio fundador da CriativaSoft (Teresina / PI)

➔ Atuo no desenvolvimento de Software desde 2007, focado em soluções empresariais sobre plataforma JavaEE. Desenvolvedor de softwares open-source como Framework Web MVC Mentawai, Arduino IDE (autocomplete) e instrutor de cursos de Java.

Page 4: OpenDevice IoT - 2016 (LowLevel)

Internet das

Coisas

Page 5: OpenDevice IoT - 2016 (LowLevel)

Internet das Coisas

● Que coisas são essas ?– Computadores– Smart Phones– Tablets– Sensores– Roupas– Pessoas– Pode ser o que você quiser ! Até cidades !

Page 6: OpenDevice IoT - 2016 (LowLevel)

Conceito

● O Conceito de “Internet das Coisas” começou a ser desenvolvido em 1999 nos laboratórios do MIT. A proposta é ligar todas as coisas à Internet, de sofisticados equipamentos até lâmpadas, para que esses objetos passam se comunicar entre si e com os usuários, a fim de gerar informações com diversos potenciais e finalidades

Page 7: OpenDevice IoT - 2016 (LowLevel)

Momento Atual

Fonte: Gartner (ago. 2015) - http://www.gartner.com/newsroom/id/3114217

Page 8: OpenDevice IoT - 2016 (LowLevel)

Envolvidos ?

● Grandes empresas estão aderindo...– Google

● Compra da Nest ($3.2 ~ R$ 7.5 bilhões )● Compra da Boston Dynamics (robôs)● Sistema Operacional para carros. (Android Auto)

– Apple (HomeKit, healthkit, )

– Microsoft● Lançando plataformas de IoT

– Dell, Intel e Samsung

– Muitas outras e em breve ….. a ;)

Page 9: OpenDevice IoT - 2016 (LowLevel)

O vamos fazer agora ?

● Nós somos desenvolvedores, não somos pessoas normais .. ACEITE !!!

● Vamos HACKEAR as coisas● Vamos CRIAR novas coisas

– É preciso estudar bastante

– Não ter medo de errar.. !

Page 10: OpenDevice IoT - 2016 (LowLevel)

O que temos em mãos ?

Page 11: OpenDevice IoT - 2016 (LowLevel)

Arduino

Page 12: OpenDevice IoT - 2016 (LowLevel)

O que é Arduino

● Arduino é uma plataforma de prototipagem eletrônica open-source, baseada nos princípios de flexibilidade e facilidade de uso para hardware e software.

● Consiste de uma placa com microcontrolador programável preparada para receber sinais de sensores e acionar atuadores.

● Sua linguagem de programação é baseada em Wiring (baseado em C/C++).

● A placa pode funcionar em conjunto ou de forma independente do computador

● É uma comunidade !

Se você já conhece pode pular muitas páginas...

Page 13: OpenDevice IoT - 2016 (LowLevel)

Hardware (modelos)

Page 14: OpenDevice IoT - 2016 (LowLevel)

Hardware (modelos)

Page 15: OpenDevice IoT - 2016 (LowLevel)

Arduino é Open Source

● Todo o hardware é aberto e os projetos estão disponíveis

● Quem quiser, pode comprar os componentes e montar a sua placa

● O software de programação também é livre e está disponível para download gratuitamente

Page 16: OpenDevice IoT - 2016 (LowLevel)

●O que não temos, podemos criar !

Page 17: OpenDevice IoT - 2016 (LowLevel)

●O que não temos, podemos criar !

Page 18: OpenDevice IoT - 2016 (LowLevel)

Linha 1 Linha 2 Linha 3 Linha 40

2

4

6

8

10

12

Coluna 1

Coluna 2

Coluna 3

Problema !!Como fazer a comunicação

com esses equipamentos / dispositivos ?

Os padrões ainda estão sendo criados.... (verdadeira gerra !)

É preciso ser fácil

Page 19: OpenDevice IoT - 2016 (LowLevel)

1

Linha 1 Linha 2 Linha 3 Linha 40

2

4

6

8

10

12

Coluna 1

Coluna 2

Coluna 3

Alternativas com JAVA ?

● A Sun nos abandonou ! (JavaComm/JSR80 ?!?)● RXTX tem muitos problemas e tem ajustes manuais

- Consegue fazer via JNI (Java Native Interface) - Pra quem quer começar é um problema ! ● Usb4java – Nova, mas parece promissora !

...A IDE do Arduino usa RXTX por baixo dos panos

USB ??

Page 20: OpenDevice IoT - 2016 (LowLevel)

1

Linha 1 Linha 2 Linha 3 Linha 40

2

4

6

8

10

12

Coluna 1

Coluna 2

Coluna 3

Alternativas com JAVA ?

● Aqui só no J2ME (JSR-82) e Android.● Desktop nem pensar !! e Raspberry ?? rsrsr● Saída : Bluecove (usando JNI)

● Problema : Ultimo release é de 2008 Snapshot em 2010

Bluetooth ??

* JNI faz chamadas a bibliotecas em C, produzidas para esse fim

Page 21: OpenDevice IoT - 2016 (LowLevel)

1

Linha 1 Linha 2 Linha 3 Linha 40

2

4

6

8

10

12

Coluna 1

Coluna 2

Coluna 3

Alternativas com JAVA ?

Esse não podemos reclamar !

Rede / TCP / IP?

Page 22: OpenDevice IoT - 2016 (LowLevel)

Linha 1 Linha 2 Linha 3 Linha 40

2

4

6

8

10

12

Coluna 1

Coluna 2

Coluna 3

Tudo junto ?

Dá um trabalhinho !

E você precisa criar sua própria forma de comunicação

Lidar com detalhes de baixo nívelCorreção de Erros

Precisa ter uma boa experiênciaEtc.. etc...

Page 23: OpenDevice IoT - 2016 (LowLevel)

Linha 1 Linha 2 Linha 3 Linha 40

2

4

6

8

10

12

Coluna 1

Coluna 2

Coluna 3

Solução ?Quem pode nos ajudar ?

Page 24: OpenDevice IoT - 2016 (LowLevel)

OpenDeviceOpen IoT (Internet Of Things) Platform and

Framework.

“Conjunto de ferramentas e APIs para construção de soluções de Internet das Coisas”

Page 25: OpenDevice IoT - 2016 (LowLevel)

OpenDevice

● APIs e Ferramentas que permitem construir sistemas de:– Automação Residencial

– Monitoramento de Sensores

– Monitoramento de Energia

– Controle de Robôs

– Smart City

Page 26: OpenDevice IoT - 2016 (LowLevel)

Objetivos

● Facilitar o desenvolvimento de aplicações para IoT● Solução completa para integração entre plataformas● Integração entre diferentes dispositivos e protocolos● Utilização em dispositivos com limitações de

processamento e memória● Oferecer um protocolo aberto e extensível● Simplificação na criação de dispositivos inteligentes● Oferecer uma plataforma base para criação de

projetos especializados

Page 27: OpenDevice IoT - 2016 (LowLevel)

Foco no que é importante !

Isso permite que você se concentre em seu projeto e na inovação, deixando os detalhes de baixo nível dos protocolos de comunicação e especificações com OpenDevice, permitindo você focar no que é importante para o sucesso de seu projeto.

Page 28: OpenDevice IoT - 2016 (LowLevel)

Tecnologias Envolvidas

Page 29: OpenDevice IoT - 2016 (LowLevel)

Funcionalidades

● Open API (for: REST, JavaScript, Java, Android, Arduino, EnergiaIDE)

● Real-time (WebSockets)● Event-Based● Async & non-blocking● Multi-protocolo (Usb, Bluetooth, TCP)● Independente de Linguagem● Independente de Plataforma (Windows, Linux, Mac, MIPs on

OpenWRT)● Lightweight/Built-in Servers (não precisa do tomcat ou glassfish)

Page 30: OpenDevice IoT - 2016 (LowLevel)

Funcionalidades

● Hardware● Desktop● Cloud● Web

Suas ferramentas tangem todas as camadas envolvidas no ecossistema de IoT:

Page 31: OpenDevice IoT - 2016 (LowLevel)

Funcionalidades

● Armazenamento● Controle● Configuração● Visualização

Infraestrutura de comunicação e serviços de:

Page 32: OpenDevice IoT - 2016 (LowLevel)

Event-driven and Real-Time

Você não precisa consultar a informação, ela vem até você quando os dados estiverem disponíveis

Page 33: OpenDevice IoT - 2016 (LowLevel)

Visão Geral

<WebSockt, Rest><Bluetooth, Ethernet>

<USB, TCP>

Clients

Middleware (Local)

Firmware

Firmware

<Bluetooth,Wifi>

Devices <MQTT>

<MQTT>

Page 34: OpenDevice IoT - 2016 (LowLevel)

Um pouco de códigos...

Boa parte dos exemplos a seguir estão em: https://github.com/OpenDevice/opendevice-examples/tree/master/opendevice-tutorial

Page 35: OpenDevice IoT - 2016 (LowLevel)

Blink – Arduino (C/C++)

Biblioteca disponível em: https://github.com/OpenDevice/opendevice-lib-arduinoPS: Logo estará disponível no gerenciador de bibliotecas (em: set/2015)

Page 36: OpenDevice IoT - 2016 (LowLevel)

Blink – Arduino (C/C++)Outras opções.....

Page 37: OpenDevice IoT - 2016 (LowLevel)

Blink - Java

Orientado a Objetos

Page 38: OpenDevice IoT - 2016 (LowLevel)

Blink Java (sem o.O)Enviando comandos diretamente....

Page 39: OpenDevice IoT - 2016 (LowLevel)

Comandos Customizados

Java: UserCommandsDemo.java

Arduino: UserCommands.ino

OBS: Parte dos códigos foram omitidos

Page 40: OpenDevice IoT - 2016 (LowLevel)

Incrementando no JAVA

Definição de Dispositivos

Definição das Conexões

* JAVA

*Opcional: Somente é necessário se for trabalhar com O.O do lado java

Page 41: OpenDevice IoT - 2016 (LowLevel)

Adicionando Rest !

Adicione essa linha e seja feliz !!!

Você pode acessar pelo navegador

… ou com JavaScript !

Page 42: OpenDevice IoT - 2016 (LowLevel)

Agora ficou sério ! WebSockets !Adicione essas linhas e fique Real-Time e de quebra servidor http !

Biblioteca de Rest e WebSocket ! (adicione no pom.xml)

Ao adicionar o servidor de W.S automaticamente já é adicionado o servidor REST

Page 44: OpenDevice IoT - 2016 (LowLevel)

API JavaScript para WebSocketExemplo utilizando Gráficos: jquery.flot.js

Link do Exemplo no Github

Page 45: OpenDevice IoT - 2016 (LowLevel)

JavaScript no Server Side

● Permite desenvolver em JavaScript no lado do Servidor, algo semelhante ao que o Node.js faz.

● Utiliza o Nashorn (engine JavaScript padrão do Java 8)

● Você cria a aplicação em JavaScript (podendo acessar as classes Java do OpenDevice)

● Ou estender, usando Hooks (eventos)

● Suporte a JavaFX

● Módulo: opendevice-js-engine (adicione no pom.xml)

– Gera um jar: odevjs.jar , para ser usado de forma independente

– odevjs.exe -fx myscript.js

[1] – Use o profile: windows quando for compilar usando o maven

Page 47: OpenDevice IoT - 2016 (LowLevel)

Android

● Não poderíamos esquecer do Android● Atualmente o OpenDevice suporta:

– Cliente WebSocket (opendevice-wasync-client)

– Bluetooth (opendevice-android-stream)

– Usb (aguardando contribuições...)

Page 48: OpenDevice IoT - 2016 (LowLevel)

Android

● Adicione as dependências no app/build.gradle

● Os códigos são basicamente os mesmos do Java● Aplicação exemplo disponível em:

https://github.com/OpenDevice/opendevice-examples/tree/master/opendevice-android-demo

Page 49: OpenDevice IoT - 2016 (LowLevel)

Visualização e controle dos dispositivos● Módulo opendevice-web-view:

– HTML5– WebSocket (OpenDevice.js)– AngularJS– Gráficos (em tempo real e históricos)– Criação de Dashboard's (com Drag and Drop)

Page 50: OpenDevice IoT - 2016 (LowLevel)

Visualização e controle dos dispositivos

Page 51: OpenDevice IoT - 2016 (LowLevel)

Protocolo

● Voltado para dispositivos com restrições de memória e processamento– Microcontroladores AVR 8-bits, 2Kb de RAM

● Baseado em ASCII● Influências do protocolo MIDI e Rest● Pode ser utilizado em conjunto com:

– USB, Bluetooth, Ethernet e Wi-Fi;

– WebSocket e MQTT.

Page 52: OpenDevice IoT - 2016 (LowLevel)

Formato da MensagemOs comandos do OpenDevice possuem um cabeçalho fixo, contento:● Tipo do comando (CommandType)● ID do comando (sequêncial e gerenciado pela aplicação)● + Bloco “Command Extension”, que varia de acordo com o tipo de

comando.

COMMAND TYPE ID {......} '\r'

Start EndCommand ExtensionSeparator

Page 53: OpenDevice IoT - 2016 (LowLevel)
Page 54: OpenDevice IoT - 2016 (LowLevel)

Exemplo - Comando: DIGITAL

Page 55: OpenDevice IoT - 2016 (LowLevel)

Instalação (arduino/similar)

● Baixar ou Clonar o repositório do GIT– github.com/OpenDevice/opendevice-lib-arduino

● Copiar para pasta '/libraries' da IDE do Arduino– Mude o nome da pasta para OpenDevice

● Reinicie a IDE do Arduino

Github / Sources: https://github.com/OpenDevice

Page 56: OpenDevice IoT - 2016 (LowLevel)

Instalação (Java)

● Usando o Maven (arquivo pom.xml)

Substitua: ${opendevice-version} pela ultima versão

Qualquer dúvida consulte:https://opendevice.atlassian.net/wiki/display/DOC/Documentation

<dependencies><dependency>

<groupId>br.com.criativasoft.opendevice</groupId><artifactId>opendevice-connection-stream</artifactId><version>${opendevice-version}</version>

</dependency> <dependency>

<groupId>br.com.criativasoft.opendevice</groupId><artifactId>opendevice-core</artifactId><version>${opendevice-version}</version>

</dependency></dependencies>

Page 57: OpenDevice IoT - 2016 (LowLevel)

Instalação

● Adicionar o repositório da Sonatype<repositories>

<repository><id>oss.sonatype.org</id><url>https://oss.sonatype.org/content/repositories/releases</url>

</repository><repository>

<id>oss.sonatype.org-snapshot</id><url>https://oss.sonatype.org/content/repositories/snapshots</url>

</repository></repositories>

Page 58: OpenDevice IoT - 2016 (LowLevel)

OpenDevice + Blender

https://github.com/OpenDevice/opendevice-examples/tree/master/opendevice-3d-blenderhttps://github.com/OpenDevice/opendevice-extensions/tree/master/python-client

Page 59: OpenDevice IoT - 2016 (LowLevel)

Integração com Ambientes 3D

● Blender

Page 60: OpenDevice IoT - 2016 (LowLevel)

Dúvidas ?

Page 61: OpenDevice IoT - 2016 (LowLevel)

Postura !

Nós somos desenvolvedores, não somos “normais”.

ACEITE ISSO.. !!!

Devemos ser agentes de Transformação e Criação.

Page 62: OpenDevice IoT - 2016 (LowLevel)

Atitude !

Não espere a ideia brilhante !

Execute a ideia que você gosta.

Descubra o que você gosta

Não escute os outros ● Muita gente vai dizer que você não consegue

● Muita gente vai dizer que já existe

Page 63: OpenDevice IoT - 2016 (LowLevel)

Contatos

● E-mail: – [email protected]

[email protected]

● Facebook– /ricardojlrufino

Page 64: OpenDevice IoT - 2016 (LowLevel)

Link's

● OpenDevice: – http://opendevice.io

– https://github.com/OpenDevice

– https://opendevice.atlassian.net/wiki

– http://opendevice.criativasoft.com.br

● Facebook– /opendevice

● IDE do Arduino + Melhorias– http://iot.criativasoft.com.br

Page 65: OpenDevice IoT - 2016 (LowLevel)

Obrigado pela sua atenção.