Você está na página 1de 42

Instituto Politécnico de Viseu

Escola Superior de Tecnologia e Gestão de Lamego

IoT Tracking System

Projeto Final

Lamego, junho de 2018


Instituto Politécnico de Viseu
Escola Superior de Tecnologia e Gestão de Lamego

IoT Tracking System

Projeto Final

LICENCIATURA EM ENGENHARIA INFORMÁTICA E TELECOMUNICAÇÕES

DISCIPLINA DE PROJETO FINAL

Engenharia Informática e Telecomunicações

Orientador: Pedro Osório

Tutor: Paulo Cerqueira

Autores:

João Cardoso nº2651

Eduardo Rocha nº3262

Lamego, junho de 2018


Instituto Politécnico de Viseu
Escola Superior de Tecnologia e Gestão de Lamego

Agradecimentos

Agradece-se ao professor Pedro Osório por nos ter ajudado na orientação do


Projeto Final, por nos ter dado indicações para a concretização do projeto e por nos ter
favorecido um espaço para desenvolvimento das competências. Agradece-se também ao
professor Paulo Cerqueira pela disponibilidade que teve para nos ajudar em certos
pormenores que, sem ele, não seria possível a concretização de certas atividades.
Instituto Politécnico de Viseu
Escola Superior de Tecnologia e Gestão de Lamego

Índice

Introdução ......................................................................................................................... 6

Estado de arte.................................................................................................................... 7

Internet of Things (IoT) – Internet das Coisas .............................................................. 7

Subsistema de Armazenamento Android ............................................................... 15

Socket ..................................................................................................................... 17

Análise / definição do problema ..................................................................................... 21

Elaboração do algoritmo ................................................................................................. 22

Desenvolvimento da aplicação ....................................................................................... 25

Obtenção de dados do acelerómetro ........................................................................... 25

Armazenamento interno de dados num ficheiro local e leitura de dados a partir desse
ficheiro ........................................................................................................................ 28

Envio de dados para um servidor local ....................................................................... 32

Conclusão ....................................................................................................................... 35

Bibliografia ..................................................................................................................... 36

Anexo A: Código da aplicação ....................................................................................... 37

3
Instituto Politécnico de Viseu
Escola Superior de Tecnologia e Gestão de Lamego

Índice de ilustrações

Figura 1 - Diferentes aplicações da IoT(Gubbi, J., Buyya, R., Marusic, S., & Palaniswami,
M., 2013) ........................................................................................................................ 10
Figura 2 - Visão geral do esquema de armazenamento do Android............................... 16
Figura 3 - Funcionamento geral das conexões entre sockets ......................................... 18
Figura 4 - Comunicação entre Socket, sobre o protocolo TCP ...................................... 20
Figura 5 - Ilustração do problema a resolver .................................................................. 21
Figura 6 - Algoritmo que representa a solução do problema ......................................... 22
Figura 7 - Definição do visualizador de texto para exibição dos dados do acelerómetro
........................................................................................................................................ 25
Figura 8 - Instanciação do visualizador de texto ............................................................ 26
Figura 9 - Instanciação da data atual .............................................................................. 26
Figura 10 - Instanciação dos sensores ............................................................................ 26
Figura 11 - Instanciação do acelerómetro....................................................................... 27
Figura 12 - Mudança dos valores dos sensores .............................................................. 27
Figura 13 - Armazenamento de dados num ficheiro local interno ................................. 28
Figura 14 - Localização do ficheiro no dispositivo ........................................................ 28
Figura 15 - Obtenção dos valores do acelerómetro para armazenamento ...................... 28
Figura 16 - Leitura da primeira linha ............................................................................. 29
Figura 17 – Eliminação da primeira linha ...................................................................... 29
Figura 18 - Localização do ficheiro................................................................................ 31
Figura 19 - Fila de dados ................................................................................................ 31
Figura 20 - Classe "Cliente" ........................................................................................... 33
Figura 21 - Envio de dados ............................................................................................. 33
Figura 22 - Receção de dados ......................................................................................... 34

4
Instituto Politécnico de Viseu
Escola Superior de Tecnologia e Gestão de Lamego

Índice de tabelas

Tabela 1- Partições de armazenamento de dados para o Android e partições no flash


interno e cartão SD externo para o telefone Nexus One ................................................ 16

5
Instituto Politécnico de Viseu
Escola Superior de Tecnologia e Gestão de Lamego

Introdução

Este projeto baseia-se no estudo e na exploração da tecnologia IoT, do qual


consiste na implementação de uma aplicação que permite a recolha de dados do
acelerómetro do telemóvel para depois serem enviados para uma plataforma IoT
implementada localmente, permitindo assim fazer a localização do proprietário do
dispositivo móvel. Neste tema, pretende-se, abordar a localização de um indivíduo por
meio de uma plataforma IoT. Tendo em conta que já houve projetos que já foram
implementados com a mesma finalidade, mas sem a utilização da tecnologia IoT.

Os objetivos que se pretendem atingir com a realização do projeto é a recolha de


dados do acelerómetro e do GPS, enviar os dados para uma plataforma IoT local,
estabelecer a conexão com uma plataforma IoT local e fazer o armazenamento local dos
dados num ficheiro.

O motivo de se ter escolhido este tema para o desenvolvimento do Projeto Final


de curso foi pegar em alguns projetos que já se desenvolveram nesta área em unidades
curriculares do curso de Engenharia, como a unidade curricular Sistemas de
Telecomunicações. Este tema permite também expandir os nossos conhecimentos, como
a aquisição de conhecimento de novas linguagens de programação ou o estudo
aprofundado de novas tecnologias. A ideia surgiu com base num trabalho que se fez com
os projetos utilizando o Arduino na unidade curricular anteriormente referida.

Para além disso, é um projeto com uma extrema importância, porque nos nossos
dias a Internet of Things está também a ter uma popularidade crescente devido ao facto
de ser uma tecnologia que permite interligar diversos sensores e que, por seu lado, permite
também ter um grande reconhecimento com base nas aplicações que tem no dia-a-dia.
Este trabalho, por sua vez, pode trazer uma grande contribuição teórica para o
desenvolvimento de outros projetos, ou seja, permite ser o percursor para outros projetos
que se possam a vir ser desenvolvidos nesta área científica.

6
Instituto Politécnico de Viseu
Escola Superior de Tecnologia e Gestão de Lamego

Estado de arte Commented [PO1]: O que vão falar no estado da arte?


Depois de um título devem sempre escrever pelo menos um
parágrafo, pelo menos para elucidar o leitor do que vai poder
ler.
Neste capitulo vamos abordar temas teóricos fundamentais no que diz respeito à
compreensão do funcionamento do projeto elaborado bem como a realização do próprio.
Os temas serão: IoT – Internet of Things, plataforma que permite envio e tratamento de
dados por parte de dispositivos móveis; armazenamento do Android – explicitação dos
tipos de armazenamento disponíveis, características dos mesmos e tipo de
armazenamento usado no projeto; sockets – explicação do que são e como foram usados
no projeto.

Internet of Things (IoT) – Internet das Coisas


