Trilha: Internet das CoisasComputação Física, Plataformas, Comunicação, APIs
Comunicação entre Arduino, Raspberry, Android com OpenDevice.
Ricardo JL [email protected]
AgendaAgenda● Introdução a Internet das Coisas (fast !!)● Arduino
● Exemplos● Shields● Sensores● Projetos
● Automação Residencial..● 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➔ Mestrando em Gestão de TI (UFPE)➔ Sócio fundador da CriativaSoft.
➔ 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, ProjectNCode 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
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, )
– Microsof● Lançando plataformas de IoT
– Dell, Intel e Samsung
– Muitas outras e em breve ….. a ;)
“A Internet das Coisas vai mudar o mundo completamente.”F
UTURO Hu – Yoshida ( CTO Hitachi )
Como vim para aqui ?
● Tudo começa com um violão...
.. e a primeira gambiarra:
● Um captador feito a partir de um relógio de pulso
GENIAL !!!! = )
Como vim para aqui ?
● Depois a meta era uma Guitarra !
● Resumindo:2 anos juntando mesada !
E o amplificador ?
E o amplificador ?
Descobri que é possível criar coisas !!!
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)
Software (Arduino IDE)
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
Clones• SeeDuino
• Freeduino
• Severino• Brasuíno
Similares
LaunchPad (32bits - ARM Cortex M4)chipKIT Uno32 - 32 bits, 80MHz, 128kB Flash, 16kB SRAM
Similares
Digispark ( 6 I/O Pins,USB, I2C, SPI )
DigisparkDigispark
Adafruit Trinket (ATtiny85)
Similares
●O que não temos, podemos criar !
●O que não temos, podemos criar !
Dúvidas ?
Características de Hardware
Arduino Uno
Arduino Uno● Microcontrolador: ATmega328p (8-bit AVR RISC);● Tensão de operação: 5V;● Tensão de entrada (recomendada): 7-12V;● Pinos digitais de E/S:14 (6 podem ter sinal PWM);● Pinos com entrada analógica: 6;● Corrente máxima por pino de E/S: 40 mA;● Hardware para comunicação: 1 porta serial (UART TTL), I2C (TWI), SPI;● Memória Flash (de programa): 32 kB (0,5 kB são usados pelo bootloader);● Memória SRAM: 2 kB; EEPROM: 1 kB;● Frequência de clock: 16 MHz.
http://arduino.cc/en/Main/arduinoBoardUno
Arduino UNO
Arduino Leonardo
Arduino Leonardo● Microcontrolador: ATmega32u4 (Atmel 8-bit AVR RISC);● Tensão de operação: 5V;● Tensão de entrada (recomendada): 7-12V;● Pinos digitais de E/S: 20 (7 podem ter sinal PWM);● Pinos com entrada analógica: 12;● Corrente máxima por pino de E/S: 40 mA;● Hardware para comunicação: 1 porta serial (UART), I2C (TWI), SPI, USB 2.0
(emula teclado ou mouse);● Memória Flash (de programa): 32 kB (4 kB usado pelo bootloader)● Memória SRAM: 2,5 kB; EEPROM: 1 kB;● Frequência de clock: 16 MHz.● Suporte a comunicação USB no próprio ATmega32u4;
http://arduino.cc/en/Main/arduinoBoardLeonardo
Arduino Mega 2560
Arduino Mega 2560
● Microcontrolador: ATmega2560; ● Tensão de operação: 5V;● Tensão de entrada (recomendada): 7-12V;● Pinos digitais de E/S: 54 (15 podem ter sinal PWM);● Pinos com entrada analógica: 16;● Corrente máxima por pino de E/S: 40 mA;● Hardware para comunicação: 4 portas seriais (UART), I2C (TWI), SPI, USB 2.0
(emula teclado ou mouse);● Memória Flash (de programa): 256 kB (8 kB são usados pelo bootloader)● Memória SRAM: 8 kB; EEPROM: 4 kB;● Frequência de clock: 16 MHz.
O que é um Microcontrolador?
● CPU de pequeno porte, capaz de executar um conjunto de instruções;
● Ou seja, possui um microprocessador!● – Instruções simples e rápidas;● – Possui memória(s);● – Possui periféricos;● – Pode se comunicar com outros periféricos;
Microcontrolador
Microcontrolador
Diagrama do PIC16F887
Microcontrolador
Comparativo Arduinos
Software e Programação
Programação (Blink)
Define o modo de operação do PINO 13 como Saída
Liga a Tensão (5V) no PINO 13
Desliga
Esquema / Ligações
Esquema / Ligações
È recomendável usar um Resistor (de 220ohm a 1k)
No LED a maior perna é o positivo
Esquema / Protoboard
Esquema / Sem nada !
Pra quem tem preguiça: O Arduino já vem com um LED embutido (Pino 13)
Instalação
IDE é compatível: Windows, Mac OS X e Linux– Link: http://arduino.cc/en/main/software
● Driver– Windows: precisa do driver FTDI
– Linux: não precisa de NADA... ;)
● Software– Basta descompactar e rodar (se quiser tem um instalador)
– Se tiver algum problema instale a versão antiga: Arduino 1.0.X
– Dúvidas, siga:● https://www.circuitar.com.br/tutoriais/configurando-o-arduino-no-windows/● Win 8: http://futebol-uff.blogspot.com.br/2012/12/instalando-drivers-do-arduino-no.html
Gravando o Programa
1 - Selecione o Modelo da Placa
2 - Selecione a Porta Serial *
* Se não aparecer, pode ser problema no Driver (Ruindows !!!)No Arduino Leonardo a porta fica mudando e algumas vesses você precisa selecionar várias vesses !
3 – Clique em upload para compilar e enviar para o Arduino
Linha 1 Linha 2 Linha 3 Linha 40
2
4
6
8
10
12
Coluna 1
Coluna 2
Coluna 3Prática ?!
Dúvidas ?
Antes do Arduino
http://www.avr-tutorials.com/
Antes do ArduinoDigital I/O Assembly
http://www.avr-tutorials.com/
Antes do Arduino● Processo Lento
● Mais caro
● Mais Complexo
OK !!! Voltando....
Exemplo 2 : Botão (Leitura Digital)
Exemplo 2 : Botão (Leitura Digital)
Exemplo 2 : Botão (Leitura Digital)
http://arduino.cc/en/Tutorial/DigitalReadSerial
Exemplo 2 : Botão (explicação)
O digitalRead() lê as tensões de entrada: (5v ou 0v) e converte em valores: 0 (LOW) e 1 (HIGH)
O pino em modo de leitura (INPUT), sem nenhuma conexão, irá flutuar gerando valores aleatórios, por isso precisamos puxar ele pra 0v (pull-down) ou para 5v (pull-up)
… Então quando a chave estiver aberta, precisamos levar o pino para um estado confiável, no caso ligamos ao negativo (GND) usando um resistor (ou seja um pull-down )
Potenciômetro : Leitura Analógica
http://www.arduino.cc/en/tutorial/potentiometer
Potenciômetro : Leitura Analógica
Potenciômetro : Código
Potenciômetro : Leitura Analógica
● analogRead() - Lê valores dos pinos analógicos
● O conversor A/D do microcontrolador ATmega328 possui 10 bits de resolução, gerando valores na faixa 0 a 1023 conforme a tensão no pino, que varia de 0v a 5v.
● A quantidade de pinos analógicos varia em cada modelo.
● Demora 100 microsegundos (0.0001 s) para ler (10,000 leituras / seg)
Sensor de Luz : LDR
● LDR (do inglês Light Dependent Resistor) ou Photo-resistor● Componente eletrônico passivo do tipo resistor variável ● A medida que a intensidade da luz aumenta, a sua resistência
diminui.● Não é muito preciso !
Sensor de Luz : LDR
Modo Pull-DownPouca Luz → Valor Baixo
Modo Pull-UpPouca Luz → Valor Alto
Sensor de Luz : Código
Shields Arduino
● Sistema modular para expandir as funcionalidades do arduino.
● A parte mais genial !!!● Uma lista enorme pode
ser encontrada em:
http://shieldlist.org/
Linha 1 Linha 2 Linha 3 Linha 40
2
4
6
8
10
12
Coluna 1
Coluna 2
Coluna 3Exemplos
Shield : Ethernet
Shield : WiFly Shield
https://www.sparkfun.com/products/9954
Shield : Cellular with SM5100B
https://www.sparkfun.com/products/9607
Shield : GPS
https://www.sparkfun.com/products/10710
Shield : XBee
Shield : Color LCD Shield
https://www.sparkfun.com/products/retired/9363
Shield : Relay Shield
http://www.seeedstudio.com/depot/relay-shield-v20-p-1376.html?cPath=132_134
Shield : MP3 Player Shield
Linha 1 Linha 2 Linha 3 Linha 40
2
4
6
8
10
12
Coluna 1
Coluna 2
Coluna 3Sensores
http://www.trossenrobotics.com/
Sensores
http://www.trossenrobotics.com/c/arduino-sensors.aspx?sort=SalesRank
Sensores
http://www.trossenrobotics.com/c/arduino-sensors.aspx?sort=SalesRank
Sensores
http://www.trossenrobotics.com/c/arduino-sensors.aspx?sort=SalesRank
Linha 1 Linha 2 Linha 3 Linha 40
2
4
6
8
10
12
Coluna 1
Coluna 2
Coluna 3Robôs
Robôs
Robôs
Robôs
Robôs
Automação Residencial
Automação Residencial
● Ligar/Desligar qualquer eletrodoméstico● Controlar iluminação, temperatura● Sensores de Presença (segurança)● Controle de portas e portões automáticos● Controle Centralizado● Controle Remoto (pela internet)● Economia de Energia e Monitoramento de Consumo● Hardware barato ( Redução de Custos !!!! )
Automação Residencial
Linha 1 Linha 2 Linha 3 Linha 40
2
4
6
8
10
12
Coluna 1
Coluna 2
Coluna 3Projetos
Twitter Enabled Coffee Pot
http://www.instructables.com/id/Tweet-a-Pot-Twitter-Enabled-Coffee-Pot/
Inebriator
http://www.theinebriator.com/
Flamethrowing Jack-O'-Lantern
http://www.instructables.com/id/Flamethrowing-Jack-O-Lantern/
Tree Climbing Robot
http://www.instructables.com/id/Tree-Climbing-Robot/
Arduino R/C Lawnmower
http://www.instructables.com/id/Arduino-RC-Lawnmower/
http://www.wired.com/2013/01/wearable-arduinos/#slideid-351561
Drones
ArduIMU Quascopter
http://thecoolgadgets.com/arduimu-quascopter-diy-arduino-helicopter-4-infrared-and-1-ultra-sonic-sensors/
Dúvidas ?
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çãoLidar com detalhes de baixo nível
Correção de ErrosPrecisa ter uma boa experiência
Etc.. 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”
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
OpenDevice
● Objetivo:
O principal objetivo é monitorar e controlar hardwares baratos como Arduino, RaspberryPI e plataformas semelhantes, local (offline) ou sobre a nuvem usando linguagens de programação de alto nível e com a abstração de protocolos e detalhes de baixo nível.
Foco no que é importante !
Isso permite que você se concentre em seu projeto e na inovação, deixar os detalhes obscuros de protocolos de comunicação e especificações com OpenDevice, você vai dar um passo 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)
Visão Geral
Event-driven and Real-Time
Você não precisa consultar a informação, ela vem até você quando os dados estiverem disponíveis
Hands-On/Of
Uma pitada de java...
Blink - Arduino
* C / Arduino
Blink - Java
Blink Java (mais livre)
Blink Java (Comandos)
Incrementando no Arduino
* C / Arduino
Incrementando no JAVA
Definição de Dispositivos
Definição das Conexões
* 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 de REST
Api JavaScript para WebSocket
Instalação
● Usamos o Maven (arquivo pom.xml)
Substitua: ${opendevice-version} pela ultima versão, atualmente: 0.1.2-SNAPSHOT.
Qualquer dúvida consulte:https://opendevice.atlassian.net/wiki/display/DOC/A.+First+Steps+with+OpenDevice
Instalação
● Adicionar o repositório da Sonatype
Instalação (lib arduino/similar)
● Baixar ou Clonar o repositório do GIT– opendevice-hardware-libraries
● Copiar a pasta: arduino/OpenDevice– Para pasta /libraries da IDE do Arduino
● Reinicie a IDE do Arduino
Github / Sources: https://github.com/OpenDevice
HORÁRIO RESERVADOÀ PROGRAMAÇÃO E MÃO NA MASSA
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
Dúvidas ?
Link's
● OpenDevice: – http://opendevice.io– https://github.com/OpenDevice– https://opendevice.atlassian.net/wiki– http://opendevice.criativasof.com.br
● Facebook– /opendevice
Link's● Onde Comprar ? (Gringos):
– www.adafruit.com– www.sparkfun.com– www.seeedstudio.com– imall.iteadstudio.com– www.dx.com (mercado livre – demora....)
● Brasil– Lab de Garagem (http://www.labdegaragem.org– Multilógica Shop (http://multilogica-shop.com/);– Rlrobotics (http://www.rlrobotics.ind.br/arduino);– Webtronico (http://www.webtronico.com/)
Top Related