Вы находитесь на странице: 1из 19

Instituto Politécnico de Viseu

Escola Superior de Tecnologia e Gestão de Lamego

Relatório Intermédio

Lamego, maio de 2018


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

Relatório Intermédio
IoT Tracking System

Engenhara Informática e Telecomunicações

Autores:

João Cardoso nº2651

Eduardo Rocha nº3262

Lamego, maio de 2018


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

Índice

Desenvolvimento do projeto ........................................................................................................ 4


Obtenção de dados do acelerómetro ....................................................................................... 4
Obtenção de dados do GPS ....................................................................................................... 6
Armazenamento interno de dados num ficheiro local e leitura de dados a partir desse
ficheiro ...................................................................................................................................... 9
Envio de dados para uma cloud IoT ............................................................................................ 13
Bibliografia .................................................................................................................................. 19
Instituto Politécnico de Viseu
Escola Superior de Tecnologia e Gestão de Lamego

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

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


2. Construção para obtenção de dados do GPS;
3. Armazenamento e leitura de dados num ficheiro local e de dados a partir desse
ficheiro;
4. Envio de dados para uma cloud IoT.

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
três visualizações de texto, cada uma respetiva para cada coordenada espacial (fig. 1). Na
secção do ID, define-se o ID no visualizador de texto para que, no código em Java, se poder
corresponder a uma das instâncias criadas (como se descreve a seguir). 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

Figura 1 - Visualizações de texto para as coordenadas espaciais


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 três variáveis do tipo


“TextView”, designadas por “xText”, “yText” e “zText” (fig. 2) que, respetivamente,
permitissem designar as coordenadas espaciais x, y e z. De seguida, interligou-se estas três
instâncias aos respetivos ID’s de cada visualização de texto (fig. 3).

Figura 2 - Instanciação das três variáveis

Figura 3 - Interligação das três variáveis às respetivas visualizações de texto

De seguida, 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. 4). 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.

Figura 4 - Instanciação de um serviço de sensores e do sensor

Na figura 5, como se pode ver, 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()”.

Figura 5 - Inicializaçã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
Instituto Politécnico de Viseu
Escola Superior de Tecnologia e Gestão de Lamego

do sensor, neste caso, as coordenadas espaciais do acelerómetro. Como se pode ver na figura
6, para cada coordenada, imprime-se para cada visualizador de texto o valor de cada
coordenada 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.

Figura 6 - Impressão dos dados do acelerómetro

Executando a aplicação num emulador virtual (fig. 7), pode-se observar que os valores
são sempre fixos, isto devido ao facto de se estar a testar a aplicação num emulador e não
num dispositivo móvel.

Figura 7 - teste da aplicação do acelerómetro

Obtenção de dados do GPS


Nesta fase, o que se fez em primeiro foi criar um novo projeto no Android Studio, do
qual, no ficheiro de extensão XML, definiu-se 2 visualizações de texto para se poder visualizar
as coordenadas da localização de uma pessoa, dentro das quais são duas: latitude e longitude,
duas coordenadas GPS (fig. 8).
Instituto Politécnico de Viseu
Escola Superior de Tecnologia e Gestão de Lamego

Figura 8 - Visualizações de texto para a latitude e a longitude

Como se pode ver na figura anterior, para ser mais fácil a identificação, mudou-se o ID
de cada “TextView”, formatou-se a “TextView” para poder visualizar o conteúdo, assim como
aparece como defeito o texto que define cada coordenada.

No código principal da aplicação, definiu-se uma constante inteira como


“REQUEST_LOCATION” como um pedido de localização para estar sempre ativada para o
funcionamento do sistema. Define-se também um gestor de localização da
“LocationManager”, classe essa que fornece acesso aos serviços de localização do sistema (fig.
9). Estes serviços, por sua vez, permitem às aplicações obter atualizações periódicas da
localização do aparelho.

Figura 9 - Arivação de serviço móvel

Depois, inicializa-se o gestor da localização para se poder controlar as atualizações da


localização do aparelho no mapa (fig. 10).