A Internet das Coisas - IoT (Internet of Things) – (Souza, S. D. S. C. D. (2017).
Mobile marketing e a internet das coisas.) - é um sistema com capacidade de conectar e
controlar dispositivos. Existem vários conceitos para a definição deste sistema, mas sobre
a perspetiva da ITU (International Telecommunication Union) a IoT é:

“Uma infraestrutura global para a sociedade da informação, permitindo serviços


avançados por meio da interligação das coisas (físicas e virtuais) baseadas na
interoperabilidade das tecnologias de informação e de comunicação existentes e em
evolução. Nota 1: por meio da exploração de capacidade de identificação, captura de
dados, processamento e comunicação, a IoT faz pleno uso das coisas para oferecer
serviços a todos os tipos de aplicações, garantindo o cumprimento dos requisitos de
segurança e privacidade. Nota 2: [...] pode ser compreendida como uma visão com
implicações tecnológicas e sociais.”. (Dias, 2016; p.19)

A Internet das Coisas teve o seu primórdio em 1999 quando Kevin Ashton, numa
palestra, apresentou a ideia de um novo sistema chamado de RFID (identificação por
radiofrequência); em 2004 a HP iniciou testes com a tecnologia de identificação para
rastrear produtos na cadeia produtiva, tornando possível a conexão entre máquinas e
objetos do mundo quotidiano ao mundo digital através da internet.

7
Instituto Politécnico de Viseu
Escola Superior de Tecnologia e Gestão de Lamego

Na perspetiva de Kevin Ashton, a Internet of Things é: “[...] um sistema capaz de


conectar o real e o virtual criando um mundo mais inteligente em diferentes segmentos
da sociedade.”( Dias, 2016) Depois disto surgiram as tecnologias como o EPC Network
Eletronic Produt Code, que englobam os códigos de barras, cartões inteligentes, sensores,
reconhecimento de voz, e dados biométricos, que permite a identificação automática de
pessoas-objetos. Em 2008 surgiu o uso do IP nos objetos e com o avanço tecnológico
desenvolveu-se mais aparelhos inteligentes, como os smartphones, tablets, smartwatches;
com isto em 2009 haviam mais coisas conectadas do que pessoas, o que se tornou um
marco para a Internet of Things; ainda sobre o tema a Cisco IBSG prevê que haverá 50
biliões de dispositivos conectados à Internet até 2020.

Embora o termo Internet of Things seja, agora, cada vez mais usado, não há uma
definição ou compreensão comum hoje sobre o que a IoT realmente engloba. As origens
do termo datam de mais de 15 anos e foram atribuídas ao trabalho dos Laboratórios de
Auto-ID do Instituto de Tecnologia de Massachusetts (MIT) sobre infraestruturas de
identificação por radiofrequência (RFID) em rede (Atzori et al. 2010; Mattern e
Floerkemeier 2010). Desde então, as visões para a Internet das Coisas foram
desenvolvidas e estendidas além do corpo das tecnologias RFID. A União Internacional
de Telecomunicações (UIT), por exemplo, agora define a Internet das Coisas como "uma
infraestrutura global para a Sociedade da Informação, permitindo serviços avançados ao
interligar coisas (físicas e virtuais) com base em tecnologias de informação e
comunicação interoperáveis existentes e em desenvolvimento". '(UIT, 2012).

Segundo Petter Friess, coordenador do Cluster Europeu de pesquisa da Internet


das Coisas ,salientou que “[...] a IoT pode ser definida por uma combinação de
tecnologias e perspetiva sociais. O IoT é um fenómeno de um número constantemente
crescente de objetos interconectados que está gradualmente mudando – e melhorando – a
vida das pessoas” (Marão e Bellinetti, 2013, p.22). “[...] a IoT permite uma recolha de
dados e informação com maior granularidade e maior precisão do que nunca” (Marão e
Bellinetti, 2013, p.9). Este nível de precisão da informação pode ter diversos usos como,
por exemplo, na automatização de residências, na automação de compras, em automóveis,
na recolha de dados para perfil de consumo e até mesmo em sensores corporais que
controlam a nossa saúde.

8
Instituto Politécnico de Viseu
Escola Superior de Tecnologia e Gestão de Lamego

Alguns exemplos de nichos de negócios e aplicações da IoT segundo Dias (2016)


(fig. 1):

- Na tecnologia da informação e comunicação na área da saúde (e-Health) para


melhorar o fluxo de informação por meio eletrónico na prestação de serviços: Fitness,
Bioeletrónica, Cuidados na saúde;

- Transporte inteligente: Notificação das condições do tráfego, controlo inteligente


de rotas, monitorização remoto do veículo, coordenação das rodovias, integração
inteligente das plataformas de transporte;

- Distribuição de energia (smart grid), que são sistemas de distribuição e


transmissão de energia automatizada para aumento da eficiência operacional:
Acompanhamento das instalações, subestações inteligentes, Distribuição de energia
automática, Medições remotas dos relógios;

- Casas inteligentes: Segurança residencial, controlo inteligente dos equipamentos


residenciais, economia de energia, medições remotas do consumo;

- Distribuição e logística: controlo de inventário, gestão na distribuição,


rastreabilidade, plataformas de serviços logísticos públicos, smart e-commerce;

- Segurança Pública: monitorização da segurança pública, monitorização no


transporte de cargas perigosas e químicas, monitorização das estruturas de construções
de utilização pública;

- Indústria e manufatura: controlo de processos de produção, monitorização das


condições ambientais, rastreamento dos produtos, monitorização do ciclo de vida dos
produtos, segurança na manufatura, controlo da poluição, economia de energia;

- Gestão da agricultura e de recursos naturais: utilização dos recursos para a


agricultura, gestão quantitativa no processo da produção, monitorização ambiental para o
cultivo, gestão da qualidade, segurança e rastreabilidade dos produtos agrícolas.

Conforme identificado por Atzori (L. Atzori, A. Iera, G. Morabito, The Internet
of Things: A survey, Comput Netw. 54 (2010) 2787–2805.), a Internet das Coisas pode
ser interpretada em três paradigmas - orientado à Internet (middleware), orientado a coisas

9
Instituto Politécnico de Viseu
Escola Superior de Tecnologia e Gestão de Lamego

(sensores) e orientado a semântica (conhecimento). Embora esse tipo de delimitação seja


necessário devido à natureza interdisciplinar do assunto, a utilidade da IoT pode ser
desencadeada apenas num domínio de aplicação em que os três paradigmas se cruzam.

O presente projeto diz respeito a dois dos três paradigmas descritos acima, são
eles o paradigma orientado a coisas visto que são adquiridos dados de sensores de um
smartphone. O outro paradigma é o orientado à internet (middleware), sendo os dados
adquiridos enviados para um socket via internet, apesar de nesta parte não existir um
tratamento de dados específico.

Figura 1 - Diferentes aplicações da IoT(Gubbi, J., Buyya, R., Marusic, S., & Palaniswami, M., 2013)

Elementos IoT

Apresentamos uma taxonomia que ajudará a definir os componentes necessários


