1. 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 <ricardo@criativasoft.com.br>
2. 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
3. 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.
5. Internet das Coisas
● Que coisas são essas ?
– Computadores
– Smart Phones
– Tablets
– Sensores
– Roupas
– Pessoas
– Pode ser o que você quiser ! Até cidades !
6. 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
8. 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 ;)
9. 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.. !
12. 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...
15. 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
18. Linha 1 Linha 2 Linha 3 Linha 4
0
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
19. 1
Linha 1 Linha 2 Linha 3 Linha 4
0
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 ??
20. 1
Linha 1 Linha 2 Linha 3 Linha 4
0
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 e
21. 1
Linha 1 Linha 2 Linha 3 Linha 4
0
2
4
6
8
10
12
Coluna 1
Coluna 2
Coluna 3
Alternativas com JAVA ?
Esse não podemos reclamar !
Rede / TCP / IP?
22. Linha 1 Linha 2 Linha 3 Linha 4
0
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ível
Correção de Erros
Precisa ter uma boa experiência
Etc.. etc...
23. Linha 1 Linha 2 Linha 3 Linha 4
0
2
4
6
8
10
12
Coluna 1
Coluna 2
Coluna 3
Solução ?
Quem pode nos ajudar ?
24. OpenDevice
Open IoT (Internet Of Things) Platform and
Framework.
“Conjunto de ferramentas e APIs para construção de
soluções de Internet das Coisas”
25. OpenDevice
● APIs e Ferramentas que permitem construir
sistemas de:
– Automação Residencial
– Monitoramento de Sensores
– Monitoramento de Energia
– Controle de Robôs
– Smart City
26. 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
27. 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.
40. 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
41. Adicionando Rest !
Adicione essa linha e seja feliz !!!
Você pode acessar pelo navegador
… ou com JavaScript !
42. 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
44. API JavaScript para WebSocket
Exemplo utilizando Gráficos: jquery.flot.js
Link do Exemplo no Github
45. 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
47. 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...)
48. 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
49. 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)
51. 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.
52. Formato da Mensagem
Os 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
55. 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
56. 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>
57. 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>
61. Postura !
Nós somos desenvolvedores, não somos “normais”.
ACEITE ISSO.. !!!
Devemos ser agentes de Transformação e Criação.
62. 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