Daniel Rosendo

Propaganda
UNIVERSIDADE DE PERNAMBUCO
FACULDADE DE CIÊNCIAS E TECNOLOGIA DE CARUARU
BACHARELADO EM SISTEMAS DE INFORMAÇÃO
DANIEL ROSENDO
INTEGRANDO FUNCIONALIDADES DO ARDUINO À INTERNET ATRAVÉS DE
RECURSOS WEB
CARUARU
2014
DANIEL ROSENDO
INTEGRANDO FUNCIONALIDADES DO ARDUINO À INTERNET ATRAVÉS DE
RECURSOS WEB
Monografia apresentada ao Curso de Sistemas de
Informação, Faculdade de Ciências e Tecnologia
de Caruaru da Universidade de Pernambuco, como
requisição parcial à obtenção do título de Bacharel.
Orientadora: Profª. Msc. Patricia Takako Endo
CARUARU
2014
Dedico este trabalho aos meus pais e irmãos.
AGRADECIMENTOS
Agradeço primeiramente a DEUS por proporcionar mais uma conquista na minha vida.
Por ter me abençoado a cada dia, por ter me dado saúde, sabedoria, força e paciência durante
esta longa jornada que durou quatro anos e meio.
Agradeço à minha família, meu pai (Djalma Rosendo) e minha mãe (Luzineide
Rosendo) por terem me educado e estarem sempre ao meu lado, cuidando e incentivando.
Agradeço ainda à minha mãe pelas comidas deliciosas que só ela sabe fazer e que me deram
energia para a realização deste trabalho. Agradeço aos meus irmãos (Diomedes e Diogo
Rosendo) pelo apoio.
Agradeço à minha grande orientadora Profª. Patricia Takako Endo, pela confiança
depositada e pela disponibilização, atenção, competência, paciência e mensagens
motivacionais.
Agradeço aos meus primos e amigos que me acompanharam nesta jornada e que
contribuíram indiretamente com este trabalho.
Por fim, agradeço à todos os professores do curso de Sistemas de Informação da UPE
Caruaru, que tiveram um importante papel em minha formação acadêmica proporcionando
grande parte do conhecimento necessário para realização deste trabalho.
RESUMO
Nos últimos anos tem-se aumentado a quantidade de objetos inteligentes conectados à
Internet. A tendência é que esta quantidade cresça consideravelmente nos anos seguintes. Isto
se deve ao surgimento e popularização de dispositivos, tais como smartphones, tablets, sensores
sem fio, entre outros. A Web das Coisas utiliza protocolos e padrões da Web que permitem a
integração de objetos físicos na Web, a fim de obter-se uma representação dos mesmos como
recursos na Web. Desta forma, torna-se possível acessar e controlar remotamente estes objetos,
como também, armazenar, gerenciar e exibir os dados gerados em tempo real por eles. Neste
trabalho será desenvolvido uma lâmpada inteligente construída com hardware Arduino, como
também, uma aplicação Web baseado na Web das Coisas para disponibilização na Web da
lâmpada inteligente possibilitando o acesso às funcionalidades da mesma.
Palavras-chave: Internet das Coisas. Web das Coisas. Objetos Inteligentes. API Web. Arduino.
ABSTRACT
In the last years have increased the amount of smart objects connected to the Internet.
The trend is that this number will grow considerably in the following years. This is due to the
emergence and popularization of devices, such as smartphones, tablets, wireless sensors, among
others. The Web of Things uses Web standards and protocols that allow the integration of
physical objects on the Web, in order to obtain a representation of them as Web resources.
Therefore, it becomes possible to remotely access and control these objects, as well, store,
manage and display real-time data generated by them. In this work will be developed a smart
bulb built with Arduino hardware, as well, a Web application based on the Web of Things to
provide access to the smart bulb´s functionalities on the Web.
Keywords: Internet of Things. Web of Things. Smart Objects. Web API. Arduino.
LISTA DE FIGURAS
Figura 1 - A Internet de Todas as Coisas reúne Pessoas, Coisas, Dados e Processos. Fonte:
CISCO. ..................................................................................................................................... 13
Figura 2 - Tipos de conexões da IoE: M2M, P2M e P2P. Fonte: CISCO. .............................. 14
Figura 3 - A Internet das Coisas surgiu entre os anos de 2008 e 2009. Fonte: Cisco IBSG, 2011.
.................................................................................................................................................. 16
Figura 4 - Página Web da representação do objeto físico na Web. Fonte: Compilado pelo autor.
.................................................................................................................................................. 24
Figura 5 - Requisição HTTP GET para obtenção da representação do objeto. Fonte: Criado
pelo autor. ................................................................................................................................. 24
Figura 6 - Tabela de rotas da aplicação para o recurso objetos. Fonte: Elaborado pelo autor.25
Figura 7 - Classe ObjetosController e métodos especificados no arquivo de configuração de
rotas da aplicação. Fonte: Elaborado pelo autor. ...................................................................... 26
Figura 8 - Requisição HTTP POST que envia os dados do sensor dht11 do Arduino. Fonte:
Criado pelo autor. ..................................................................................................................... 27
Figura 9 - Requisição HTTP PUT enviada ao Arduino para alterar o estado da lâmpada. Fonte:
Criado pelo autor. ..................................................................................................................... 27
Figura 10 - Diagrama de classes do pacote controllers da aplicação Web. Fonte: Elaborado
pelo autor. ................................................................................................................................. 30
Figura 11 - Diagrama de classes do pacote models da aplicação Web. Fonte: Elaborado pelo
autor. ......................................................................................................................................... 31
Figura 12 - Principais classes executadas no Arduino Mega 2560. Fonte: Elaborado pelo autor.
.................................................................................................................................................. 32
Figura 13 - Hardware que compõe o protótipo. Fonte: Compilado pelo autor. ...................... 34
Figura 14 - Pinos digitais e analógicos Arduino Mega 2560 R3 (imagem feita com Fritzing).
.................................................................................................................................................. 34
Figura 15 - Conectores de alimentação do Arduino Mega 2560 R3 (imagem feita com Fritzing).
.................................................................................................................................................. 35
Figura 16 - Arduino Ethernet Shield R3 (imagem feita com Fritzing). .................................. 37
Figura 17 - Pinos de comunicação do Arduino Mega 2560 com o chip W5100 e micro SD
(imagem feita com Fritzing). .................................................................................................... 37
Figura 18 - Breadboard (imagem feita com Fritzing). ........................................................... 38
Figura 19 - Sensor Shield Versão 4, adaptado de (SEEED, 2014). ......................................... 39
Figura 20 - Módulo de reconhecimento de voz V2, adaptado de (SHEN, 2014).................... 40
Figura 21 - Módulo conversor USB-TTL. Fonte: Compilado pelo autor. .............................. 41
Figura 22 - Sensor de temperatura e umidade DHT11, adaptado de (D-ROBOTICS, 2014). 42
Figura 23 - Módulo Real-Time Clock DS1302, adaptado de (MAXIM, 2014). ..................... 43
Figura 24 - Display LED de 7 segmentos e 4 dígitos com seus respectivos pinos. Fonte:
Compilado pelo autor. .............................................................................................................. 44
Figura 25 - Módulo relé isolado 5 volts. Fonte: Compilado pelo autor. ................................. 45
Figura 26 - Cabo USB A-B. Fonte: Compilado pelo autor. .................................................... 45
Figura 27 - Cabo de rede Ethernet categoria 5e. Fonte: Compilado pelo autor. ..................... 46
Figura 28 - Cabos fêmea-fêmea e cabos macho-fêmea. Fonte: Compilado pelo autor. .......... 46
Figura 29 - Consumo das diferentes memórias do Arduino Mega 2560. Fonte: Arduino Builder.
.................................................................................................................................................. 48
Figura 30 - Consumo de memória para desempenhar cada funcionalidade da lâmpada
inteligente. Fonte: Compilado pelo autor. ................................................................................ 49
Figura 31 - Tempo para executar cada funcionalidade da lâmpada inteligente. Fonte:
Compilado pelo autor. .............................................................................................................. 50
LISTA DE ABREVIATURAS E SIGLAS
API
ARP
EEPROM
HATEOAS
HTTP
I2C
ICMP
IDE
IGMP
IoT
IP
IPv4
IPv6
MEMS
MISO
MOSI
NTC
OTP
PPPoE
PROM
PWM
REST
RFID
RH
ROA
RTC
RX
SCK, SCL, SCLK
SDA
SOAP
SPI
SRAM
SS
TCP
TTL
TWI
TX
UART
UDDI
UDP
URI
USB
WoT
WSDL
Application Programming Interface
Address Resolution Protocol
Electrically-Erasable Programmable Read-Only Memory
Hypermedia as Engine Of Application State
Hipertext Transfer Protocol
Inter-Integrated Circuit
Internet Control Message Protocol
Integrated Development Environment
Internet Group Management Protocol
Internet of Things
Internet Protocol
Internet Protocol version 4
Internet Protocol version 6
Microelectromechanical Systems
Master Input, Slave Output
Master Output, Slave Input
Negative Temperature Coefficient
One Time Programmable
Point-to-Point Protocol over Ethernet
Programmable Read-Only Memory
Pulse Width Modulation
Representational State Transfer
Radio Frequency Identification
Relative Humidity
Resource-Oriented Architecture
Real-Time Clock
Receive
Serial Clock
Serial Data
Simple Object Access Protocol
Serial Peripheral Interface
Static Random Access Memory
Slave Chip Select
Transmission Control Protocol
Transistor-Transistor Logic
Two Wire Interface
Transmit
Universal Asynchronous Receiver Transmitter
Universal Description, Discovery and Integration
User Datagram Protocol
Uniform Resource Identifier
Universal Serial Bus
Web of Things
Web Services Description Languages
SUMÁRIO
1 INTRODUÇÃO ................................................................................................................... 10
1.1 Problema ............................................................................................................................. 10
1.2 Objetivos............................................................................................................................. 11
1.2.1 Geral ................................................................................................................................ 11
1.2.2 Específicos ....................................................................................................................... 11
1.3 Justificativa ......................................................................................................................... 11
1.4 Organização do trabalho ..................................................................................................... 12
2 FUNDAMENTAÇÃO TEÓRICA ...................................................................................... 13
2.1 Internet de Todas as Coisas ................................................................................................ 13
2.2 Internet das Coisas .............................................................................................................. 15
2.3 Web das Coisas................................................................................................................... 17
2.4 REST .................................................................................................................................. 19
2.4.1 Princípios REST .............................................................................................................. 19
2.5 Plataforma Arduino ............................................................................................................ 21
3 INTEGRANDO FUNCIONALIDADES DO ARDUINO À WEB .................................. 23
3.1 Aplicando os princípios REST para expor funcionalidades do Arduino na Web .............. 23
3.2 Arquitetura de software ...................................................................................................... 27
3.2.1 Aplicação Web para a Web das Coisas ........................................................................... 28
3.2.1.1 Framework Rails .......................................................................................................... 28
3.2.1.2 Servidor Web WEBrick ................................................................................................ 29
3.2.1.3 Banco de dados SQLite ................................................................................................ 29
3.2.1.4 Diagrama de classes...................................................................................................... 29
3.2.2 Lâmpada inteligente construída com hardware Arduino ................................................ 31
3.2.2.1 IDE Arduino 1.0.5-r2 ................................................................................................... 31
3.2.2.2 AccessPort 1.37 ............................................................................................................ 32
3.2.2.3 Diagrama de classes...................................................................................................... 32
3.3 Arquitetura de hardware .................................................................................................... 33
3.3.1 O protótipo....................................................................................................................... 33
3.3.2 Arduino Mega 2560 R3 ................................................................................................... 34
3.3.3 Ethernet Shield R3 ........................................................................................................... 36
3.3.4 Sensor shield versão 4 ..................................................................................................... 38
3.3.5 Módulo de reconhecimento de voz V2 ............................................................................ 39
3.3.6 Módulo conversor USB-TTL .......................................................................................... 41
3.3.7 Sensor de temperatura e umidade DHT11 ....................................................................... 41
3.3.8 Módulo RTC DS1302...................................................................................................... 42
3.3.9 Display LED de 7 segmentos e 4 dígitos ......................................................................... 43
3.3.10 Módulo relé DC/AC 220 volts....................................................................................... 44
3.3.11 Cabos ............................................................................................................................. 45
4 AVALIAÇÃO DE DESEMPENHO DAS FUNCIONALIDADES DO ARDUINO EM
TEMPO DE EXECUÇÃO ..................................................................................................... 47
4.1 Consumo de memória ......................................................................................................... 47
4.2 Tempo para executar funcionalidade .................................................................................. 49
5 CONCLUSÕES.................................................................................................................... 51
5.1 Trabalhos futuros ................................................................................................................ 52
REFERÊNCIAS BIBLIOGRÁFICAS ................................................................................. 53
10
1 INTRODUÇÃO
O conceito de Internet das Coisas (do inglês, Internet of Things - IoT) surgiu em 1999
no Massachusetts Institute of Technology, onde a ideia é conectar qualquer objeto do dia a dia
com a Internet. Desta forma, surgiria uma rede mundial de objetos heterogêneos e endereçáveis
interligados e se comunicando através de protocolos de comunicação padronizáveis. Portanto,
segundo a IoT, cada objeto torna-se endereçável e controlável (KARIMI, 2013).
Esses objetos, geralmente dispositivos embarcados, tais como eletrodomésticos,
sensores sem fio e máquinas podem estar conectados à Internet. Exemplos desses dispositivos
são: Sun SPOTs (Sun 2011), Nabaztag (Nabaztag 2011), Poken (Poken 2011), Arduino
(Arduino 2005), etc. Neste trabalho será utilizado o Arduino, uma plataforma de prototipagem
eletrônica de hardware livre que possibilita criar ferramentas que são acessíveis, de baixo custo,
flexíveis e fáceis de usar.
Uma vez estes objetos conectados à Internet, o próximo objetivo da Internet das Coisas
refere-se a capacidade de comunicação e controle de forma remota desses objetos fazendo com
que os mesmos realizem ações sem a intervenção humana. Portanto, o próximo passo da
Internet das Coisas é a Web das Coisas (GUINARD et al. 2010).
A Web das Coisas (do inglês, Web of Things - WoT) é um paradigma de
desenvolvimento de aplicações inspirado na Internet das Coisas, baseado no uso de protocolos
e padrões já em uso na Web, como por exemplo HTTP (Hypertext Transfer Protocol) e URIs
(Uniform Resource Identifier). Seu objetivo é proporcionar a conexão de diversos objetos
inteligentes à Web, tornando-os parte da Web, de forma que possam ser acessados da mesma
forma que qualquer outro recurso disponível na mesma (GUINARD et al. 2010).
Para que esta conexão seja possível, a Web das Coisas faz uso dos princípios REST
(Representational State Transfer), proposto por Roy Fielding em 2000, juntamente com ROA
(Resource Oriented Architecture), uma a arquitetura orientada a recursos, proposta por
Richardson e Ruby em 2007. Objetivo da ROA é evitar erros ao aplicar os princípios REST no
desenvolvimento de sistemas, já que este não trata-se de uma arquitetura. Sendo assim, ROA
especifica como utilizar os princípios REST juntamente com os padrões Web HTTP e URI
(FRANÇA, 2011).
1.1 Problema
Objetos inteligentes ou smart objects são objetos que possuem processadores embutidos
(por exemplo: microcontrolador) juntamente com interfaces de usuário que permitem controlar
suas funcionalidades (KARIMI, 2013). Uma vez que, tem-se objetos inteligentes, o próximo
11
passo é permitir uma conexão remota à esses objetos a fim de poder controlá-los, facilitando a
vida das pessoas. Como por exemplo, apagar a lâmpada da casa ou checar o fechamento da
porta ao sair, tudo através do computador, tablet ou smartphone (KARIMI, 2013).
Segundo estimativa realizada pela Cisco IBSG (Internet Business Solutions Group) foi
previsto que em 2015 terão 7.2 bilhões de pessoas vivendo no planeta e 25 bilhões de
dispositivos (smart objects) conectados à Internet. E em 2020 terão 7.6 bilhões de pessoas e 50
bilhões de dispositivos conectados. Desta forma, haverá mais dispositivos conectados que
pessoas no planeta, tendo em 2015 3.47 e em 2020 6.58 dispositivos conectados por pessoa
(EVANS, 2011).
Sendo assim, com bilhões de objetos inteligentes controláveis e conectados à Internet,
pode-se agora disponibilizá-los na Web. Permitindo assim, o gerenciamento e armazenamento
de informações em tempo real, como também interagir com os objetos e suas informações.
Desta forma, é de grande importância saber quais arquiteturas, protocolos e padrões
amplamente aceitos e já em uso na Web deve ser utilizado.
1.2 Objetivos
1.2.1 Geral
Desenvolver uma aplicação Web para a disponibilização das funcionalidades de
dispositivo Arduino na forma de recursos Web.
1.2.2 Específicos