para a Internet das Coisas de uma perspetiva de alto nível. Taxonomias específicas de
cada componente pode ser encontrado em outro lugar. Existem três componentes IoT que
permitem comunicação ubíqua sem interrupções (Gubbi, J., Buyya, R., Marusic, S., &
Palaniswami, M. (2013)):

10
Instituto Politécnico de Viseu
Escola Superior de Tecnologia e Gestão de Lamego

a) Hardware - constituído por sensores, atuadores e hardware de comunicação


incorporado;

b) Middleware - ferramentas de armazenamento e computação on demand para


análise de dados;

c) Apresentação - nova visualização fácil de compreender as ferramentas de


interpretação que podem ser amplamente acedidas em diferentes plataformas e que
podem ser projetadas para diferentes aplicações. Nesta secção, discute-se algumas
tecnologias nestas categorias, que irão compor os três componentes mencionados acima.

Identificação por radiofrequência (RFID)


A tecnologia RFID é um grande avanço no paradigma de comunicação
incorporada que permite o design de microchips para comunicação de dados sem fio.
Ajudam na identificação automática de qualquer coisa a que estejam ligados, agindo
como um código de barras eletrónico. As etiquetas RFID passivas não são alimentadas
por bateria e usam o poder do sinal de interrogação do leitor para comunicar o ID ao leitor
de RFID. Isto resultou em muitas aplicações, particularmente na gestão de negócios e
cadeia de recursos. As aplicações podem ser encontradas no transporte (substituição de
bilhetes, adesivos de registo) e em aplicações de controle de acesso. As tags passivas são
usadas atualmente em muitos cartões bancários e tags de requisição que estão entre as
primeiras implantações globais. Os leitores de RFID ativos têm o seu próprio
fornecimento de bateria e podem instanciar a comunicação. Das várias aplicações, a
principal aplicação de tags RFID ativos é em contentores portuários para monitorização
de cargas.

Redes de Sensores Sem Fio (WSN)


Os avanços tecnológicos recentes em circuitos integrados de baixa potência e
comunicações sem fio disponibilizaram dispositivos em miniatura eficientes, de baixo
custo e de baixo consumo de energia para uso em aplicações de sensoriamento remoto. A
combinação desses fatores melhorou a viabilidade da utilização de uma rede de sensores
composta por um grande número de sensores inteligentes, permitindo a recolha,
processamento, análise e disseminação de informações valiosas, reunidas numa variedade
de ambientes. O RFID ativo é quase o mesmo que os nós de extremidade inferior com
capacidade e armazenamento de processamento limitados. Os desafios científicos que

11
Instituto Politécnico de Viseu
Escola Superior de Tecnologia e Gestão de Lamego

devem ser superados para realizar o enorme potencial das RSSF’s são substanciais e
multidisciplinares por natureza.

Os dados do sensor são compartilhados entre nós sensores e enviados para um


sistema distribuído ou centralizado para análise. Os componentes que compõem a rede de
monitoramento da WSN incluem:

a) Hardware da WSN - Normalmente, um nó (hardware principal da WSN)


contém interfaces de sensores, unidades de processamento, unidades de transcetor e fonte
de alimentação. Quase sempre, eles são compostos de vários conversores A / D para a
interface do sensor e os sensores mais modernos têm a capacidade de se comunicar
usando uma banda de frequência, tornando-os mais versáteis;

b) Pilha de comunicação de RSSF - Espera-se que os nós sejam implementados


de maneira ad hoc para a maioria das aplicações. Projetar uma topologia, um roteamento
e uma camada MAC apropriados é essencial para a escalabilidade e a longevidade da rede
implementada. Os nós em um WSN precisam se comunicar entre si para transmitir dados
em um ou vários saltos para uma estação base. As saídas de nó, e consequente vida útil
degradada da rede, são frequentes. A pilha de comunicação no nó deve ser capaz de
interagir com o mundo externo através da Internet para atuar como um gateway para a
sub-rede WSN e para a Internet;

c) Middleware - Um mecanismo para combinar infraestrutura cibernética com


uma arquitetura orientada a serviços (SOA) e redes de sensores para fornecer acesso a
recursos de sensores heterogéneos de maneira independente da implementação [17]. Isto
é baseado na ideia de isolar recursos que podem ser usados por várias aplicações. É
necessário um middleware independente de plataforma para o desenvolvimento de
aplicações de sensores, como uma arquitetura de web de sensor aberto (OSWA). A
OSWA é construída sobre um conjunto uniforme de operações e representações de dados
padrão, conforme definido no Método de Capacitação da Web do Sensor (SWE) pelo
Open Geospatial Consortium (OGC);

d) Agregação segura de dados - Um método de agregação de dados eficiente e


seguro é necessário para prolongar a vida útil da rede, bem como garantir dados confiáveis
coletados de sensores. A falha do nó é uma característica comum das RSSF’s, a topologia

12
Instituto Politécnico de Viseu
Escola Superior de Tecnologia e Gestão de Lamego

de rede deve ter a capacidade de se curar. Garantir a segurança é fundamental, pois o


sistema é automaticamente ligado aos atuadores e proteger os sistemas contra intrusos
torna-se muito importante.

Esquemas de endereçamento
A capacidade de identificar unicamente as "Coisas" é fundamental para o sucesso
da IoT. Isto não apenas nos permitirá identificar de forma exclusiva bilhões de
dispositivos, mas também controlar dispositivos remotos pela Internet. Os poucos
recursos mais críticos da criação de um endereço exclusivo são: exclusividade,
confiabilidade, persistência e escalabilidade.

Todos os elementos que já estão conectados e aqueles que serão conectados,


devem ser identificados por sua identificação, localização e funcionalidades exclusivas.
O IPv4 atual pode suportar até certo ponto onde um grupo de dispositivos sensores
coabitantes possa ser identificado geograficamente, mas não individualmente. Os
atributos da Internet Mobility no IPV6 podem aliviar alguns dos problemas de
identificação de dispositivos; no entanto, a natureza heterogénea de nós sem fio, tipos de
dados variáveis, operações simultâneas e confluência de dados de dispositivos agrava
ainda mais o problema.

O funcionamento persistente da rede para canalizar o tráfego de dados de forma


onipresente e implacável é outro aspeto da IoT. Embora o TCP / IP cuide desse
mecanismo roteando de maneira mais confiável e eficiente, da origem ao destino, a IoT
enfrenta um gargalo na interface entre o gateway e os dispositivos sem fio do sensor.

Além disto, a escalabilidade do endereço do dispositivo da rede existente deve ser


sustentável. A adição de redes e dispositivos não deve prejudicar o desempenho da rede,
o funcionamento dos dispositivos, a confiabilidade dos dados através da rede ou o uso
efetivo dos dispositivos a partir da interface do utilizador.

Para se resolver estes problemas, o sistema Uniform Resource Name (URN) é


considerado fundamental para o desenvolvimento da IoT. O URN cria réplicas dos
recursos que podem ser acedidos por meio do URL. Com grandes quantidades de dados
espaciais sendo coletados, muitas vezes é muito importante aproveitar os benefícios dos
metadados para transferir as informações de um banco de dados para o utilizador através

13
Instituto Politécnico de Viseu
Escola Superior de Tecnologia e Gestão de Lamego