Figura 10 - Inicialização do gestor de localização

Depois de se inicializar o gestor de localização, com o método “getLocation()”, se a


aplicação tiver o acesso negado, não é possível exibir os dados. Caso contrário, declara-se uma
variável local designada por “location” da classe”Location” que representa a localização
geográfica que se pretende obter. Se a localização não tiver valores, indica-se que não é
possível encontrar a localização correta; caso contrário, instanciam-se duas variáveis de ponto
flutuante que representam a latitude e a longitude, exibindo-as no ecrã (fig. 11).
Instituto Politécnico de Viseu
Escola Superior de Tecnologia e Gestão de Lamego

Figura 11 - Método "getlocation()"

Para se poder ter permissão para se poder aceder-se aos serviços de localização,
utilizou-se o método “onRequestPermissionResult()”, do qual permite obter permissão para o
acesso aos serviços de localização (fig. 11). Primeiro, passa-se como parâmetro as informações
para permissão de acesso aos serviços de localização e, de seguida, se houver permissão,
obtém-se a localização geográfica.

Figura 12 - Método "onRequestPermissionResult()"

Na figura 13, mostra-se a execução da aplicação para GPS. Como se pode ver, como
esta aplicação é executada num emulador para Android (não sendo um dispositivo físico), não
é possível exibir os valores de latitude e longitude.

Figura 13 - Execução da aplicação de GPS num emulador


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) (fig. 14). Em primeiro, o que se fez foi, no
método “onSensorChanged()”, modificar a visualização da informação das coordenadas para
que, em vez de se poder visualizar em três linhas distintas, se pudesse visualizar numa para se
poder armazenar no ficheiro. A modificação também se fez a partir do ficheiro
“activity_main.xml” para que, em vez de ser três visualizações de texto, pudesse ser apenas
ser uma para visualização das coordenadas do sensor para facilitar o processo de
armazenamento dos mesmos (fig. 15).

Figura 14 - Mudanças no "onSensorChanged()"

Figura 15 - Definição de uma única visualização de texto

De seguida, definiram-se dois botões, um para gravar os dados e outro para ler os
dados (fig. 16).

Figura 16 - Definição de botões~


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

No botão de escrita de dados, o que se fez foi, em primeiro, definir uma função que
permitisse passar como parâmetro o nome do ficheiro e o conteúdo a ser escrito (fig. 17). De
seguida, o que se fez foi, na parte da escuta do botão de gravação (fig. 18), invocar a função
definida e passar como parâmetros o ficheiro localizado na diretoria da memória interna do
dispositivo (fig. 19) e o conteúdo da visualização do texto.

Figura 17 - Função para armazenar dados do acelerómetro

Figura 18 - Escuta para execução do botão quando este é premido

Figura 19 - Instanciação para criação do ficheiro

Na parte do botão de leitura, definiu-se uma função que permitisse ler os dados a
partir do ficheiro (fig. 20). Aquando da leitura, o ficheiro de seguida é formatado
automaticamente, o que permite, por sua vez, a inclusão de novos. Nesta fase, como se
pretende obter apenas a primeira linha sem apagar o ficheiro todo, ainda se está a trabalhar
nessa parte. De seguida, para a atuação do botão de leitura, definiu-se uma tarefa que permite
efetuar a operação do botão (fig. 21), sendo que a operação demora 5 segundos, para depois
poder ser mostrada por uma nova visualização de texto (visualização essa definida para
visualização de conteúdo do ficheiro) (fig. 23). Passado 5 segundos, a visualização de texto
mostra o conteúdo mostrado (fig. 22).
Instituto Politécnico de Viseu
Escola Superior de Tecnologia e Gestão de Lamego

Figura 20 - Leitura de dados

Figura 21 - Definição da thread


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

Figura 22 - Exibição de texto

Figura 23 - Visualizador de texto para exibição de dados do ficheiro

Por fim, pondo o programa a correr através de um simulador, o resultado a ser


observado encontra-se demonstrado na seguinte figura (fig. 24).

Figura 24 - Execução do programa num simulador