Identificar protocolos e padrões já em uso na Web tradicional;

Apontar os princípios REST na criação de APIs RESTfull;

Analisar a arquitetura orientada a recursos – ROA;

Analisar o desempenho dos componentes da plataforma Arduino;
1.3 Justificativa
Atualmente já se pode encontrar milhares de objetos do dia a dia conectados na Internet.
Com o barateamento de hardware e software, a tendência é que essa quantidade cresça
exponencialmente, de forma que tais objetos estarão cada vez mais presentes em residências,
centros de saúde, instituições de ensino, governo, companhias de energia, etc. (BRADLEY et
al. 2013b).
12
Desta forma, é de extrema importância saber fazer com que tais dispositivos trabalhem
colaborativamente, através da troca de informações entre si, como também, tirar proveito desses
dispositivos inteligentes tornando-os acessíveis na Web.
Do ponto de vista teórico, este trabalho servirá como fonte de pesquisa para os demais
trabalhos nesta área, como também, auxiliará no entendimento de quais ferramentas,
arquiteturas e tecnologias podem ser utilizadas no ambiente da Web das Coisas.
Quanto ao ponto de vista prático, contribuirá para a concretização do paradigma da Web
das Coisas, fazendo com que as funcionalidades do dispositivo Arduino estejam disponíveis e
acessíveis na Web.
1.4 Organização do trabalho
Este trabalho está organizado em 5 capítulos. O Capítulo 2 apresenta os conceitos
relacionados a Internet de Todas as Coisas, Internet das Coisas, Web das Coisas, REST e seus
princípios e a plataforma Arduino. O Capítulo 3 apresenta o emprego dos princípios REST na
abordagem ROA para integração do objeto inteligente na aplicação Web desenvolvidos neste
trabalho. Ademais, apresenta-se a arquitetura de hardware e software dos mesmos. No Capítulo
4 apresenta-se os resultados obtidos da avaliação de desempenho do Arduino em tempo de
execução, referentes ao consumo de memória e tempo necessário para executar cada uma das
funcionalidades do objeto inteligente. Por fim, no Capítulo 5 apresentam-se as conclusões e
sugestões de trabalhos futuros que possam aprimorar e expandir as funcionalidades da aplicação
Web e do objeto inteligente.
13
2 FUNDAMENTAÇÃO TEÓRICA
2.1 Internet de Todas as Coisas
A Internet de Todas as Coisas (do inglês, Internet of Everything - IoE) consiste na
conexão em rede de pessoas, coisas, dados e processos, a fim de criar conexões de rede mais
relevantes e de grande valor. Cada um destes componentes possuem um papel específico e
trabalham juntos, como mostrado na Figura 1 (MITCHELL et al. 2013).
Figura 1 - A Internet de Todas as Coisas reúne Pessoas, Coisas, Dados e Processos. Fonte: CISCO.
A Internet de Todas as Coisas conectará as pessoas de forma eficaz, fazendo com que
cada um, passe a ser um nó passivo ou ativo dentro da Internet. As pessoas serão capazes de
conectar-se à Internet de várias formas. Atualmente, a maioria delas conectam-se através de
dispositivos (tablets, smartphones, computador, televisores) e das redes sociais (Facebook,
Twitter, LinkedIn) (MITCHELL et al. 2013).
Mas na Internet de Todas as Coisas, as pessoas se conectarão de forma mais relevante,
como por exemplo: as pessoas tomarão uma pílula que terá a capacidade de medir algumas
características do trato digestivo e enviar esta informação por Internet ao médico. Outro
exemplo, seria o uso de sensores localizados na pele ou na roupa das pessoas, a fim de fornecer
informações dos sinais vitais e enviar à um médico (MITCHELL et al. 2013).
Na IoE, os dados serão transformados em informação útil no momento adequado para
a rápida tomada de decisões inteligentes, como também, controlar o ambiente de forma mais
eficiente. Estes dados, serão proporcionados através dos milhares de sensores (MITCHELL et
al. 2013).
14
As coisas ou Internet das Coisas é uma das transições de tecnologia que proporcionam
a Internet de Todas as Coisas. A IoT consiste em objetos físicos (sensores e dispositivos)
conectados tanto à Internet, quanto entre os mesmos, formando uma rede mundial de objetos
conectados. A Internet das Coisas será abordada com mais detalhes na Seção 2.2 (MITCHELL
et al. 2013).
Os processos, referem-se como pessoas, coisas e dados, trabalham em conjunto para
oferecer valor no mundo conectado da Internet de Todas as Coisas. Os processos,
proporcionarão a informação correta à pessoas ou máquinas conectadas no momento adequado.
Fazendo com que a informação chegue à quem necessita, no momento em que precisa, e que
contenha a informação necessária (MITCHELL et al. 2013).
De acordo com pesquisa feita pela CISCO, a Internet de Todas as Coisas terá o potencial
de gerar cerca de 14.4 trilhões de dólares durante os anos de 2013 a 2020. Todo este valor,
refere-se apenas as organizações do setor privado do mundo todo (BRADLEY et al. 2013a).
Como pode ser visto na Figura 2, a IoE inclui três tipos de conexões: machine-tomachine (M2M), person-to-machine (P2M) e person-to-person (P2P). As conexões P2M e P2P
representarão 55% dos 14.4 trilhões de dólares, enquanto as conexões M2M representarão 45%
(BRADLEY et al. 2013a).
Figura 2 - Tipos de conexões da IoE: M2M, P2M e P2P. Fonte: CISCO.
Os 14.4 trilhões de dólares, explica-se por duas razões: a primeira, será resultado da
economia dos custos, já que serão mais produtivos e manusearão melhor a informação. O
segundo, refere-se a geração de novos negócios, como por exemplo: edifícios inteligentes,
medicina conectada, merketing conectado, rede elétrica inteligente, entre outros (BRADLEY et
al. 2013a).
15
Portanto, percebe-se o grande potencial e efeito tanto do âmbito econômico como social,
que poderá ser proporcionado pela Internet de Todas as Coisas ao conectar tudo aquilo que
ainda não está conectado, ou seja, ao conectar pessoas, coisas, dados e processos. Visando
sobretudo benefícios para a humanidade, tornando a vida mais fácil e segura, como também
reduzindo os impactos no meio ambiente.
2.2 Internet das Coisas
O termo “Internet das Coisas” foi criado por Kevin Ashton, co-fundador do Centro de
Auto-ID do MIT (Massachusetts Institute of Technology) no ano de 1999, enquanto trabalhava
em um projeto no campo de RFID (Radio Frequency Identification) e tecnologias de sensores
emergentes. Com o passar dos anos, com a ideia de objetos do cotidiano possuírem sensores
embutidos e chips, que permitiriam a comunicação entre esses objetos e com o ambiente, deram
origem a outros termos, tais como: “computação ubíqua” e “computação pervasiva”
(WITCHALLS, 2013).
A Internet das Coisas consiste numa rede de objetos inteligentes (objetos que possuem
processamento embutido, tipicamente: microcontrolador ou MCU) conectados à Internet que
interagem e comunicam-se com outros objetos, máquinas e ambiente, resultando na geração e
processamento de grande volume de dados (EVANS, 2011).
De acordo com a Cisco IBSG, a Internet das Coisas surgiu entre os anos de 2008 e 2009,
período em que, o número de coisas e objetos conectados à Internet ultrapassou o número de
pessoas no mundo. A pesquisa estima que em 2015 terão 25 bilhões de dispositivos conectados
à Internet. Já para 2020, a estimativa é de 50 bilhões, como pode ser visto na Figura 3 (EVANS,
2011).
Alguns fatores tem contribuído para o surgimento e adoção da Internet das Coisas.
Como por exemplo, nos próximos anos, as atividades de IoT será impulsionado pelo
barateamento de sensores (tags RFID, e MEMS - microelectromechanical systems, tais como:
acelerômetros, giroscópios, sensores de pressão, etc.), protocolo IPv6, computação em nuvem
(armazenamento e análise dos dados; hospedagem e desenvolvimento de aplicações que
manipulam as funcionalidades dos sensores), análise de dados avançadas (Big Data) e
mobilidade (dispositivos smartphones e tablets) (WITCHALLS, 2013).
16
Figura 3 - A Internet das Coisas surgiu entre os anos de 2008 e 2009. Fonte: Cisco IBSG, 2011.
Segundo estimativas da Cisco 99,4% dos objetos físicos presentes na terra ainda não
estão conectados. Tendo apenas 10 bilhões de objetos conectados, de um total de 1.5 trilhões
(BRADLEY et al. 2013a).
Sabe-se que tudo que está conectado à Internet deve possuir um endereço IP, portanto,
deve-se ter uma quantidade suficiente de endereços IP para a conexão de todas essas coisas
(pessoas, coisas, dados e processos) à Internet. Como dito anteriormente, a estimativa é que em
2020 haja 50 bilhões de objetos físicos conectados, sendo assim, o número de endereços do
IPv4 não será suficiente, já que fornece apenas 4.294.967.295 ou aproximadamente 4.3 bilhões
de endereços IP (BRADLEY et al. 2013a).
Mas, isto não será um problema, uma vez que, o IPv6 possui um espaço de
endereçamento
de
128
bits,
sendo
possível
obter
340.282.366.920.938.463.463.374.607.431.768.211.456 ou 340.3 undecilhão de endereços IP.
Uma quantidade suficientemente grande para endereçar os estimados 1.5 trilhões de
dispositivos existentes no mundo inteiro, como também conectar pessoas, processos e dados à
Internet (BRADLEY et al. 2013a).
Uma vez que, a Internet das Coisas tenha alcançado o objetivo de formar uma rede de
bilhões de objetos inteligentes interconectados, interagindo e gerando dados. O último objetivo
das aplicações da IoT refere-se à capacidade de comunicação e controle manual de forma
remota a esses objetos, com o intuito de automatizá-los. Onde, baseando-se em configurações
feitas pelo usuário e processamentos baseado em nuvem, façam com que tais objetos realizem
17
ações sem a intervenção humana. Com o propósito de facilitar a vida das pessoas (KARIMI,
2013).
Desta forma, o próximo passo da Internet das Coisas é a Web das Coisas que consiste
em disponibilizar objetos inteligentes na Web. Ou seja, fazer com que tais objetos forme parte
da Web, de forma que possam ser acessados da mesma forma que qualquer outro recurso
existente na mesma (EVRYTHNG, 2012).
Na Seção 2.3 a Web das Coisas será abordada com mais detalhes, apresentando suas
características, as tecnologias que estão sendo utilizadas para tornar objetos inteligentes em
recursos Web, e algumas das aplicações em nuvem já existentes para a WoT.
2.3 Web das Coisas
A medida que tem-se cada vez mais objetos físicos inteligentes conectados à Internet, e
sabendo que tais objetos podem ser controlados remotamente e que estão continuamente
gerando dados. É de suma importância utilizar tecnologias que permitirão desenvolver
aplicações de forma rápida e flexível para acessar estes objetos, como também, armazenar e
gerenciar seus dados (GUINARD et al. 2010).
Para isto, tais tecnologias devem respeitar certos requisitos, devendo ser: leve (objetos
inteligentes são dispositivos com restrição de recursos, como memória, processamento e
energia), fracamente acoplado (falhas em nós da rede não deve impactar no funcionamento
do sistema), escalável (bilhões de objetos se comunicando uns com os outros e enviando
milhões de mensagens por segundo), flexível (suporte para um conjunto de padrões para troca
de dados) e padrão (garantir a alavancagem máxima das ferramentas, serviços e melhores
práticas construídas pela comunidade) (EVRYTHNG, 2012).
Sendo assim, a WoT propõe que protocolos e padrões da Web (HTTP, TCP, IPv6, XML,
JSON, RSS, ATOM, REST, WS-*, URI) sejam utilizados como linguagem comum para a
integração de objetos inteligentes à Web (GUINARD et al. 2010).
Tais protocolos, já em uso, com grande aceitação, e que fazem da Web um sucesso,
podem também ser utilizados para o desenvolvimento de aplicações, a fim de servir como
plataforma para objetos inteligentes e torná-los em recursos Web (EVRYTHNG, 2012).
Os padrões Enterprise Web Services (conhecidos como WS-*, como por exemplo:
UDDI, WSDL, SOAP, etc.), tem por objetivo facilitar o design e implementação de aplicações
distribuídas interoperáveis (EVRYTHNG, 2012).
Tais tecnologias, adicionam uma camada de software nas aplicações, resultando em
maior complexidade. Tornando-se desta forma uma barreira para o ambiente da Internet das
18
Coisas, uma vez que, tais padrões tornam-se “pesados” e complexos, já que trata-se de objetos
simples e com recursos limitados (GUINARD et al. 2010).
Ao invés de usar tecnologias WS-*, estudos envolvendo projetos relacionados à Web
das Coisas, tem explorado a implementação de servidores HTTP em dispositivos embarcados.
Como resultado, obteve-se baixo consumo dos recursos dos dispositivos inteligentes. Este
resultado, foi possível devido a eficiente otimização proporcionadas pelos protocolos HTTP e
TCP, das camadas de aplicação e transporte respectivamente (GUINARD et al. 2010).
Além do protocolo HTTP, o estilo arquitetural REST está sendo aplicado em objetos
inteligentes. Seu uso é devido às suas propriedades, pois este, respeita os requisitos citados
anteriormente necessários para tornar possível a integração dos objetos na Web (GUINARD et
al. 2010).
O estilo arquitetural REST possui as seguintes propriedades: permite criar serviços
fracamente acoplados na Web; é implementado com HTTP e URI (identifica recursos na Web),
e pelos tipos de mídia padronizados, tais como: HTML e XML; fornece uma interface uniforme,
através dos métodos HTTP (GET, POST, PUT e DELETE); e permite que clientes selecionem
a melhor opção para interação, sendo geralmente XML e JSON. Na Seção 2.4 a arquitetura
REST será abordada com maior detalhes (FIELDING, 2000).
Tais características faz do REST a opção ideal para a construção de aplicações Web
para objetos inteligentes, permitindo uma perfeita integração dos mesmos à Web, como
também, expor suas características e se comunicar com serviços externos ou centralizados
(GUINARD et al. 2010).
Desta forma, devido à simplicidade, fraco acoplamento e escalabilidade do estilo
arquitetural REST, como também da larga aceitação e disponibilidade de clientes e bibliotecas
HTTP, a arquitetura REST torna-se uma plataforma de integração ubíqua e leve (GUINARD et
al. 2010).
Atualmente, já encontram-se disponíveis algumas plataformas para a Web das Coisas,
entre as mais populares tem-se: Xively, Nimbits, Evrythng, Thingspeak, Etherios, Sen.se,
Exosite e SensorCloud. Tais plataformas, foram desenvolvidas baseando-se no estilo
arquitetural REST, proporcionando fácil integração de objetos físicos à Web, permitindo a
obtenção de uma representação deste objeto na Web, conhecida como Web Object.
Estas plataformas, fornecem uma representação amigável destes objetos, tornando
possível interagir com os mesmos através de navegadores Web, como também, visualizar
através de páginas Web os dados gerados em tempo real pelos mesmos.
19
As plataformas citadas anteriormente, permitem a conexão de diferentes tipos de
dispositivos eletrônicos que tenha suporte TCP/IP, como por exemplo: Arduino, Raspberry Pi,
Sun SPOTs, ARM mbed, entre outros. A interação entre plataforma e objeto, independe da
forma de como objetos físicos estão conectados à Internet, que pode ser via HTTP sobre TCP/IP
ou gateways para dispositivos conectados por protocolos como Zigbee e Bluetooth, por
exemplo. Estas plataformas também podem ser acessadas por linguagens de programação que
possuam bibliotecas HTTP cliente, como: C, Ruby, Java, Python, e outros (GUINARD et al.
2010).
2.4 REST
O termo REST (do inglês, Representational State Transfer) foi definido por Roy
Thomas Fielding em sua tese de doutorado. Roy também contribuiu com a especificação do
protocolo HTTP e com o esquema de nomes global URI, e é um dos fundadores do projeto
Servidor Apache HTTP (TILKOV, 2007).
REST não trata-se de uma arquitetura, e é um estilo híbrido derivado de vários estilos
de arquiteturas baseados na rede (FIELDING, 2000). Desta forma, a utilização de seus
princípios podem ser empregados de forma incorreta no desenvolvimento de sistemas. Um
exemplo disto, seria o caso de aplicações que resultaram em um híbrido de REST com RPC ao
adotarem os princípios REST, o que não é desejável (FRANÇA, 2011).
Desta forma, a Arquitetura Orientada a Recursos (ROA) proposta por Richardson e
Ruby, em 2007, define um conjunto de conceitos e propriedades que especificam como
empregar os princípios REST juntamente com os amplamente aceitos e já em uso protocolos e
padrões da Web, tais como HTTP e URI (FRANÇA, 2011).
REST nos conceitos ROA, consiste em um conjunto de princípios que define como os
padrões da Web, tais como HTTP e URI devem ser utilizados, e como tais princípios, podem
ser aplicados no desenvolvimento de sistemas com uma arquitetura orientada a recursos, ROA.
Sendo assim, aplicações que adotem os princípios REST em seu projeto, estarão beneficiandose da arquitetura Web (protocolos e padrões), e terão como resultado sistemas denominados
RESTful (TILKOV, 2007).
2.4.1 Princípios REST
Os princípios REST apresentados a seguir, baseiam-se nos conceitos especificados pela
Arquitetura Orientada a Recursos (ROA).
20
Identificação única e global para os recursos: um recurso é qualquer componente de
uma aplicação que seja importante o suficiente para ser identificado unicamente. Esta
identificação global na Web é realizada através de URIs (FIELDING, 2000).
A grande vantagem de utilizar URIs na identificação dos componentes da aplicação, é
que estará sendo utilizado um esquema de nomes amplamente aceito na Web, não havendo a
necessidade de apresentar um novo esquema. Para maiores informações sobre URI, consultar a
RFC 3986 (TILKOV, 2007).
Interface uniforme de acesso aos recursos: em REST, a interação e recuperação da
representação de um recurso ocorre através de uma interface uniforme. Na Web, esta interface
uniforme é definida pelos quatro principais métodos do protocolo HTTP (GET, POST, PUT e
DELETE), e baseia-se em URIs, sendo a URI, o alvo da mensagem de requisição (FIELDING,
2000).
Estes quatro métodos, podem estão referir-se ao CRUD (Create, Read, Update, Delete)
da aplicação, onde o GET é utilizado para obtenção da representação de um recurso. PUT para
atualizar um recurso existente. POST utiliza-se para criação de um novo recurso. E por fim, o
DELETE, utilizado para excluir um recurso. Ambos os métodos PUT e POST podem ser
utilizados para criar e atualizar um recurso, mas geralmente utiliza-se PUT para atualizar e
POST para criar o recurso, como explicado anteriormente (GUINARD et al. 2010).
Caso o método PUT seja utilizado para criar o recurso, deve-se fornecer o identificador
do mesmo (maiores informações da especificação destes métodos HTTP podem ser obtidas na
RFC 2616) (GUINARD et al. 2010).
Desta forma, através de uma interface uniforme, ao receber uma requisição HTTP e uma
URI, o servidor sabe o que fazer apenas observando o método da requisição (FRANÇA, 2011).
Endereçabilidade dos recursos: refere-se ao conceito de hipermídia, abordagem
HATEOAS (Hypermedia as Engine Of Application State), onde links são utilizados para a
vinculação de recursos que formam a Web, permitindo que certo recurso aponte para recursos
externos (de diferentes aplicações ou servidores). Isto torna-se possível devido a utilização do
esquema de nomes padrão de uso global URI. Outro aspecto importante, refere-se ao uso de
links, para tornar as aplicações mais dinâmicas, ou seja, o servidor fornece um conjunto de links
ao cliente, permitindo que o mesmo utilize-os para mudança de estado da aplicação (TILKOV,
2007).
Suporte a múltiplas e independentes representações para o recurso: recursos não
estão vinculadas a nenhum tipo particular de representação. Sendo assim, um único recurso
21
pode ser representado por vários formatos, podendo ser: JSON, XML, HTML, CSV, etc., sendo
os dois primeiros os mais populares (GUINARD et al. 2010).
Quando uma requisição HTTP para o servidor é mapeada por múltiplas representações
(definidas através do cabeçalho Accept do HTTP), servidor e cliente negociam, entre os
formatos representativos disponíveis para o recurso, aquele que melhor se adequa às
necessidades do cliente (GUINARD et al. 2010).
Interação sem manutenção de estado: nas aplicações REST o servidor não tem que
manter nenhum tipo de estado das comunicações com os clientes ao qual se comunica
(TILKOV, 2007). Isto significa que, cada requisição HTTP feita por um cliente ao servidor,
deve conter toda a informação necessária para que o mesmo entenda a requisição. Desta forma,
informações sobre determinado recurso deve ser mantida no lado do cliente (FIELDING, 2000).
O maior benefício deste princípio refere-se à escalabilidade, já que, o desempenho do
servidor poderia ser afetado dependendo da quantidade de clientes que interage, uma vez que,
estivesse que manter estado dos clientes entre as requisições (FIELDING, 2000).
Outro benefício, seria que o cliente não seria afetado em caso de mudanças de servidor
(falhas de hardware), ou seja, requisições consecutivas feitas por um cliente, não tem que
necessariamente serem destinadas ao mesmo servidor (TILKOV, 2007).
2.5 Plataforma Arduino
Arduino é uma plataforma de prototipagem eletrônica open-source, fundada por
Massimo Banzi, David Cuartielles, Tom Igoe, Gianluca Martino, e David Mellis. Flexível e de
fácil utilização, destina-se à artistas, designers, ou a qualquer pessoa interessada na criação de
objetos ou ambientes interativos (BANZI, 2011).
O microcontrolador presente nas diversas placas Arduino (Uno, Mega, Leonardo,
Micro, Mini, Nano, LilyPad, Fio, etc.) são programados utilizando a linguagem de programação
Arduino (baseada em Wiring, um framework de programação open-source para
microcontroladores), juntamente com sua IDE (baseada no Ambiente de Desenvolvimento
Processing) (BANZI, 2011).
Uma vez escrito o código e realizado a transferência do mesmo à placa Arduino através
da IDE. Pode-se conectar sensores de temperatura, umidade, luminosidade, presença,
flexibilidade, gás, entre outros, fazendo com que tais sensores convertam aspectos do mundo
físico em eletricidade. Pode-se também conectar-se à atuadores, como por exemplo, luzes,
motores, autofalantes, displays e etc., estes, obtêm eletricidade da placa e agem sobre o
22
ambiente. Desta forma, sensores e atuadores podem conectar-se à placa Arduino para uma
maior interação com o mundo real (MARGOLIS, 2011).
Há também os shields, que consiste em placas que podem ser facilmente encaixadas
encima das placas Arduino compatíveis, ou até mesmo, encima de outros shields, com o
objetivo de fornecer funcionalidade extra à placa Arduino, como por exemplo: conexão
Ethernet ou Wifi, receptor GPS, reproduzir áudio (MP3, WAV, etc.), display LCD, etc.
(B2CQSHOP, 2011).
23
3 INTEGRANDO FUNCIONALIDADES DO ARDUINO À WEB
Este Capítulo explica como os princípios REST nos conceitos ROA foram empregados
para disponibilizar os recursos do objeto inteligente (lâmpada inteligente construída com
hardware Arduino) na Web. Ademais, será explicado como a aplicação Web para a Web das
Coisas, desenvolvida com framework Rails, utiliza REST para controle, e armazenamento,
gerenciamento e exibição dos dados gerados em tempo real pelo dispositivo inteligente.
Ao final, será apresentado toda a arquitetura de hardware e software necessários para a
construção do objeto inteligente, como também a arquitetura de software utilizada no
desenvolvimento da aplicação Web.
3.1 Aplicando os princípios REST para expor funcionalidades do Arduino na Web
Para que as funcionalidades do dispositivo inteligente pudessem ser expostas, foi
necessário implementar um servidor Web embarcado no mesmo. A fim de poder receber e
enviar requisições HTTP que permitam o acesso às funcionalidades do dispositivo na forma de
recursos REST.
A lâmpada inteligente para ser acessada, precisa primeiramente, ter uma representação
na Web. Isto faz-se através da aplicação Web desenvolvida para a Web das Coisas, onde após
o registro do objeto, este pode receber e enviar requisições HTTP, e assim, ter seus recursos
disponibilizados.
Ter uma representação do objeto físico na Web, significa que este objeto passa a ter um
identificador único na Web, o que permite ser acessado como qualquer outro recurso existente
na Web. Como dito na Seção 2.4, na Web das Coisas essa identificação é feita através de URIs,
estando assim, em conformidade com o princípio REST de identificação única e global para os
recursos.
A URI de cada objeto é gerada automaticamente pela aplicação após o registro do
mesmo. Desta forma, cada URI possui o seguinte formato:
http://{endereço_do_servidor}/{recurso_objeto}/{identificador_do_objeto}
Sendo assim, uma vez que o usuário tenha realizado login, ao acessar um determinado
objeto, uma requisição HTTP é enviada para o servidor, e como resposta, o usuário será
redirecionado para uma outra página Web cujo conteúdo será uma representação deste recurso
(objeto inteligente), como pode ser visto na Figura 4. Enquanto que a requisição HTTP terá o
formato mostrado na Figura 5.
24
Figura 4 - Página Web da representação do objeto físico na Web. Fonte: Compilado pelo autor.
Figura 5 - Requisição HTTP GET para obtenção da representação do objeto. Fonte: Criado pelo autor.
Quando a requisição exibida na Figura 5 chega no servidor, este chamará o controller
objetos e a action show especificada no arquivo de configuração de rotas gerado
automaticamente pelo framework (rota exibida na Figura 6), já que a requisição HTTP possui
a URL do recurso /objetos/1 e o método GET (utilizado para obter o conteúdo de determinado
recurso).
Como pode ser visto na Figura 6, os caminhos da rota são definidos da seguinte forma,
sendo os campos em parênteses opcionais:
HTTP method ':controller(/:action(/:id(.:format)))'
A string segue um padrão, sendo composta por três segmentos particionado por barras
(/) e variáveis para serem postas. Estas variáveis são precedidas por dois pontos (:), sendo estas,
:controller, :action, e :id e :format. A variável :format refere-se ao formato do conteúdo da
resposta, por padrão, no Rails pode ser JSON (formato para aplicações) ou HTML (formato
25
para humanos), aplicando-se neste caso, o principio REST de suporte a múltiplas e
independentes representações para o recurso (GAMBLE et al. 2013).
Figura 6 - Tabela de rotas da aplicação para o recurso objetos. Fonte: Elaborado pelo autor.
De acordo com a tabela de rotas da aplicação, o controller do recurso objetos
(ObjetosController), terá a estrutura e métodos exibido na Figura 7.
Como pode ser observado, os sete métodos presente no controller e referenciados na
tabela de rotas, contém as quatro operações básicas CRUD (criar, ler, atualizar, e deletar). Além
dos quatro métodos básicos citados, possui métodos para listar recursos (index), e mais outros
dois métodos auxiliares que retorna recursos novos (new) e existentes (edit), numa forma
adequada para edição do cliente (RUBY et al. 2012). Estando desta forma, em conformidade
com o princípio REST de interface uniforme de acesso aos recursos, em que utiliza-se os quatro
métodos da requisição HTTP (GET, POST, PUT, DELETE) para interação e recuperação da
representação dos recursos.
Na página Web retornada pelo servidor como representação de determinado recurso
(objeto inteligente), mostrado na Figura 4, o gráfico de temperatura e umidade exibido é
alimentado através do envio de requisições HTTP do Arduino para o servidor da aplicação.
26
Estas requisições são enviadas automaticamente com periodicidade de um minuto entre cada
uma delas. Estas requisições possuem o formato apresentado na Figura 8.
Pode-se observar que no corpo da mensagem desta requisição é enviado uma
representação do recurso dht11 (sensor de temperatura e umidade conectado ao Arduino) no
formato JSON. Neste caso, cliente (placa Arduino) e servidor (aplicação Web) devem estar de
acordo com este formato, o que é aceitável pela aplicação Web, já que a mesma, aceita os
formatos HTML e JSON.
Figura 7 - Classe ObjetosController e métodos especificados no arquivo de configuração de rotas da
aplicação. Fonte: Elaborado pelo autor.
27
Figura 8 - Requisição HTTP POST que envia os dados do sensor dht11 do Arduino. Fonte: Criado
pelo autor.
A página Web da Figura 4, além de permitir que o usuário visualize os dados de
temperatura e umidade gerados em tempo real pelo objeto inteligente, também permite que o
usuário controle/interaja remotamente com o mesmo. Como por exemplo, acender e apagar a
lâmpada. Neste caso, a aplicação Web envia uma requisição HTTP para o objeto inteligente
(Arduino com servidor embarcado), em que o mesmo interpreta esta requisição para que o
Arduino saiba qual recurso (através da URI) e qual operação sobre o recurso (método a ser
chamado para acionar a lâmpada) deve ser realizada. A Figura 9 mostra o formato da requisição
HTTP enviada ao Arduino.
Figura 9 - Requisição HTTP PUT enviada ao Arduino para alterar o estado da lâmpada. Fonte: Criado
pelo autor.
É importante notar que, em todas as requisições mostradas anteriormente, todas elas
possuem toda a informação necessária para que a requisição seja entendida e processada pelo
servidor. Estando desta forma, de acordo com o princípio REST de interação sem manutenção
de estado.
3.2 Arquitetura de software
Esta seção abordará toda a arquitetura de software necessária para tornar possível o
desenvolvimento deste trabalho. Isto inclui, tanto os softwares utilizados no desenvolvimento
28
da aplicação Web, como também, os softwares para implementação do protótipo (lâmpada
inteligente construída com hardware Arduino).
Também será apresentado o diagrama de classes tanto da aplicação Web como do
dispositivo inteligente, a fim de proporcionar um melhor entendimento da estrutura e
relacionamento das classes que compõem os mesmos.
3.2.1 Aplicação Web para a Web das Coisas
A ideia do desenvolvimento da plataforma para a Web das Coisas, é oferecer páginas
Web que permitam que os usuários integrem, gerenciem e criem uma representação na Web do
objeto físico. A fim de, visualizar (por meio de uma interface amigável voltada para o objeto
em questão – lâmpada inteligente) em tempo real através de um gráfico interativo os dados
(temperatura e humidade ambiente) gerados pelo objeto. Como também permitir o controle de
forma remota do mesmo, que neste caso, refere-se ao acendimento e apagar da lâmpada. Os
softwares utilizados foram: framework Rails, banco de dados SQLite, e o servidor Web
WEBrick.
3.2.1.1 Framework Rails
O framework Rails foi criado em 2003 por David Heinemeier Hansson. Trata-se de um
framework para aplicações Web que utiliza a linguagem de programação Ruby (inventada por
Yukihiro Matsumoto em 1994). É de código aberto, multi-plataforma, com suporte a diversos
sistemas de banco de dados (SQLite, DB2, MySQL, Oracle, Postgres, Firebird, e SQL Server),
não requer editor ou IDE, e é composto por várias bibliotecas e ferramentas que facilitam o
desenvolvimento de aplicações (GAMBLE et al. 2013).
Rails implementa o padrão MVC (Model, View e Controller) através das bibliotecas
Active Record (responsável pela interação e abstração com o banco de dados), Action View
(sistema de templates que gera páginas HTML para o usuário como resultado de uma requisição
à aplicação), e Action Controller (manipula o fluxo da aplicação, e os dados vindos do banco
de dados para serem exibidos na view) (GAMBLE et al. 2013).
Os benefícios da utilização de um padrão como o MVC, é que cada parte que o compõe
é uma entidade separada, permitindo serem testadas de forma isolada. Outro benefício, referese as mudanças numa aplicação MVC, que tendem a ser localizadas e de baixo impacto,
significando que mudanças, por exemplo, na camada model não precisa afetar a camada view
(RUBY et al. 2012).
29
O framework Rails também implementa os princípios REST na camada controller,
baseando-se nos conceitos da arquitetura orientada a recursos (ROA). Desta forma, o controller
trata cada elemento da camada model como um recurso da aplicação (GAMBLE et al. 2013).
Consequentemente, Rails utiliza URIs para identificação destes recursos, como também
o protocolo HTTP para comunicação cliente-servidor. Cada requisição HTTP deve conter toda
a informação necessária para que o servidor possa compreende-la, já que é através dela que a
aplicação definirá qual controller e action (método do controller) deve ser chamado (de acordo
com o arquivo de configuração de rotas do Rails), observando apenas a URI e o método da
requisição HTTP (GET, POST, PUT e DELETE) (RUBY et al. 2012).
3.2.1.2 Servidor Web WEBrick
WEBrick é um servidor HTTP Ruby que vem junto com o framework Rails, desta forma,
não há a necessidade de instalação e configuração de um servidor Web para a aplicação. Tratase de um servidor leve, e que pode ser configurado como um servidor HTTPS, servlet com
código Ruby, servidor proxy, entre outros (RUBY et al. 2012).
3.2.1.3 Banco de dados SQLite
SQLite é o banco de dados padrão para desenvolvimento no Rails. Trata-se de um banco
de dados leve, de código aberto, e ideal para dispositivos com pouca memória. SQLite realiza
operações de leitura e escrita diretamente em arquivos no disco, como também mantém em um
único arquivo um banco de dados completo (possuindo várias tabelas, índices, triggers e views)
(ABOUT, 2014).
3.2.1.4 Diagrama de classes
A Figura 10 apresenta as principais classes do pacote controllers da aplicação Web. A
classe ActionController implementa diversas funções (redirect_to, render, before_filter, entre
outros) que manipulam o fluxo da aplicação e os dados vindos do banco de dados para serem
exibidos na view. A única classe da aplicação que herda de ActionController é a classe
ApplicationController, as demais classes do controller herdam de ApplicationController.
Na classe ApplicationController encontram-se algumas variáveis, cujo conteúdo é
exibido na view, e também o método check_login que retorna uma instância do objeto Usuario,
uma vez que, obtem-se sucesso na validação do login e senha.
A classe SessionsController contém os métodos create e destroy para gerenciar a seção
dos usuários da aplicação. O método create recebe os dados de login e senha fornecidos pelo
usuário, através do formulário da view. Em seguida, passa esses dados para o método
30
validate_login da classe Usuario (model) e dependendo do retorno, o usuário tem acesso ou
não à aplicação.
Nas classes UsuariosController e ObjetosController estão implementados os quatro
métodos básicos CRUD (create {método create}, read {método show}, update {método
update}, e delete {método destroy}), além de mais outros três métodos auxiliares: index
(retorna uma lista de recursos), new (retorna a instância do recurso), e edit (retorna os dados de
um dos recursos). Já a classe Dht11sController, implementa-se apenas os métodos index e
create, já que as demais operações CRUD não aplica-se a este recurso.
Ademais, a classe ObjetosController implementa o método mudarstatusluz, responsável
por enviar uma requisição HTTP PUT para alterar o estado da lâmpada acoplada na placa
Arduino, permitindo assim, que a mesma seja apagada ou acendida remotamente.
Figura 10 - Diagrama de classes do pacote controllers da aplicação Web. Fonte: Elaborado pelo autor.
A Figura 11 apresenta as principais classes do pacote models da aplicação Web. A classe
ActiveRecord implementa diversas funções (create, read, all, where, first, update, delete, save,
entre outros) que são responsáveis pela interação e abstração com o banco de dados. Todas
essas classes herdam de ActiveRecord e são mapeadas como tabelas no banco de dados.
31
Figura 11 - Diagrama de classes do pacote models da aplicação Web. Fonte: Elaborado pelo autor.
Na classe Usuario está implementado o método validate_login, que busca no banco de
dados da aplicação um recurso usuário que possua os dados de login e senha, fornecidos pelo
usuário. Em caso de sucesso, retorna uma instância do recurso encontrado.
A classe Dht11 implementa o método valorMedio que tem a função de buscar os dados
de temperatura e umidade (fornecidos pelo sensor no Arduino) de determinado dia e retornar o
valor médio para este dia. Esta função é utilizada para alimentar o gráfico de temperatura e
umidade dos últimos sete dias, para serem exibidos ao usuário.
3.2.2 Lâmpada inteligente construída com hardware Arduino
Os softwares necessários para a implementação do protótipo foram: IDE Arduino 1.0.5r2 (utilizado para escrita e transferência do código para o microcontrolador Arduino), e
AccessPort137 (utilizado para gravação dos comandos de voz, e gerenciamento do hardware
de reconhecimento de voz).
3.2.2.1 IDE Arduino 1.0.5-r2
A IDE (do inglês, Integrated Development Environment) do Arduino foi necessária para
a escrita, edição e transferência do código para a placa Arduino. Também é função da IDE
realizar a conversão do código em instruções (linguagem de máquina) entendíveis pelo
hardware Arduino (MARGOLIS, 2011).
32
3.2.2.2 AccessPort 1.37
O AccessPort é uma ferramenta para monitoramento da porta serial, permitindo desta
forma, a debugação da mesma. O AccessPort foi utilizado para envio dos comandos
hexadecimais para configuração do módulo de reconhecimento de voz, como também, para
visualização dos dados retornados pelo módulo.
3.2.2.3 Diagrama de classes
A Figura 12 apresenta as principais classes executadas no Arduino Mega 2560. As
classes EthernetClient e EthernetServer, estão incluídas na biblioteca Ethernet. Esta biblioteca
permite que a placa Arduino conecte-se à Internet através do uso do shield Ethernet.
Figura 12 - Principais classes executadas no Arduino Mega 2560. Fonte: Elaborado pelo autor.
Como explicado anteriormente, para que o Arduino possa disponibilizar suas
funcionalidades como recursos REST, é necessário que o mesmo possua um servidor Web
embarcado. Desta forma, a classe EthernetServer desempenha esta função, onde a placa
Arduino fica em um loop infinito, esperando pela chegada de clientes que enviam requisições
HTTP para acessar as funcionalidades do Arduino.
A classe EthernetClient é responsável pela criação de clientes. Sendo assim, um cliente
(placa Arduino) pode conectar-se à um servidor (aplicação Web desenvolvida neste trabalho).
Portanto, é através dessa classe que o Arduino envia as requisições HTTP, que contém as
informações de temperatura e umidade, para o servidor da aplicação Web para que sejam
armazenados no banco de dados.
A classe Twitter instancia um cliente de EthernetClient para enviar requisições POST
contendo uma mensagem de texto, para o servidor do Twitter. O servidor, ao receber a
requisição exibe a mensagem de texto no Twitter.
33
A classe RestClient é responsável por enviar requisições HTTP para um determinado
servidor. Esta classe possui uma interface uniforme de acesso aos recursos, ou seja, nela estão
implementadas as funções get(), post(), put(), e delete(), referindo-se aos quatro principais
métodos do protocolo HTTP (GET, POST, PUT e DELETE).
As classes virtuabotixRTC e dht11 são responsáveis por acessar e fornecer os dados para
a placa Arduino do módulo RTC (data e hora) e do sensor dht11 (temperatura e umidade),
respectivamente.
3.3 Arquitetura de hardware
Nesta seção serão abordados separadamente e com maior nível de detalhes as partes
mais importantes dos componentes de hardware necessários para a construção do protótipo.
Resumidamente, isto inclui a placa microcontroladora Arduino, sensores, atuadores, cabos e
shields.
3.3.1 O protótipo
O protótipo (Figura 13) consiste em uma lâmpada inteligente, conectada via cabo de
rede Ethernet. Ela é capaz de fornecer temperatura ambiente, data, hora e twittar. Todas suas
funcionalidades podem ser acessadas via página Web, ou seja, através de um computador,
smartphone ou tablet. E algumas delas por comandos de voz.
Os componentes de hardware necessários para a construção do protótipo foram:
microcontrolador Arduino Mega 2560 R3, Ethernet Shield R3 juntamente com um cabo de rede
ethernet categoria 5e para conexão do Arduino à Internet, Sensor Shield versão 4 juntamente
com cabos do tipo macho-fêmea e fêmea-fêmea para conexão de sensores e atuadores, módulo
de reconhecimento de voz V2 versão 2 e microfone para acionamento das funcionalidades do
dispositivo por comandos de voz, módulo conversor USB-TTL para comunicação entre o
computador (USB) e o módulo V2 (TTL), sensor de temperatura e umidade DHT11, módulo
RTC DS1302 para fornecimento de data e hora real, display LED de 7 segmentos e 4 dígitos
para exibição de informações ao usuário, um módulo relé DC/AC 220 volts para acionamento
da lâmpada e 2 baterias sendo uma de 3.3 volts para alimentar módulo RTC e outra de 9 volts
para alimentar o Arduino.
34
Figura 13 - Hardware que compõe o protótipo. Fonte: Compilado pelo autor.
3.3.2 Arduino Mega 2560 R3
O Arduino Mega 2560 (Figura 14) é um microcontrolador baseado no ATmega2560. A
placa possui 54 pinos digitais de entrada/saída operando em 5 volts, e 16 pinos analógicos
de entrada. No caso dos pinos digitais, o que definirá se ele será de entrada ou saída, dependerá
do código que foi escrito na IDE através da atualização da função pinMode().
Figura 14 - Pinos digitais e analógicos Arduino Mega 2560 R3 (imagem feita com Fritzing).
35
Destes 54 pinos, alguns possuem funções específicas, como por exemplo: 15 pinos
podem ser usados como saída PWM (pinos 2 a 13 e 44 a 46).
8 pinos são usados para receber (RX) e transmitir (TX) dados seriais TTL, portanto,
a placa Arduino pode enviar e receber dados de um computador ou outros módulos à ele
conectado. Estes pinos realizam comunicação serial por hardware construído no chip, chamado
UART, isto permite que o chip Atmega receba dados seriais enquanto realiza outras tarefas,
desde que haja espaço no buffer serial. Estes pinos são: Serial: 0 (RX) e 1 (TX), Serial 1: 19
(RX) e 18 (TX), Serial 2: 17 (RX) e 16 (TX), e por fim, Serial 3: 15 (RX) e 14 (TX). Os pinos
0 (RX) e 1 (TX) estão conectados aos correspondentes pinos do chip ATmega16U2 USB-paraTTL Serial e são utilizados pela conexão USB da placa para upload de código escrito na IDE.
Portando recomenda-se que nada esteja conectado nos pinos 0 e 1 no momento de upload do
código (BANZI, 2011).
2 pinos são usados para comunicação TWI através da biblioteca Wire, que simplifica
o uso do bus TWI, são eles: 20 (SDA) e 21 (SCL).
4 pinos são usados para comunicação SPI através da biblioteca SPI, são eles: 50
(MISO), 51 (MOSI), 52 (SCK) e 53 (SS). 6 pinos podem ser configurados para disparar uma
interrupção, são eles: 2 (interrupção 0), 3 (interrupção 1), 18 (interrupção 5), 19 (interrupção
4), 20 (interrupção 3), e 21 (interrupção 2).
Os 16 pinos analógicos de entrada, são utilizados para a leitura de sensores que enviam
sinais contínuos, como por exemplo: sensores de luminosidade e potenciômetros.
Diferentemente dos pinos digitais de entrada, que leem os estado de simples sensores, ON ou
OFF (BANZI, 2011).
Por fim, há os pinos AREF, que configura a voltagem usada pelos pinos analógicos de
entenda. E Reset, que quando pressionado reinicia a placa, e o programa armazenado no
microcontrolador é executado novamente do início (SCHMIDT, 2011).
Figura 15 - Conectores de alimentação do Arduino Mega 2560 R3 (imagem feita com Fritzing).
36
O fornecimento de energia pode ser tanto por conexão USB (5volts) como também
por uma fonte externa (adaptador AC-DC ou bateria, 7-12volts), e dar-se respectivamente,
através do conector USB, ou do conector DC power jack ou pelos pinos Gnd e Vin presentes
no conector POWER da placa, como pode ser visto na Figura 15 (RILEY, 2012).
A voltagem recomendada para operar é de 7 a 12 volts e a fonte de energia (conexão
USB ou fonte externa) é selecionada automaticamente, isto significa que, se não houver uma
fonte externa, a alimentação será feita pela conexão USB, uma vez que, seja conectada uma
fonte externa, a placa automaticamente deixará de usar a conexão USB e passará a usar a fonte
externa (BANZI, 2011).
Quanto a memória, o chip ATmega2560 do Arduino Mega 2560 possui 256 KB de
memória flash para armazenamento do código escrito com a IDE. Destes 256 KB, 8 KB é usado
pelo bootloader. O bootloader é um pequeno programa que permite o upload de código sem o
uso de hardware adicional (KRINGEN, 2013). Além disso, ele possui 8 KB de SRAM e 4 KB
de EEPROM.
3.3.3 Ethernet Shield R3
A placa Ethernet (Figura 16) é baseada no chip Wiznet W5100. Este chip fornece pilha
TCP/IP, suportando: TCP, UDP, IPv4, ICMP, IGMP, ARP e PPPoE. Possui um buffer interno
de 16Kbytes para transmissão de dados e suporta até quatro conexões de socket simultâneas
(WIZNET, 2014).
O shield Ethernet fornece funcionalidade extra à placa Arduino, permitindo-a conectarse à Internet. Para isso, basta encaixá-lo acima da placa Arduino Mega 2560 em seus respectivos
pinos, conectá-lo à rede através de um cabo RJ45 e escrever o código fazendo uso das
bibliotecas Ethernet e SPI.
A biblioteca Ethernet fornece as classes necessárias que permitirá a conexão da placa
Arduino à Internet, suportando até quatro conexões concorrentes, sendo estas conexões, de
entrada, saída ou ambas (RILEY, 2012).
Já a biblioteca SPI, permite a comunicação da placa Arduino com o shield Ethernet, isto
inclui, o chip W5100 e o slot para cartão micro SD, usando o bus SPI, através do cabeçalho
ICSP (RILEY, 2012).
37
Figura 16 - Arduino Ethernet Shield R3 (imagem feita com Fritzing).
Como o chip W5100 e o slot micro SD compartilham o bus SPI, apenas um pode estar
ativo/selecionado por vez. Para isso, utiliza-se os pinos 4 (SS para micro SD) ou 10 (SS para
controle Ethernet). O pino 53 (hardware SS), não é usado para seleção entre W5100 ou SD,
mas este pino deve ser posto como output para que a interface SPI funcione (MARGOLIS,
2011).
Desta forma, caso ambos sejam utilizados (W5100 e SD) as bibliotecas correspondestes
serão responsáveis pelo compartilhamento do bus SPI. Mas, caso apenas um dos dois seja
utilizado, àquele que não for usado, deve explicitamente ser desativado, para isso, coloca-se o
pino correspondente como output e high.
Os pinos utilizados na comunicação do Arduino com o chip W5100 e o slot micro SD
do shield Ethernet, são: 50, 51 e 52. Como também os já citados anteriormente, pinos: 4 (SS
para micro SD), 10 (SS para controle Ethernet) e 53 (hardware SS), ilustrados na Figura 17.
Desta forma, estes pinos não podem ser utilizados como entrada/saída. Para que a comunicação
com o micro SD ocorra, é necessário o uso da biblioteca SD (MARGOLIS, 2011).
Figura 17 - Pinos de comunicação do Arduino Mega 2560 com o chip W5100 e micro SD (imagem
feita com Fritzing).
38
A alimentação do shield Ethernet é proporcionada pela placa Arduino, operando com
uma voltagem de 5 volts e velocidade de conexão de 10/100Mb. No shield encontra-se LEDs
indicadores que fornecem informações sobre alimentação e aspectos relacionados à rede, são
eles: PWR (a placa e o shield estão alimentados), LINK (presença de cabo de rede e pisca
quando ocorre a transmissão ou recebimento de dados), FULLD (conexão de rede full duplex),
100M (presença de conexão de rede de 100 Mb/s), RX (pisca quando o shield recebe dados),
TX (pisca quando o shield envia dados) e COLL (pisca quando detecta-se colisão na rede)
(WIZNET, 2014).
3.3.4 Sensor shield versão 4
O sensor shield permite a fácil conexão de dispositivos de entrada e saída nas interfaces
I2C ou UART, analógicas e digitais do Arduino, necessitando apenas de cabos dedicados.
Como exemplo destes dispositivos, pode-se citar os sensores (temperatura, luminosidade,
acelerômetro, etc.) e os atuadores (displays, autofalantes, motores, etc.).
Além de facilitar a conexão de sensores e atuadores à placa Arduino, este shield
evita/substitui a utilização de uma placa breadboard/protoboard, para a conexão dos mesmos.
O breadboard ou protoboard, ilustrado na Figura 18, é uma placa que permite a montagem de
circuitos experimentais, ou seja, sem que haja a necessidade de soldar os componentes do
circuito. Desta forma, erros na montagem do circuito podem ser facilmente corrigidos com a
mudança do circuito (OLSSON, 2012).
Figura 18 - Breadboard (imagem feita com Fritzing).
O sensor shield conecta cada pino (analógico ou digital) do Arduino com conectores do
shield que já estão preparados para conectar-se com sensores e atuadores, ou seja, cada conector
possui os pinos VCC (5 volts), GND (ground) e signal (SEEED, 2014).
No caso dos pinos analógicos, estes também estão conectados a conectores buckled que
também possuem os pinos VCC, GND e signal. Os conectores buckled possuem “travas” que
proporcionam maior segurança no encaixe/conexão, evitando que os cabos conectados aos
39
pinos soltem-se, o que pode ocorrer com os demais conectores que possuem apenas pinos
(SEEED, 2014).
Além disso, o shield possui mais uma porta (conector buckled) para comunicação I2C
ou UART, que podem ser selecionados através de dois jumpers localizados atrás da mesma.
Esta porta de comunicação possui quatro pinos, são eles: VCC, GND, TX/SDA (transmissão)
e RX/SCL (recebimento) (KING, 2014). A Figura 19 mostra todo o esquema descrito
anteriormente.
Figura 19 - Sensor Shield Versão 4, adaptado de (SEEED, 2014).
3.3.5 Módulo de reconhecimento de voz V2
O V2 opera entre 4.5 a 5.5 volts, possui interface digital TTL UART (comunicação
serial) e GPIO (GCH e GCL: para importação dos grupos / O1~O5: para saída do resultado de
comando de voz), interface analógica para conexão de microfone 3.5mm e pinos (GND e VOC)
para microfone. Dois LEDs, um laranja e outro vermelho, são usados como indicadores para os
modos de gravação, espera e reconhecimento, como mostra a Figura 20. Este módulo
dependente de locutor, ou seja, pode não reconhecer a voz de outras pessoas (SHEN, 2014).
O módulo de reconhecimento de voz V2, recebe comandos de configuração e responde
aos comandos de voz através da interface da porta serial. Os comandos enviados não serão
apagados quando não haja alimentação (SHEN, 2014).
40
Figura 20 - Módulo de reconhecimento de voz V2, adaptado de (SHEN, 2014).
No total, é permitido o armazenamento de até 15 comandos de voz. Estes, são divididos
em 3 grupos com 5 comandos de voz cada, podendo cada instrução de voz ter um comprimento
máximo de até 1300ms. A gravação é feita em 1 grupo por vez, para isso é necessário o envio
do comando hexadecimal através da porta serial no formato “Head + Key”, sendo Head 0xaa
e Key uma lista de 47 comandos. Uma vez que, a gravação do grupo termine é necessário sua
importação para que o módulo possa reconhecer os comandos de voz, para isso, envia-se através
da serial o comando correspondente (SHEN, 2014).
A lista dos 47 comandos são utilizados para realização de configurações do módulo,
dentre elas, cita-se algumas: deletar, importar e iniciar gravação de instruções, alterar baud rate
(taxa de dados em bits por segundo para transmissão de dados na serial), eleição de modo
comum ou compacto, etc. Para maiores informações sobre os comandos, consultar manual
Voice Recognition Module V2 disponível no link da referência (SHEN, 2014).
O V2, permite a importação de apenas 1 grupo por vez, ou seja, uma vez gravada as
instruções dos 3 grupos, o módulo só reconhecerá as 5 instruções de 1 grupo apenas. As
instruções dos outros dois grupos não serão reconhecidas, já que, é necessário a importação de
determinado grupo para que o módulo realize o reconhecimento. Quando enviado e reconhecido
o comando de voz pelo módulo, este, retorna pela porta serial por exemplo o resultado 11,
significando que foi reconhecido o primeiro comando (dos cinco existentes) do grupo 1 (SHEN,
2014).
41
3.3.6 Módulo conversor USB-TTL
O módulo conversor USB-TTL (Figura 21) foi utilizado para comunicação (envio e
recebimento de comandos seriais) entre o computador (USB) e o módulo de reconhecimento
de voz V2 (TTL), uma vez que, este não tem suporte USB.
O módulo USB-TTL contém um chip que converte o hardware da porta serial do chip
do módulo V2 para USB. Desta forma, pode ser feita a conexão com o hardware da porta serial
(MARGOLIS, 2011).
Figura 21 - Módulo conversor USB-TTL. Fonte: Compilado pelo autor.
Sendo assim, talvez, deva estar pensando: “Se o Arduino Mega comunica-se (envia e
recebe dados através do hardware de porta serial) com o computador através de um cabo USB,
como então é possível que ocorra a comunicação?”.
É simples, como mencionado na Seção 3.2.3 da arquitetura de hardware, o Arduino
Mega possui quatro hardwares de porta serial, sendo que, apenas o hardware da porta serial
(Serial: pinos, 0 (RX) e 1 (TX)) tem suporte USB, ou seja, realiza a conversão USB-TTL
automaticamente. Já os demais hardwares de porta serial (Serial 1: 19 (RX) e 18 (TX), Serial
2: 17 (RX) e 16 (TX), e Serial 3: 15 (RX) e 14 (TX)), não tem suporte USB, havendo desta
forma a necessidade de utilização do módulo conversor USB-TTL (MARGOLIS, 2011).
3.3.7 Sensor de temperatura e umidade DHT11
O DHT11 (Figura 22) é um sensor digital de temperatura e umidade de baixo custo. Ele
monitora o ar do ambiente ao seu redor e emite sinais digitais através de seu pino signal, a
transmissão do sinal digital por fio pode chegar até 20 metros. Sua alimentação varia entre 3.5
até 5 volts DC (D-ROBOTICS, 2014).
As leituras podem ocorrer no mínimo a cada 2 segundos. Para temperatura, a variação
de leitura é de 0 até 50°C (celsius), com uma precisão de 2°C para mais ou para menos. Já em
relação à umidade, a variação é de 20 a 90% RH (Relative Humidity), com precisão de 5% RH
para mais ou para menos (D-ROBOTICS, 2014).
42
Este sensor possui um componente de resistência de medição de umidade, como
também, um componente NTC (Negative Temperature Coefficient) de medição de temperatura.
Ambos estão conectados à um microcontrolador 8-bit de alta performance. A calibração dos
coeficientes de temperatura e umidade são armazenados como programas em sua memória OTP
(One Time Programmable) do tipo PROM (D-ROBOTICS, 2014).
Figura 22 - Sensor de temperatura e umidade DHT11, adaptado de (D-ROBOTICS, 2014).
Quando à comunicação, as leituras realizadas pelo sensor DHT11 são enviadas pelo
pino de saída digital utilizando apenas um único fio. A comunicação ocorre em três estágios:
requisição, resposta e leitura de dados.
Os dados são enviados em um pacote de 5 segmentos com 8-bit cada um, totalizando
um pacote de 40 bits. Neste pacote, os 2 primeiros segmentos referem-se à leitura da umidade,
sendo o 1° segmento a parte inteira e o 2° segmento a parte decimal do número que compõe a
umidade (D-ROBOTICS, 2014).
O terceiro e quarto segmento, referem-se à leitura da temperatura, sendo o 3° segmento
a parte inteira e o 4° segmento a parte decimal do número que compõe a temperatura (DROBOTICS, 2014).
O 5° e último segmento, refere-se ao check sum, soma dos quatro primeiros segmentos,
utilizado para saber se os dados recebidos estão corretos (D-ROBOTICS, 2014). Para maiores
informações sobre funcionamento do sensor DHT11, consultar manual disponível no link da
referência.
3.3.8 Módulo RTC DS1302
O módulo DS1302 é um relógio/calendário de tempo real que fornece segundos,
minutos, horas, data do mês, mês, dia da semana e ano, incluindo ano bissexto até 2100. Possui
31 bytes de memória RAM estática e comunica-se com o microprocessador por interface serial
(MAXIM, 2014).
43
A comunicação entre o módulo RTC e o Arduino ocorre através dos pinos CE, I/O e
SCLK, conhecido como 3-wire interface, como mostra a Figura 23. Os dados são transferidos
1 byte por vez, ou os 31 bytes de uma vez só, sendo esta última a opção recomendada, já que
evitaria dados erróneos. Os pinos X1 e X2 estão conectados ao cristal de quartzo (MAXIM,
2014).
Figura 23 - Módulo Real-Time Clock DS1302, adaptado de (MAXIM, 2014).
O DS1302 possui duas fontes de alimentação, uma primária e outra secundária, e darse através dos pinos Vcc2 e Vcc1, respectivamente. A primária é fornecida pelo Arduino,
operando em 5 volts, já a secundária por uma bateria de 3.3 volts que pode durar até 10 anos. A
fonte secundária só será utilizada apenas quando não houver fornecimento de energia por parte
do Arduino (MAXIM, 2014). Para maiores informações sobre o módulo RTC DS1302
consultar manual disponível no link da referência.
3.3.9 Display LED de 7 segmentos e 4 dígitos
O display LED possui 4 dígitos com 7 segmentos cada um. Nele encontra-se 12 pinos,
onde cada um deles representam ou um dígito ou um segmento. Os pinos, 12, 9, 8 e 6
representam os dígitos 1, 2, 3 e 4, respectivamente. Já os demais pinos, 11, 7, 4, 2, 1, 10, 5 e 3
representam os oitos segmentos que compõem um dígito, são eles: A, B, C, D, E, F, G e DP
(decimal point), como exemplificado na Figura 24 (MARGOLIS, 2011).
44
Neste projeto, o display foi usado para exibição de informações ao usuário, tais como:
data, hora e temperatura. Para a exibição dos números, é necessário o acendimento de
combinações de segmentos que representem um número (MARGOLIS, 2011).
Figura 24 - Display LED de 7 segmentos e 4 dígitos com seus respectivos pinos. Fonte: Compilado
pelo autor.
3.3.10 Módulo relé DC/AC 220 volts
O módulo relé é utilizado para o acionamento de atuadores que necessitam de grande
quantidade de energia para funcionar. Estes, geralmente são alimentados por baterias ou até
mesmo por energia elétrica, ou seja, voltagens bem maiores que os 5 volts que o Arduino pode
oferecer (MARGOLIS, 2011).
O relé é ativado/desativado através dos 5 volts do Arduino, quando isso ocorre, gera-se
um campo eletromagnético que faz com que a bobina contida no relé mova a armadura fazendo
com que o terminal comum entre em contato com o terminal normalmente aberto. Isto fechará
o circuito, e consequentemente, permitirá a passagem de uma corrente maior até o atuador
(O´SULLIVAN, 2004).
Mas, para que tudo ocorra de forma segura, sem que esta corrente maior possa danificar
a placa Arduino, é necessário a utilização de componentes que irão isolar e proteger os circuitos.
45
Estes componentes são: transistor, resistor, diodo e fotoacoplador. Todos eles, já estão incluídos
no circuito do módulo relé, como pode ser visto na Figura 25 (O´SULLIVAN; IGOE, 2004).
Figura 25 - Módulo relé isolado 5 volts. Fonte: Compilado pelo autor.
3.3.11 Cabos
Neste projeto foi necessário a utilização de alguns cabos, seja para comunicação entre o
computador e a placa Arduino, conexão do shield Ethernet à rede, como também para a conexão
de sensores e atuadores ao Arduino.
O cabo USB A-B, mostrado na Figura 26, foi utilizado para comunicação entre o
Arduino e o computador, sendo necessário para a transferência do código escrito na IDE para
o chip do microcontrolador. Utilizou-se também um cabo de rede ethernet categoria 5e (Figura
27) para conectar o Arduino à Internet, através do shield Ethernet.
Os cabos utilizados para conexão dos sensores e atuadores ao Arduino, são de dois tipos.
O primeiro (lado esquerdo da Figura 28) possui conectores fêmea em ambos os lados. Já o outro
(lado direito) possui um conector macho e outro fêmea em cada extremidade.
Figura 26 - Cabo USB A-B. Fonte: Compilado pelo autor.
46
Figura 27 - Cabo de rede Ethernet categoria 5e. Fonte: Compilado pelo autor.
Figura 28 - Cabos fêmea-fêmea e cabos macho-fêmea. Fonte: Compilado pelo autor.
47
4 AVALIAÇÃO DE DESEMPENHO DAS FUNCIONALIDADES DO ARDUINO EM
TEMPO DE EXECUÇÃO
Este capítulo apresenta os resultados obtidos na avaliação do consumo de memória e
tempo de execução necessários para desempenhar cada funcionalidade em condições normais
de uso. A lâmpada inteligente possui um total de sete tarefas, umas são executadas
automaticamente pelo próprio microcontrolador, outras, solicitadas pelo usuário através de
comandos de voz, ou remotamente com o envio de requisições HTTP por meio da aplicação
Web desenvolvida neste trabalho.
As sete atividades em questão são: exibição da data, hora ou temperatura ambiente no
display LED; postar twitter contendo informações de temperatura, umidade e estado da
lâmpada; acender e apagar lâmpada por comandos de voz, como também, de forma remota; e
por fim, enviar automaticamente dados de temperatura e umidade ambiente para o servidor da
aplicação Web.
As atividades de exibição da data, hora e temperatura ambiente no display LED são
realizadas através de comandos de voz. Enquanto que as atividades de postar twitter e controlar
a lâmpada, que também são acionadas por comandos de voz, enviam requisições HTTP.
A primeira, envia requisições HTTP POST para o Twitter contendo no corpo da
mensagem da requisição informações de temperatura e umidade ambiente, e estado da lâmpada,
obtidos no momento da solicitação da funcionalidade pelo usuário.
A segunda, envia requisições HTTP PUT para o servidor da aplicação Web contendo
no corpo da requisição em formato JSON, o estado da lâmpada, a fim de manter atualizado a
representação Web deste objeto.
A funcionalidade de controlar a lâmpada também pode ser efetuada remotamente,
através do envio de requisições HTTP PUT pelo usuário da aplicação Web. Nesta requisição é
informado o recurso que deseja ser acessado, como também, uma mensagem em formato texto
plano (text/plain) no corpo da mensagem, definindo se a lâmpada deve ser acendida ou apagada.
Por fim, a funcionalidade de envio automático da temperatura e umidade para o servidor
da Aplicação, consiste em enviar requisições HTTP POST contendo no corpo da mensagem da
requisição em formato JSON os dados em questão.
4.1 Consumo de memória
O Arduino Mega 2560 possui três tipos de memória, são elas: flash, SRAM e EEPROM.
A memória flash é onde fica armazenado o código Arduino, sua capacidade total é de 256
KBytes, sendo 8 KByte reservado para o bootloader (necessário para upload de código). A
48
memória EEPROM possui capacidade máxima de 4 KBytes e pode ser utilizada pelo
programador para armazenar informações persistentes. Por fim, a memória SRAM com
capacidade de 8 KBytes, é onde as variáveis são criadas e manipuladas em tempo de execução.
As memórias flash e EEPROM são do tipo não-volátil, significando que, as informações nela
contidas persistirão quando não haja fornecimento de energia, ao contrário da SRAM que é
volátil.
A avaliação do consumo da memória utilizada para desempenhar cada funcionalidade
foi feita na SRAM do Arduino, visto que, esta é a única memória que apresenta variações de
espaçamento em tempo de execução. A Figura 29 apresenta a quantidade de memória
consumida no Arduino, nos diferentes tipos de memória.
Figura 29 - Consumo das diferentes memórias do Arduino Mega 2560. Fonte: Arduino Builder.
Pode-se observar que na memória flash o código do Arduino ocupa cerca de 22 KBytes,
o que representa 8.4% de espaço da memória. Já na memória SRAM, as variáveis do código
Arduino ocupam 1.8 KBytes, ou 22.5% da capacidade total, restando 6.3 KBytes para criação
e manipulação das variáveis em tempo de execução. Por fim, a memória EEPROM que não foi
utilizada para armazenar dados, resultando em 100% de espaço livre.
O consumo de memória envolve todas as variáveis, variáveis de funções e objetos,
necessários para a realização da tarefa. Para realizar esta medição, utilizou-se a biblioteca
MemoryFree, que fornece a função freeMemory(), para verificar em tempo de execução a
quantidade de memória disponível na SRAM do Arduino. Para a obtenção dos valores
referentes a memória consumida, realizou-se o cálculo da diferença entre a quantidade de
memória livre antes do início da realização da tarefa, com a quantidade de memória livre após
a tarefa ser desempenhada por completo. A Figura 30 apresenta os resultados obtidos da
49
avaliação de consumo de memória em bytes para cada uma das sete funcionalidades executadas
pela lâmpada inteligente.
Consumo de memória por tarefa
Tarefa desempenhada
Controlar luz remotamente
108
Enviar temperatura e umidade para servidor
62
Twittar
53
Controlar luz por voz
27
Exibir temperatura
49
Exibir hora
59
Exibir data
60
0
20
40
60
80
100
120
Consumo de memória (bytes)
Figura 30 - Consumo de memória para desempenhar cada funcionalidade da lâmpada inteligente.
Fonte: Compilado pelo autor.
Observa-se que a quantidade de memória consumida para atender a cada uma das
atividades varia entre 27 para 108 bytes apenas. Sabendo que microcontroladores são
dispositivos com restrições de memória, no caso do Arduino que possui 8 KBytes de memória
SRAM, a execução destas atividades não causam grandes impactos no consumo de memória,
visto que, ainda restam 6.3 KBytes. Consequentemente não afetarão no desempenho das
atividades executadas pelo microcontrolador em tempo de execução.
A funcionalidade de controle remoto da lâmpada que consumiu maior quantidade de
memória para ser realizada, 108 bytes, explica-se pelo fato da necessidade de estanciar objetos
EthernetServer e EthernetClient para obtenção do cliente remoto. Também foi necessário
estanciar objetos String para tratar as requisições HTTP enviadas pelo cliente, a fim de obter
método, recurso e corpo da mensagem contidos na requisição HTTP para saber qual recurso e
ação sobre o mesmo deve ser desempenhada para atender de forma correta a solicitação do
cliente.
4.2 Tempo para executar funcionalidade
O tempo para executar determinada funcionalidade consiste na diferença entre o tempo
em que a mesma é finalizada, e o momento em que a tarefa se inicia. Como exemplo, a tarefa
de controle remoto da lâmpada inicia quando o servidor Arduino recebe um cliente externo, e
finaliza quando o recurso (neste caso a lâmpada) é acessado e o Arduino encerra a conexão com
este cliente.
50
Para realização dos cálculos, utilizou-se a função millis(), da biblioteca Time do
Arduino. A função millis() quando invocada retorna o número de milissegundos deste que o
Arduino iniciou sua execução. A Figura 31 apresenta os resultados obtidos da avaliação de
tempo de execução em milissegundos necessários para desempenhar cada uma das sete
funcionalidades.
Tempo para executar tarefa
Tarefa desempenhada
Controlar luz remotamente
328,82
Enviar temperatura e umidade para servidor
1517,55
Twittar
320,45
Controlar luz por voz
1506,45
Exibir temperatura
3987,36
Exibir hora
5300,09
Exibir data
5180,09
0
1000
2000
3000
4000
5000
6000
Tempo de execução (milissegundos)
Figura 31 - Tempo para executar cada funcionalidade da lâmpada inteligente. Fonte: Compilado pelo
autor.
Pode-se observar que, apesar das restrições de processamento comum em
microcontroladores, todas as funcionalidades foram desempenhadas em tempos aceitáveis, não
havendo delays que afetam a experiência do usuário.
As funcionalidades para exibir hora, data e temperatura foram as que necessitaram de
maior tempo para executar, cerca de 5 segundos para as duas primeiras e 4 segundos para a
última. Estes valores já eram esperados, já que tais informações precisam ser exibidas no
display LED por um certo período de tempo, para serem perceptíveis ao usuário.
As quatro primeiras funcionalidades que consistem em controlar a luz remotamente e
por comandos de voz, twittar, e enviar temperatura e umidade para o servidor, que fazem uso
de requisições HTTP sejam elas para envio ou recebimento de informações, foram
desempenhadas em tempos aceitáveis.
51
5 CONCLUSÕES
Este trabalho teve como objetivo desenvolver uma aplicação Web para a Web das
Coisas, como também um objeto inteligente conectado à Internet, para integração do mesmo à
Web, a fim de permitir o acesso de suas funcionalidades como recursos Web.
O alcance destes objetivos contribuem com a ideia da Internet das Coisas que visa
conectar qualquer objeto do dia a dia à Internet, assim como, com o paradigma da Web das
Coisas, sendo este, o próximo passo da IoT. Onde, uma vez conectado objetos à Internet podese agora ter uma representação na Web do mesmo. Com o intuito de acessar seus recursos
através de páginas Web.
Portanto, primeiramente foi desenvolvido um objeto físico, que consiste em uma
lâmpada inteligente construída com hardware Arduino. A lâmpada responde à comandos de
voz, possui sensores e está conectada à Internet.
Em seguida, desenvolveu-se uma aplicação Web para a Web das Coisas. Através desta
aplicação o usuário pode criar uma representação na Web do objeto físico, para que em seguida,
possa controlar e visualizar, gerenciar e armazenar os dados gerados em tempo real pelo objeto
inteligente.
Para o desenvolvimento de ambos, foram aplicados os princípios REST juntamente
como a Arquitetura Orientada a Recursos, em que utiliza-se protocolos e padrões já em uso na
Web, tais como HTTP e URIs, para a integração na Web da lâmpada inteligente. Atendendo
desta forma, ao objetivo da WoT, que consiste em proporcionar a conexão dos diversos objetos
inteligentes do cotidiano à Web, tornando-os parte da mesma.
Sendo assim, a aplicação Web foi desenvolvida com o framework Rails, uma vez que,
implementa os princípios REST nos conceitos da ROA na camada controller. Assim como, a
lâmpada inteligente utiliza HTTP e URI para dispor acesso as suas funcionalidades e também
fornecer os dados gerados pelos sensores.
Devido a simplicidade do REST como também da larga disponibilização de bibliotecas
e clientes HTTP, os resultados obtidos na avaliação de desempenho das funcionalidades em
tempo de execução na plataforma Arduino, demonstraram baixo consumo de memória e tempo
para desempenhar cada tarefa (fatores críticos quando se trata de microcontroladores)
evidenciando assim, os benefícios do uso de REST nos conceitos ROA, em dispositivos
embarcados presentes no ambiente da Web das Coisas.
52
5.1 Trabalhos futuros
A plataforma para a Web das Coisas desenvolvida neste trabalho poderá contribuir com
os demais trabalhos nesta área, permitindo que objetos físicos sejam disponibilizados na Web.
Apesar da aplicação desenvolvida atender aos objetivos esperados, que consistem na criação de
uma representação na Web de objetos físicos, permitindo seu controle, e armazenamento,
gerenciamento e exibição das informações oferecidas pelo mesmo ao usuário. Sugere-se a
implementação de mecanismos de segurança que impeçam que requisições HTTP não
autorizadas sejam processadas tanto pelo Arduino, como pela aplicação Web.
Ainda em relação a aplicação Web, seria interessante a realização de testes de
escalabilidade, a fim de verificar seu desempenho ao integrar diversos objetos inteligentes
enviando requisições HTTP para o servidor da aplicação.
Neste trabalho, realizou-se separadamente uma avaliação de desempenho no que referese à quantidade de memória consumida e o tempo necessário para execução de todas as
atividades implementadas para a lâmpada inteligente. Sendo deixado para trabalhos futuros, a
avaliação do consumo de energia necessária para executar cada uma destas sete funcionalidades
disponíveis. A fim de estimar e otimizar, o tempo de vida útil da bateria.
Também seria interessante o desenvolvimento da funcionalidade que permita que o
Arduino realize automaticamente tarefas agendadas previamente pelo usuário. Como por
exemplo, acender e apagar a lâmpada em dias ou horários específicos determinados pelo
usuário. Sendo o agendamento destas tarefas feita através da aplicação Web e gerenciadas pelo
Arduino através do módulo RTC.
53
REFERÊNCIAS BIBLIOGRÁFICAS
ABOUT SQLite. Disponível em: < http://www.sqlite.org/about.html >. Acesso em: 23 de
Janeiro de 2014.
Arduino, 2005. Disponível em: <http://arduino.cc/>. Acesso em: 06 de Novembro de 2013.
B2CQSHOP. Arduino Mega 2560 Crazy kit Manual. China: 30 de Outubro de 2011.
BANZI, Massimo. Getting Started with Arduino. 2. ed. California: O´Reilly, 2011.
BRADLEY, J. et al. (2013a) Embracing the Internet of Everything To Capture Your Share
of $14.4 Trillion. White Paper. Cisco Systems, San Jose - CA. Disponível em: <
http://www.cisco.com/web/about/ac79/docs/innov/IoE_Economy.pdf >. Acesso em: 20 de
Janeiro de 2014.
BRADLEY, J. et al. (2013b) Internet of Everything (IoE) Value Index. White Paper. Cisco
Systems,
San
Jose
CA.
Disponível
em:
<
http://www.cisco.com/web/about/ac79/docs/innov/IoE-Value_Index_White-Paper.pdf
>.
Acesso em: 23 de Janeiro de 2014.
D-ROBOTICS. DHT11 Humidity & Temperature Sensor, Reino Unido, 30 de Julho de
2010. Disponível em: < http://www.micro4you.com/files/sensor/DHT11.pdf >. Acesso em: 30
de Março de 2014.
EVANS, Dave. The Internet of Things: How the Next Evolution of the Internet Is
Changing Everything. Abril de 2011.
EVRYTHNG. How Web Object Technology Is Putting Every Physical Thing On The Web.
White Paper, 2012.
FIELDING, R. T. (2000) “Architectural Styles and the Design of Network-based Software
Architectures”, Doctoral dissertation, University of California, Irvine.
FRANÇA, Thiago Cruz de. Infraestrutura de Software Baseada na Web das Coisas para
Integração de Redes de Sensores Sem Fio à Web. Universidade Federal do Rio de Janeiro,
2011.
GAMBLE, Adam; JUNIOR, Cloves; BARAZI, Rida. Beginning Rails 4. 3 Third Edition.
United States of America: Apress, 2013.
GONZÁLEZ, Laureano. Nuevas Oportunidades de Negocio en la Internet de las Cosas.
Madrid, 09 de Maio de 2013. Palestra Cisco Connect. Disponível em: <
https://www.youtube.com/watch?v=k30qqIkqiQI >. Acesso em: 05 de Fevereiro de 2014.
GUINARD, Dominique; TRIFA, Vlad; MATTERN, Friedemann; WILDE, Erik. From the
Internet of Things to the Web of Things: Resource Oriented Architecture and Best
Practices. Institute for Pervasive Computing, ETH Zurich. SAP Research, Zurich. School of
Information, UC Berkeley. 2010.
54
KARIMI, Kaivan; ATKINSON, Gary. What the Internet of Things (IoT) Needs to Become
a Reality. Estados Unidos, Junho de 2013.
KING, Terry. Sensor Shield, 07 de Março de 2014. Disponível em: <http://arduinoinfo.wikispaces.com/page/diff/SensorShield/494320008>. Acesso em: 29 de Março de 2014.
KRINGEN, Erik. Embedding an Arduino on Prototyping Board, 6 de jul. 2013. Disponível
em: <http://www.mycontraption.com/embedding-an-arduino-on-prototyping-board/>. Acesso
em: 24 de Março de 2014.
MARGOLIS, Michael. Arduino Cookbook. 2. ed. Califórnia: O’Reilly Media, 2011.
MAXIM. DS1302 Trickle-Charge Timekeeping Chip. Estados Unidos: Califórnia, 2 de dez.
de 2008. Disponível em: < http://datasheets.maximintegrated.com/en/ds/DS1302.pdf >. Acesso
em: 30 de Março de 2014.
MILROY, Andrew. Ubiquitous Connectivity and the Internet of Things. 12 de Novembro
de 2013. Disponível em: < http://www.frost.com/reg/blog-display.do?id=3161648 >. Acesso
em: 19 de Fevereiro de 2014.
MITCHELL, Shane; VILLA, Nicola; STEWART-WEEKS, Martin; LANGE, Anne. The
Internet of Everything for Cities. White Paper. Cisco Systems, San Jose - CA, 2013.
Disponível
em:
<
http://www.cisco.com/web/about/ac79/docs/ps/motm/IoE-SmartCity_PoV.pdf >. Acesso em: 17 de Janeiro de 2014.
Nabaztag, 2009. Disponível em: <http://www.nabaztag.com/brasil/index.html>. Acesso em: 5
de Novembro de 2013.
OLSSON, Tony. Arduino Wearables. 1. ed. New York, Apress, 2012.
O´SULLIVAN, Dan e IGOE, Tom. Physical Computing. Physical Computing: Sensing and
Controlling the Physical World with Computers. 1. ed. Estados Unidos: Thomson, 2004.
Poken, 2010. Disponível em: <http://www.poken.com/>. Acesso em: 5 de Novembro de 2013.
RFC
2616. Hypertext Transfer Protocol - HTTP/1.1. 1999. Disponível em <
http://tools.ietf.org/html/rfc2616 >. Acesso em: Março de 2014.
RICHARDSON, Roberto Jarry. Pesquisa social: métodos e técnicas. et al. São Paulo: Atlas,
1985.
RILEY, Mike. Programming Your Home. United States of America: Pragmatic
Programmers, 2012.
RUBY, Sam; THOMAS, Dave; HANSSON, David. Agile Web Development with Rails.
Fourth Edition. United States of America: Pragmatic Programmers, 2012.
SANDOVAL, J. (2009) “RESTful Java Web Services, Master core REST concepts and
create RESTful web services in Java”, Packt Publishing BIRMINGHAM – MUMBAI,
páginas. 20-81.
55
SCHMIDT, Maik. Arduino: A Quick-Start Guide. United States of America: Pragmatic
Programmers, 2011.
SEEED. Electronic Brick Shield, 1 de Agosto de 2011. Disponível em: <
http://www.seeedstudio.com/wiki/index.php?title=Electronic_Brick_Shield>. Acesso em: 29
de Março de 2014.
SHEN, Wilson. Voice Recognition Module V2, Hong Kong, 4 de Março de 2013. Disponível
em:
<http://www.elechouse.com/elechouse/images/product/Voice%20Recognition
%20Module/Manual.pdf >. Acesso em: 29 de Março de 2014.
Sun SPOT World, Disponível em: <http://www.sunspotworld.com/>. Acesso em: 5 de
Novembro de 2013.
TILKOV, Stefan. A Brief Introduction to REST. InfoQ, 10 de Dezembro de 2007. Disponível
em: < http://www.infoq.com/articles/rest-introduction >. Acesso em: 28 de Janeiro de 2014.
WITCHALLS, Clint. The Internet of Things business index: A quiet revolution gathers
pace. Report. The Economist Intelligence Unit Limited, Junho de 2013. Disponível em: <
http://www.arm.com/files/pdf/eiu_internet_business_index_web.pdf >. Acesso em: 15 de
Fevereiro de 2014.
WIZNET. W5100 Datasheet Version 1.2.4, Coréia, 20 de Setembro de 2011. Disponível em:
< http://www.wiznet.co.kr/UpLoad_Files/ReferenceFiles/W5100_Datasheet_v1.2.4.pdf >.
Acesso em: 25 de Março de 2014.
Download