da Internet. O IPv6 também oferece uma ótima opção para aceder os recursos de maneira
única e remota. Outro desenvolvimento crítico na abordagem é o desenvolvimento de um
IPv6 leve que permitirá o endereçamento de eletrodomésticos de maneira única.

As redes de sensores sem fio (considerando-as como blocos de construção da IoT),


que são executadas em uma pilha diferente da Internet, não podem possuir pilha IPv6
para endereçar individualmente e, portanto, será necessária uma sub-rede com um
gateway com URN. Com Isto em mente, precisamos de uma camada para endereçar
dispositivos sensores pelo gateway relevante. No nível de sub-rede, o URN dos
dispositivos sensores pode ser os IDs exclusivos, em vez de nomes amigáveis ao
utilizador, e uma tabela de consulta no gateway para endereçar o dispositivo. Além dIsto,
no nível do nó, cada sensor terá um URN (com números) para os sensores a serem
endereçados pelo gateway. Toda a rede agora forma uma rede de conectividade de
utilizadores (de alto nível) a sensores (de baixo nível) endereçáveis (através de URN),
acessíveis (por meio de URL) e controláveis (por meio do URC).

Armazenamento analítico de dados


Um dos resultados mais importantes deste campo emergente é a criação de uma
quantidade de dados sem precedentes. O armazenamento, a propriedade e a expiração dos
dados tornam-se problemas críticos. A Internet consome até 5% da energia total gerada
hoje e, com esses tipos de requisições, com certeza aumentará ainda mais. Assim, os data
centers que funcionam com energia recolhida e que são centralizados garantirão
eficiência energética e confiabilidade. Os dados devem ser armazenados e usados de
maneira inteligente para monitorização e atuação inteligentes. É importante desenvolver
algoritmos de inteligência artificiais que possam ser centralizados ou distribuídos com
base na necessidade. Novos algoritmos de fusão precisam de ser desenvolvidos para
entender os dados recolhidos. Métodos de aprendizagem de máquina temporal não-
lineares e de última geração baseados em algoritmos evolutivos, algoritmos genéticos,
redes neurais e outras técnicas de inteligência artificial são necessários para se obter
decisões automatizadas. Estes sistemas apresentam características como
interoperabilidade, integração e comunicação adaptativa. Eles também têm uma
arquitetura modular, tanto em termos de projeto de sistema de hardware quanto de
desenvolvimento de software, e geralmente são muito adequados para aplicações IoT.

14
Instituto Politécnico de Viseu
Escola Superior de Tecnologia e Gestão de Lamego

Visualização
A visualização é fundamental para um aplicativo IoT, pois isto permite a interação
do utilizador com o ambiente. Com os recentes avanços nas tecnologias de tela sensível
ao toque, o uso de tablets e telefones inteligentes tornou-se muito intuitivo. Para que uma
pessoa secular se beneficie plenamente da revolução da IoT, é necessário criar uma
visualização atraente e fácil de entender. À medida que nos movemos de telas 2D para
3D, mais informações podem ser fornecidas ao utilizador de maneira significativa para
os consumidores. Isto também permitirá que os formuladores de políticas convertam
dados em conhecimento, o que é crítico na rápida tomada de decisões. A extração de
informações significativas de dados brutos não é trivial. Isto engloba tanto a deteção de
eventos quanto a visualização dos dados brutos e modelados associados, com informações
representadas de acordo com as necessidades do utilizador final.

Subsistema de Armazenamento Android

A maioria dos dispositivos móveis é fornecida com um armazenamento em flash


interno, um slot para cartão SD externo e uma quantidade limitada de RAM. Além disso,
alguns dispositivos (por exemplo, o telefone LG G2X) também têm uma partição SD não
removível dentro do telefone; esse armazenamento ainda é tratado como externo (Kim,
H., Agrawal, N., & Ungureanu, C. (2012)).

A figura 2 mostra a NAND bruta interna e o armazenamento flash externo num


telefone Google Nexus One. O armazenamento em flash interno contém todas as partições
importantes do sistema, incluindo partições para o carregador de inicialização e kernel,
recuperação, configurações do sistema, aplicações do sistema pré-instaladas e dados de
aplicações instaladas pelo utilizador. O armazenamento externo é usado principalmente
para armazenar conteúdo do utilizador, como ficheiros de mídia (ou seja, músicas, filmes
e fotografias), documentos e imagens de backup. A tabela 1 apresenta a funcionalidade
das partições em detalhes; essa configuração de armazenamento é bastante típica em
dispositivos Android.

15
Instituto Politécnico de Viseu
Escola Superior de Tecnologia e Gestão de Lamego

Figura 2 - Visão geral do esquema de armazenamento do Android

Tabela 1- Partições de armazenamento de dados para o Android e partições no flash interno e cartão SD
externo para o telefone Nexus One

As aplicações podem armazenar configurações e dados no armazenamento interno


do dispositivo, bem como no cartão SD externo. O Android usa a base de dados SQLite
como principal meio de armazenamento de dados estruturados. O SQLite é um
mecanismo de base de dados transacional que é leve, ocupando uma pequena quantidade
de armazenamento em disco e memória; é assim popular em sistemas operativos
embebidos e móveis. As aplicações recebem uma interface bem definida para criar,
consultar e gerir as suas bases de dados; uma ou mais bases de dados SQLite são
armazenadas por aplicação na diretoria “/ data”.

O sistema de ficheiros era tradicionalmente o sistema de ficheiros de escolha para


as várias partições internas, incluindo “/ system” e “/ data”; é leve e otimizado para
armazenamento em flash. Recentemente, o Android fez a transição para o Ext4 como o

16
Instituto Politécnico de Viseu
Escola Superior de Tecnologia e Gestão de Lamego

sistema de ficheiros padrão para estas partições. O Android fornece uma interface
semelhante a um sistema de ficheiros para aceder ao armazenamento externo também,
com o FAT32 como o sistema de arquivos comumente usado em cartões SD por motivos
de compatibilidade.

Dentro deste projeto, opta-se pelo armazenamento em ficheiro interno como sendo
uma opção para armazenar os dados internos dos sensores do telemóvel numa estrutura
de dados designada por fila, como se descreve a seguir.

Socket
“Uma socket é um método de comunicação e troca de mensagens entre processos.
Pode-se que o Uma socket é um método bem antigo para a comunicação de processos em
rede, ele nasceu no UNIX BSD, que é um Sistema Operacional UNIX desenvolvido pela
Universidade de Berkeley, na Califórnia, durante os anos 70 e 80” (Berkeley Software
Distribution), mas devido ao sucesso desta “tecnologia”, diversos outros sistemas
operacionais a “herdaram”. Outras versões do Unix também, incluindo o Linux, Windows
e no Macintosh OS 8 também fazem uso deste sistema.

Uma socket (de Figueiredo, J. A., pág. 22), numa visão mais técnica, é um
mecanismo que faz uma ligação direta entre dois hosts, criando uma conexão e que a
partir daí poderá fazer transferência de dados tantos sobre os protocolos TCP ou UDP.

Uma socket é uma técnica de programação que está na camada de transporte, e


trabalha diretamente com os protocolos TCP ou UDP.