Para se poder aceder ao ficheiro na memória interna, utiliza-se a aplicação Android


Device Monitor (fig. 25) para se poder aceder e verificar a execução dos resultados.
Instituto Politécnico de Viseu
Escola Superior de Tecnologia e Gestão de Lamego

Figura 25 - Localização do ficheiro

Envio de dados para uma cloud IoT


Nesta fase, o que se fez foi aplicando o seguinte procedimento:

1. Criou-se uma conta no serviço da IBM Cloud para se poder ter acesso às
funcionalidades da cloud;
2. Já tendo acesso à plataforma IoT, de seguida, o que se fez foi em clicar na opção
“Create Resource” para de poder aceder à criação de aplicações (fig. 26).

Figura 26 - Cloud IoT

3. De seguida, no catálogo, sob a plataforma, clicou-se na opção “Internet of Things


Platform Starter” para se poder criar um novo serviço (fig. 27).
Instituto Politécnico de Viseu
Escola Superior de Tecnologia e Gestão de Lamego

Figura 27 - Catálogo

4. Depois, criou-se o nome da aplicação ao qual se pretendeu utilizar (fig. 28).

Figura 28 - Aplicação de serviço IoT

5. Após criar-se a aplicação, automaticamente o serviço permitiu, por sua vez a criação
de duas conexões, em que no qual se clicou na segunda para se estabelecer a conexão
(fig. 29).

Figura 29 - Conexões

6. De seguida, clicou-se na opção “Launch” para se poder abrir o painel IoT (fig. 30).
Instituto Politécnico de Viseu
Escola Superior de Tecnologia e Gestão de Lamego

Figura 30 - Menu de entrada

7. De seguida, chegando ao menu principal, tem-se o painel principal aonde, no canto


superior direito, tem-se o ID da organização aonde os dispositivos a conectarem-se
vão ser disponibilizados (fig. 31).

Figura 31 - Painel principal

8. Depois, na secção dos dispositivos, cria-se qualquer dispositivo para se poder fazer a
conexão à plataforma. Nessa secção, adiciona-se um novo dispositivo e define-se o
tipo de dispositivo a conectar. Um “tipo de dispositivos” define-se como um conjunto
de dispositivos que partilham as mesmas características como, por exemplo,
fornecem o mesmo tipo de dados de sensores. Neste caso, definiu-se o dispositivo
para se ser “Android” (fig. 32).
Instituto Politécnico de Viseu
Escola Superior de Tecnologia e Gestão de Lamego

Figura 32 - Criação do aparelho

9. Seguidamente, definiu-se os dados confidenciais do dispositivo, como o token de


autenticação e o ID do dispositivo (fig. 33).

Figura 33 - Dados do dispositivo

10. Após definir-se o dispositivo, utilizou-se o código da aplicação do seguinte link:


https://github.com/ibm-watson-iot/iot-starter-for-android. Fazendo o
download do código, no Android Studio construiu-se o apk da aplicação e pôs-
se a executar no compilador.
11. Ao ser executada, aparece a seguinte interface para se poder introduzir as
credenciais definidas do dispositivo (fig. 34).
Instituto Politécnico de Viseu
Escola Superior de Tecnologia e Gestão de Lamego

Figura 34 - Autenticação

12. Após introduzir-se as credenciais, a cloud IoT recebe os dados vindos do sensor, assim
como as informações de texto (figs. 35 e 36).
Instituto Politécnico de Viseu
Escola Superior de Tecnologia e Gestão de Lamego

Figura 35 - Envio de dados


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

Figura 36 - Receção de dados

Bibliografia
 https://www.ibm.com/developerworks/library/iot-mobile-phone-iot-device-bluemix-
apps-trs/index.html;
 https://mitseu.files.wordpress.com/2014/08/java-the-complete-reference-ninth-
editiona4.pdf;
 https://developer.android.com/guide/topics/sensors/sensors_overview;
 https://developer.android.com/guide/components/processes-and-threads;
 https://developer.android.com/guide/topics/location/strategies;

Вам также может понравиться