View
181
Download
3
Category
Preview:
Citation preview
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 <ricardo@criativasoft.com.br>
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
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.
Internet das
Coisas
Internet das Coisas
● Que coisas são essas ?– Computadores– Smart Phones– Tablets– Sensores– Roupas– Pessoas– Pode ser o que você quiser ! Até cidades !
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
Momento Atual
Fonte: Gartner (ago. 2015) - http://www.gartner.com/newsroom/id/3114217
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 ;)
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.. !
O que temos em mãos ?
Arduino
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...
Hardware (modelos)
Hardware (modelos)
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
●O que não temos, podemos criar !
●O que não temos, podemos criar !
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
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 ??
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
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?
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...
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 ?
OpenDeviceOpen IoT (Internet Of Things) Platform and
Framework.
“Conjunto de ferramentas e APIs para construção de soluções de Internet das Coisas”
OpenDevice
● APIs e Ferramentas que permitem construir sistemas de:– Automação Residencial
– Monitoramento de Sensores
– Monitoramento de Energia
– Controle de Robôs
– Smart City
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
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.
Tecnologias Envolvidas
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)
Funcionalidades
● Hardware● Desktop● Cloud● Web
Suas ferramentas tangem todas as camadas envolvidas no ecossistema de IoT:
Funcionalidades
● Armazenamento● Controle● Configuração● Visualização
Infraestrutura de comunicação e serviços de:
Event-driven and Real-Time
Você não precisa consultar a informação, ela vem até você quando os dados estiverem disponíveis
Visão Geral
<WebSockt, Rest><Bluetooth, Ethernet>
<USB, TCP>
Clients
Middleware (Local)
Firmware
Firmware
<Bluetooth,Wifi>
Devices <MQTT>
<MQTT>
Um pouco de códigos...
Boa parte dos exemplos a seguir estão em: https://github.com/OpenDevice/opendevice-examples/tree/master/opendevice-tutorial
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)
Blink – Arduino (C/C++)Outras opções.....
Blink - Java
Orientado a Objetos
Blink Java (sem o.O)Enviando comandos diretamente....
Comandos Customizados
Java: UserCommandsDemo.java
Arduino: UserCommands.ino
OBS: Parte dos códigos foram omitidos
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
Adicionando Rest !
Adicione essa linha e seja feliz !!!
Você pode acessar pelo navegador
… ou com JavaScript !
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
API JavaScript para WebSocket
Link do Exemplo no Github
API JavaScript para WebSocketExemplo utilizando Gráficos: jquery.flot.js
Link do Exemplo no Github
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
JavaScript no Server Side
Link do Exemplo no Github
Executando:
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...)
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
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)
Visualização e controle dos dispositivos
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.
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
Exemplo - Comando: DIGITAL
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
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>
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>
OpenDevice + Blender
https://github.com/OpenDevice/opendevice-examples/tree/master/opendevice-3d-blenderhttps://github.com/OpenDevice/opendevice-extensions/tree/master/python-client
Integração com Ambientes 3D
● Blender
Dúvidas ?
Postura !
Nós somos desenvolvedores, não somos “normais”.
ACEITE ISSO.. !!!
Devemos ser agentes de Transformação e Criação.
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
Contatos
● E-mail: – ricardo@criativasoft.com.br
– rjlr@cin.ufpe.br
● Facebook– /ricardojlrufino
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
Obrigado pela sua atenção.
Recommended