Características das sockets


Para conseguir fazer uma conexão cliente-servidor, o servidor terá que conter uma
socket com uma porta dedicada para receber conexões, cada conexão tem um mecanismo
que permite ao servidor receber varias conexões, criando vários canais ou outras conexões
individuais para que cada cliente faça as suas trocas de dados.

Por estar situado na camada de transporte, ele serve de base para outros protocolos
de comunicação de rede, que podem estar localizados em outras camadas, como por
exemplo, o protocolo HTTP que está situado na camada de aplicação, que em algum
momento quando executado irá executar um Socket para fazer a comunicação, mas isso
fica transparente para o programador. Então de um modo geral qual quer aplicação que

17
Instituto Politécnico de Viseu
Escola Superior de Tecnologia e Gestão de Lamego

faz comunicação em rede irá em algum momento fazer o uso do servidor no seu contexto
geral.

Na comunicação entre processo existe o server que é um socket diferenciado, é


desenvolvido dentro da aplicação que recebe conexões dos clientes e cria uma Socket
comum que irá fazer a comunicação de uma aplicação ou processo especifico. Uma socket
comum é uma via de comunicação direta entre um cliente e servidor na aplicação, que irá
possibilitar a troca de dados.

Cada socket é associado a um tipo de protocolo que pode ser TCP ou UDP. Então
quando uma socket vai ser criado o protocolo de transporte já deve estar associado ao
protocolo desejado.

Normalmente um servidor primeiro “escuta” e “aceita” uma conexão e depois cria


um novo processo para se comunicar com o cliente. Nesse meio tempo ele continua ”a
escutar” pedidos de conexão no processo original.

A figura 3 representa como é feita à conexão entre cliente e servidor de uma forma
bem simples.

Figura 3 - Funcionamento geral das conexões entre sockets

18
Instituto Politécnico de Viseu
Escola Superior de Tecnologia e Gestão de Lamego

Sempre que uma cluster distribuída de estações de trabalho coopera na solução do


aplicativo paralelo distribuído, um sistema de mensagens está envolvido. Os detalhes da
comunicação variam entre os métodos de software, mas fundamentalmente todos os
sistemas de mensagens devem operar de maneira semelhante.

Os sistemas de mensagens estão sujeitos a um conjunto comum de requisitos para


fornecer a capacidade de executar processos simultâneos de execução:

 O código num processo é inerentemente sequencial;


 Um processo deve ser capaz de enviar e receber mensagens;
 Uma operação de envio deve ser síncrona;
 Uma operação de recebimento deve ser assíncrona;
 Um processo deve ter a capacidade de executar criação e alocação de tarefas
dinâmicas;
 Mensagens devem poder ser criadas e destruídas dinamicamente;

Quando um processo, diga-se, processo um, envia uma mensagem para um


processo, processo dois, se sob controle explícito do programador não, o seguinte deve
acontecer:

 O processo um deve preparar um buffer de envio;


 O processo número um deve incluir as informações no buffer de envio;
 O processo um deve iniciar um envio;
 O processo um envia o buffer;
 O processo dois recebe o buffer;
 O processo dois descompacta as informações do buffer recebido;
 O processo dois executa os cálculos apropriados na informação;
 O processo dois prepara um buffer de envio;
 O processo dois empacota a nova informação no buffer de envio;
 O processo dois envia o buffer, etc.

Uma socket é, portanto, um elo ou uma via bidirecional de comunicação entre dois
programas ou dois processos, com o propósito de fazer a ligação de redes de
computadores juntamente com aplicações. Uma socket também é uma abstração

19
Instituto Politécnico de Viseu
Escola Superior de Tecnologia e Gestão de Lamego

computacional que de uma forma direta e capaz de mapear uma porta de transporte (TCP
ou UDP) juntamente com o endereço de rede.

Uns dos objetivos gerais do socket é a comunicação entre processos na rede, que
basicamente significa transmitir uma mensagem de um processo de uma determinada
máquina para outro processo em outra máquina, que inclusive, poderá estar
geograficamente separada. Para que essa via de conexão aconteça e as máquinas troquem
mensagens, é preciso que o socket contenha uma porta e um endereço IP, da máquina em
que está sendo executado.

Figura 4 - Comunicação entre Socket, sobre o protocolo TCP

A figura 4 mostra as chamadas de Socket writen e read, mas na programação pode-


se usar outras chamadas Socket como a chamada send e receive, que fazem o mesmo
papel, mas com um melhor controlo sobre transmissão de dados.

O Socket de um cliente envia uma mensagem para um IP e uma ”porta” que será
do servidor, e só poderá fazer a conexão entre processos e receber as mensagens, se o
socket estiver associado a esse endereço IP e a essa porta.

Pode ser usado um socket para enviar e receber mensagens, pois quando é
estabelecida a conexão entre dois processos e criado uma via bidirecional, que como foi
falado que pode receber e enviar usando essa via.

20
Instituto Politécnico de Viseu
Escola Superior de Tecnologia e Gestão de Lamego

Análise / definição do problema

O problema principal em que o projeto se vai basear é o seguinte: como é que se


faz o armazenamento dos dados dos sensores internos e como é que se realiza o
processamento do envio da informação a partir do ficheiro. Para se resolver este
problema, o que se pode fazer é o seguinte (fig. 5):

 Implementa-se umas sockets para se processar um envio de dados (neste caso,


para uma plataforma IoT local);
 No ficheiro, processa-se o armazenamento dos dados numa fila (estrutura de
dados FIFO);
 O ficheiro de dados é armazenado internamente no dispositivo.

Figura 5 - Ilustração do problema a resolver

21
Instituto Politécnico de Viseu
Escola Superior de Tecnologia e Gestão de Lamego

Elaboração do algoritmo

A partir desta solução, o problema foi divido em 6 sub-problemas, segundo o


método top-down decomposition:

 Leitura dos sensores: efetuar a leitura dos dados dos sensores do telemóvel através
da instanciação de variáveis que permitam fazer a sua leitura;
 Comunicação com a plataforma IoT Watson;
 Envio de dados para a plataforma IoT: o envio dos dados é feito através de um
manipulador que permite pegar na mensagem e enviá-la diretamente para a
plataforma;
 Gravação local de dados: implementação de uma função para gravar dados em
ficheiro privado;
 Implementação de uma fila: os dados são armazenados automaticamente num
ficheiro em forma de uma fila, em que os dados vão sendo inseridos no fundo do
conteúdo do ficheiro, e por sua vez são retirados do início do ficheiro para
posterior envio;
 Envio dos dados do ficheiro para a plataforma: o envio de dados do ficheiro para
uma plataforma desenvolvida em socket;

De seguida, nesta fase do projeto, o que se fez foi um algoritmo (fig, 6) que
permitisse implementar a solução do problema a ser resolvido.

Figura 6 - Algoritmo que representa a solução do problema

22
Instituto Politécnico de Viseu
Escola Superior de Tecnologia e Gestão de Lamego

A conceção deste algoritmo foi feita com base num software designado por Visual
Paradigm. Este algoritmo obedece ao paradigma da Programação Orientada a Objetos
que, do qual, permite conter dados na forma de campos (atributos) e códigos na forma de
procedimentos (métodos).

A classe designada por “Atividade Principal” é a classe que permite designar a


atividade principal onde o funcionamento da aplicação se centrará mais. Tem como
atributos:

 “Caminho_ficheiro”: permite designar o ficheiro no dispositivo dentro do


armazenamento interno onde os dados do telemóvel serão armazenados;
 “Texto”: permite disponibilizar os dados do acelerómetro no ecrã;
 “Sensor”: permite instanciar o acelerómetro do telemóvel;
 “GestorDoSensor”: tem como objetivo controloar a atividade de registo do
sensor;
 “Botão”: permite instanciar o botão que, do qual, permite mudar de página na
aplicação;
 “Manipulador”: permite enviar dados para um servidor implementando o envio;
 “DataAtual”: define a data em que os dados do acelerómetro são armazenados.

Como métodos, a classe “Atividade Principal” designa:


 “Inicialização()”: permite, nesta situação, inicializar as variáveis de controlo
para a execução da aplicação;
 “abrirOutraAtividade()”: permite fazer com que se abra uma outra página
distinta;
 “executávelEnvioDados()”: permite efetuar o envio de dados, inicializando uma
classe “Cliente” (discutida posteriormente);
 “atualizarSensor()”: permite obter automaticamente os dados do acelerómetro;
 “atualizarPrecisão()”: permite atualizar os valores dos dados do acelerómetro
aquando da mudança da precisão;
 “salvaguardarFicheiros()”: permite o armazenamento automático dos dados do
ficheiro, inserindo várias linhas para criar uma fila no ficheiro, tendo como
dados as linhas do ficheiro;
 “lerFicheiro()”: permite ler a primeira linha do ficheiro, removendo-a;
 “eliminar()”: permite apagar a primeira linha do ficheiro.

A classe “Cliente” é a classe que permite fazer o envio dos dados para um servidor
local. Tem como atributos:

23
Instituto Politécnico de Viseu
Escola Superior de Tecnologia e Gestão de Lamego

 “Socket”: ponto final de fluxo de comunicação entre processos através de uma


rede de computadores;
 “Insersor”: permite enviar a mensagem e inicializa-a para envio;
 “mensagem”: texto que permite implementar a mensagem a ser enviada;
 “executável”: manipulador que permite efetuar o envio da mensagem;

Tem como métodos:


 “Cliente (Executável c)”: construtor da classe;
 “execuçãoEmFundo()”: implementa o envio da mensagem automaticamente
para o servidor, tendo o endereço IP e a porta de conexão.

24
Instituto Politécnico de Viseu
Escola Superior de Tecnologia e Gestão de Lamego

Desenvolvimento da aplicação

O desenvolvimento da aplicação definiu-se por quatros passos da seguinte forma:

1. Construção de uma solução para obtenção de dados do acelerómetro;


2. Armazenamento de dados num ficheiro local e leitura de dados a partir desse
ficheiro;
3. Envio de dados para um servidor local.

Estes procedimentos foram todos executados no software Android Studio.

Obtenção de dados do acelerómetro


Para se obter os dados do acelerómetro, no ficheiro “activity_main.xml”, definiu-
se uma visualização de texto (fig. 7), possuindo os valores das três coordenadas espaciais
detetadas pelo acelerómetro. Na secção do ID, define-se o ID no visualizador de texto
para que, no código em Java, se possa corresponder à instância criada. Em termos de
comprimento e largura, definem-se como “wrap_content” para se poderem visualizar os
valores do acelerómetro. A secção “text” permite definir, por defeito, o texto que será
disponibilizado na saída aquando do arranque da aplicação. Para além das três
coordenadas espaciais, também se disponibiliza a data em que os dados do acelerómetro
foram obtidos.

Figura 7 - Definição do visualizador de texto para exibição dos dados do acelerómetro

25
Instituto Politécnico de Viseu
Escola Superior de Tecnologia e Gestão de Lamego

De seguida, no código de programação em Java, instanciou-se uma variável do


tipo “TextView”, que, do qual, se podia ligar à variável criada no código XML para poder
ser manipulada no código em Java (fig. 8).

Figura 8 - Instanciação do visualizador de texto

Ao mesmo tempo, também se criou uma variável para se obter o registo da data
atual em que os dados são armazenados no ficheiro (fig. 9).

Figura 9 - Instanciação da data atual

Depois, passou-se para a parte da obtenção de valores do acelerómetro. Primeiro,


ainda no código em Java, o que se fez foi criar duas instâncias, uma que permitisse utilizar
serviços do sensor e outra que permite instanciar um determinado sensor (fig. 10). A
classe “SensorManager”, utilizada para a primeira instância, fornece vários métodos para
aceder e listar sensores, fazer o registo ou não de várias escutas de eventos de sensores, e
adquirir informação da orientação; também fornece várias constantes de sensores que são
usadas para reportar a precisão do sensor, estabelecer taxas de aquisição de dados e
calibrar sensores. A classe da segunda instância, “Sensor”, fornece vários métodos que
permitem determinar as capacidades de um sensor (fig. 10).

Figura 10 - Instanciação dos sensores

26
Instituto Politécnico de Viseu
Escola Superior de Tecnologia e Gestão de Lamego

Como se pode ver na seguinte figura, primeiro, para se poder identificar os


sensores disponíveis no telemóvel, teve-se que obter uma referência para o serviço de
sensores, invocando o método “getSystemService()” da classe “SensorManager”,
passando como parâmetro o argumento “SENSOR_SERVICE”. De seguida, com o
método “getDefaultSensor()”, define-se se o tipo de sensor – neste caso, o acelerómetro
– e passa-se a constante “TYPE_ACCELEROMETER” como parâmetro para se definir
o sensor sendo um acelerómetro. Por fim, o atraso de dados padrão
“SENSOR_DELAY_NORMAL” é especificado quando o método “registerListener()” é
invocado. A taxa de amostragem controla o intervalo no qual os eventos do sensor são
enviados para a aplicação por meio do método de retorno de chamada
“onSensorChanged()” (fig. 11).

Figura 11 - Instanciação do acelerómetro

O método “onSensorChanged()” é invocado quando ocorre um novo evento do


sensor, ou seja, quando se obtém uma nova leitura do sensor com os mesmos valores
exatos. Para isso, tem-se como parâmetro o objeto “event” da classe “SensorEvent” que
recolhe os dados do sensor, neste caso, as coordenadas espaciais do acelerómetro. Para
cada coordenada, imprime-se o seu respetivo valor detetado pelo acelerómetro, sendo que
“event.values[0]” refere-se à coordenada X, “event.values[1]” refere-se à coordenada Y
e event.values[2] refere-se á coordenada Z. Também se inclui a data para se indicar em
que hora é que os dados foram armazenados no ficheiro (fig. 12).

Figura 12 - Mudança dos valores dos sensores

27
Instituto Politécnico de Viseu
Escola Superior de Tecnologia e Gestão de Lamego

Armazenamento interno de dados num ficheiro local e leitura de dados


a partir desse ficheiro
Nesta fase, o que se pretende é efetuar o armazenamento de dados no ficheiro local
num formato de fila (estrutura de dados FIFO). Na escrita de dados, define-se uma função
que permite passar como parâmetro o nome do ficheiro e o conteúdo a ser escrito. Esta
função, por seu lado, permite escrever a primeira linha recebida e mudar automaticamente
de linha. Encontra-se definida no método “onSensorChanged()” onde passa como
parâmetro o nome do ficheiro (a diretoria do ficheiro) e os dados recolhidos do sensor
(figs. 13, 14 e 15).

Figura 13 - Armazenamento de dados num ficheiro local interno

Commented [PO2]: Este texto está muto pequeno e não


econsegue ver. Deviam utiliar sempe a mesma fomatação
para o código.
Figura 14 - Localização do ficheiro no dispositivo

Figura 15 - Obtenção dos valores do acelerómetro para armazenamento

28
Instituto Politécnico de Viseu
Escola Superior de Tecnologia e Gestão de Lamego

Na parte da leitura, definiu-se uma função que permitisse ler os dados a partir do
ficheiro. Aquando da leitura, a primeira linha é lida e apagada automaticamente,
permitindo dar espaço a outras linhas para poderem ser escritas. Para se fazer a remoção
automática de apenas uma linha, definiu-se uma função que permite apagar a linha do
topo da fila, permitindo assim ler a seguinte (figs. 16 e 17).

Figura 16 - Leitura da primeira linha

FIGURA 17 – ELIMINAÇÃO DA PRIMEIRA LINHA

29
Instituto Politécnico de Viseu
Escola Superior de Tecnologia e Gestão de Lamego

O Android oferece várias opções para guardar os dados da aplicação de forma


persistente. A escolha depende das necessidades especificas como, por exemplo, se os
dados devem ser privados ou públicos e/ou o espaço de armazenamento requerido. As
opções de armazenamento e/ou o espaço de armazenamento requerido. As opções de
armazenamento de dados usam o sistema de ficheiros e podem ser organizadas da
seguinte forma (Queirós, 2014, p.109):

 Shared Preferences – dados primitivos em pares chave-valor;


 Sistema de ficheiros – dados privados armazenados na memória interna do
dispositivo ou dados públicos em suporte externo (por exemplo, cartão de
memória);
 Base de dados – dados estruturados em base de dados (por exemplo, SQLite).

Como referido acima, no caso deste projeto, foi usada a segunda opção,
impossibilitando assim que o ficheiro seja aberto por aplicações externas. Não utilizamos
a terceira opção visto implicar que o dispositivo que fosse correr a aplicação em causa
tivesse como requisito obrigatório ou uma partição dupla do NAND flash do Android ou
um cartão SD instalado. Por outro lado, não utilizamos uma base de dados pois neste caso
não existiu tempo suficiente, e por outro lado também não achamos que houvesse
necessidade para tal.

Apesar de não ser possível visualizar o conteúdo do ficheiro, nos testes á aplicação,
com um emulador de android, foi possível extrair o ficheiro do emulador e ver o seu
conteúdo.

A localização do ficheiro (fig. 18) que permite o armazenamento local de dados é


oculto, o que significa que não é acessível por qualquer aplicação do telemóvel. Como o
armazenamento é recorrido com base a um sistema de ficheiros, sendo a localização na
memória interna, não é possível consultar os dados porque está em modo privado, o que
significa que só pode ser acedido pela própria aplicação.

30
Instituto Politécnico de Viseu
Escola Superior de Tecnologia e Gestão de Lamego

Figura 18 - Localização do ficheiro

A implementação da fila para armazenamento de dados dos sensores encontra-se


apresentada na figura 19.

Figura 19 - Fila de dados

31
Instituto Politécnico de Viseu
Escola Superior de Tecnologia e Gestão de Lamego

Envio de dados para um servidor local


Nesta fase do projeto, o que se fez foi implementar sockets para se poder realizar
o envio de dados para um servidor local. Nesta situação, implementa-se o envio de dados
para uma aplicação local no próprio computador que permita receber os próprios dados.

Primeiro, criou-se uma classe designada “Cliente” (fig. 20) que estendesse a classe
abstrata “AsyncTask”, que permite o uso correto e fácil do thread da interface do
utilizador. Esta classe permite executar operações em segundo plano e publicar resultados
na thread da interface do utilizador sem precisar de manipular threads e/ou
manipuladores.

Com esta classe, cria-se uma socket que permite enviar os dados para um servidor
local utilizando o endereço IP desse servidor e a porta de conexão. Através da instância
da classe “PrintWriter”, imprime-se representações formatadas dos objetos para uma
stream de saída de texto. A instância imprime o a mensagem a ser enviada no socket que,
por sua vez, vai ser automaticamente enviada.

Um manipulador (instância da classe “Handler”) permite enviar e processar


objetos das classes “Message” e “Runnable” associados à “MessageQueue” de uma
“thread”. Cada instância do Manipulador está associada a um único encadeamento e à fila
de mensagens desse encadeamento. Quando se cria um novo manipulador, ele é vinculado
à fila de threads / mensagem das threads que o está criando - a partir desse ponto, ele
entregará mensagens e executáveis para essa fila de mensagens e as executará à medida
que saírem da fila de mensagens.

O construtor da classe, nesta situação, tem como parâmetro uma instância do tipo
“Runnable” que permite implementar uma thread que automaticamente permite efetuar
o envio da mensagem para o servidor.

32
Instituto Politécnico de Viseu
Escola Superior de Tecnologia e Gestão de Lamego

Figura 20 - Classe "Cliente"

Já no código da classe “MainActivity”, implementa-se um executável automático


que permite ir ao ficheiro extrair a primeira linha de dados e, de seguida, enviá-la
diretamente para o servidor. O envio processa-se automaticamente e é feito em intervalos
de 1 segundo. Para se efetuar o envio automático de segundo a segundo, declara-se o
objeto “mHandler” da classe “Handler” (fig. 21).

Figura 21 - Envio de dados

Uma vez a aplicação estando a ser executada, as linhas são enviadas


automaticamente de segundo a segundo para o servidor, sem interrupções, sendo que

33
Instituto Politécnico de Viseu
Escola Superior de Tecnologia e Gestão de Lamego

depois, por sua vez, o servidor recebe as linhas e disponibiliza-as através de uma página
Web (fig. 22). Nesta situação, está-se a enviar mesmo para uma plataforma IoT local, do
qual é um trabalho desenvolvido no âmbito da unidade curricular de Sistemas
Distribuídos, tendo em conta que, neste caso, os dados, na plataforma IoT local, são
recolhidos por uma socket que, por sua vez, armazena-os num ficheiro local e,
posteriormente, são disponibilizados na página Web do servidor aplicacional.

Figura 22 - Receção de dados

34
Instituto Politécnico de Viseu
Escola Superior de Tecnologia e Gestão de Lamego

Conclusão

Com o tema e os assuntos abordados neste documento, conseguiu-se compreender


que a conexão para uma plataforma IoT pode ser feita através do uso de sockets.. A
implementação de uma estrutura de dados FIFO, como o caso da fila, permite fazer o
armazenamento dos dados de uma forma dinâmica, mantendo assim os dados em circulação
constante em que a entrada e a saída de dados na fila ocorre simultaneamente.

Permite ser, também, por sua vez, um projeto que contribui no estudo da
implementação de uma plataforma IoT, o que faz com que a tecnologia Internet of Things
tenha um maior desenvolvimento, embora apresente a principal limitação de funcionar
apenas em redes locais. Para futuros projetos, um desafio a colocar seria experimentar a
implementação de dados para uma plataforma IoT por meio da tecnologia de rede 5G como
forma a expandir mais o conhecimento nesta área.

Neste relatório, no entanto, não foi possível implementar as coordenadas


geográficas de latitude e longitude, uma vez que a sua implementação, juntamente com
os processos que decorriam no envio, punha em causa o bom funcionamento da aplicação.

No início, escolheu-se a plataforma Watson IoT como forma de enviar dados,


processar e fazer-se o processamento dos dados, por meio do protocolo MQTT. Contudo,
e por causa da margem de tempo e dos conhecimentos que se tinha, optou-se por uma
abordagem diferente: por meio das sockets enviar os dados para uma plataforma IoT local
(trabalho prático desenvolvido no âmbito da unidade curricular de Sistemas Distribuídos),
como sendo uma alternativa pertinente no desenvolvimento do nosso projeto.

A partir deste projeto, recomenda-se, para projetos futuros que possam utilizar
este projeto como referência, que se possa acrescentar outros sensores, inclusive sensores
periféricos como dispositivos físicos de Arduino. Para além disso, sugere-se também a
conexão do smartphone para plataformas IoT online, independentemente das diferentes
plataformas que existirem.

35
Instituto Politécnico de Viseu
Escola Superior de Tecnologia e Gestão de Lamego

Bibliografia

 de Figueiredo, J. A. O. COMPARATIVO DA COMUNICAÇÃO DE DADOS


EM DISPOSITIVOS MÓVEIS: WEB SERVICES E SOCKETS.
 DIAS, Renata Rampim de Freitas. Internet das Coisas sem mistérios: uma nova
 Gubbi, J., Buyya, R., Marusic, S., & Palaniswami, M. (2013). Internet of Things
(IoT)
inteligência para os negócios. São Paulo: Netpress Books, 2016.
 Kim, H., Agrawal, N., & Ungureanu, C. (2012). Revisiting storage for
smartphones. ACM Transactions on Storage (TOS), 8(4), 14.
 M.K. McKusick, M.J. Karels, Keith Sklower, Kevin Fall, Marc Teitelbaum and
Keith Bostic (1989). Current Research by The Computer Systems Research Group
of Berkeley. Proc. European Unix Users Group.
 MARÃO, Gabriel Antonio; Bellinetti, José Vidal. Inspirando a Internet das
Coisas.
 Queirós, Ricardo (2014), Desenvolvimento de Aplicações Profissionais em
ANDROIDTM, 109
 Souza, S. D. S. C. D. (2017). Mobile marketing e a internet das coisas.
 Wortmann, F., & Flüchter, K. (2015). Internet of Things. Business & Information
Systems Engineering, 57(3), 221-224.

36
Instituto Politécnico de Viseu
Escola Superior de Tecnologia e Gestão de Lamego

Anexo A: Código da aplicação

Cliente.java

package com.example.eduardorocha.escreverlerdados;

import android.os.AsyncTask;
import android.os.Handler;

import java.io.IOException;
import java.io.PrintWriter;
import java.net.Socket;

public class Cliente extends AsyncTask<String,Void,Void> {


Socket socket;
PrintWriter writer;
String msg;
Runnable c;
Handler h = new Handler();
Cliente(Runnable c) {this.c=c;}

@Override
protected Void doInBackground(String... params) {
try {
msg = params[0];
socket = new Socket("192.168.1.66", 8000);
writer = new PrintWriter(socket.getOutputStream());
writer.write(msg);
writer.flush();
writer.close();
} catch(IOException e) {
e.printStackTrace();
}
return null;
}
}

37
Instituto Politécnico de Viseu
Escola Superior de Tecnologia e Gestão de Lamego

MainActivity.java

import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.os.Bundle;
import android.os.Handler;
import android.support.v7.app.AppCompatActivity;
import android.widget.Button;
import android.widget.TextView;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.util.Date;

public class MainActivity extends AppCompatActivity implements


SensorEventListener {

private static String FILE_PATH =


"/data/data/com.example.eduardorocha.escreverlerdados/tet8.txt";
private TextView Text;
private Sensor mySensor;
private SensorManager SM;
private Button button;
private Handler mHandler = new Handler();
Date today = new Date();

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
SM = (SensorManager) getSystemService(SENSOR_SERVICE);

mySensor = SM.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);

SM.registerListener((SensorEventListener) this, mySensor,


SensorManager.SENSOR_DELAY_NORMAL);

Text = (TextView) findViewById(R.id.gravarDados);


mToastRunnable.run();

private Runnable mToastRunnable = new Runnable() {


@Override
public void run() {
Cliente ct = new Cliente(this);
ct.execute(readFile(FILE_PATH));
mHandler.postDelayed(this, 1000);
}

38
Instituto Politécnico de Viseu
Escola Superior de Tecnologia e Gestão de Lamego

};

@Override
public void onSensorChanged(SensorEvent event) {
Text.setText("X: " + event.values[0] + "Y: " + event.values[1]
+ "Z: " + event.values[2] + " " + today.toString());
saveFile(FILE_PATH, Text.getText().toString());
}

@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {

public void saveFile(String file, String text) {


try {
BufferedWriter bw = new BufferedWriter(new
FileWriter(file, true));
bw.flush();
bw.write(text);
bw.newLine();
bw.close();
} catch (Exception e) {
e.printStackTrace();
}
}

public String readFile(String filename) {


String text = "";
try {
BufferedReader br = new BufferedReader(new
FileReader(filename));
text = br.readLine();
int numLines = 1;
int startLine = 1;
delete(filename, startLine, numLines);
br.close();
} catch (Exception e) {
e.printStackTrace();
}

return text;
}

void delete(String filename, int startline, int numlines) {


try {
BufferedReader br = new BufferedReader(new
FileReader(filename));

StringBuffer sb = new StringBuffer("");

int linenumber = 1;
String line;

while ((line = br.readLine()) != null) {


if (linenumber < startline || linenumber >= startline

39
Instituto Politécnico de Viseu
Escola Superior de Tecnologia e Gestão de Lamego

+ numlines)
sb.append(line + "\n");
linenumber++;
}
br.close();

FileWriter fw = new FileWriter(new File(filename));

fw.write(sb.toString());
fw.close();
} catch (Exception e) {

}
}

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>


<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">

<TextView
android:id="@+id/gravarDados"
android:layout_width="match_parent"
android:layout_height="51dp"
android:layout_alignParentEnd="true"
android:layout_alignParentTop="true"
android:layout_marginEnd="0dp"
android:layout_alignParentRight="true"
android:layout_marginRight="0dp" />

</RelativeLayout>

40
Instituto Politécnico de Viseu
Escola Superior de Tecnologia e Gestão de Lamego

41

Você também pode gostar