De acordo com as Leis 12.965/2014 e 13.709/2018, que regulam o uso da Internet e o tratamento de dados pessoais no Brasil, ao me inscrever na newsletter do portal DICAS-L, autorizo o envio de notificações por e-mail ou outros meios e declaro estar ciente e concordar com seus Termos de Uso e Política de Privacidade.


Android things - aplicativos IoT padronizado para indústria 4.0

Colaboração: Alessandro de Oliveira Faria

Data de Publicação: 04 de novembro de 2017

Primeiramente, agradeço o trabalho em conjunto a Mackenzie no LabSec (Laboratório de Pesquisas em Segurança Cibernética cujo orientadora é minha mentora Prof. Dra Inês Brosso). Pois todo trabalho de pesquisa e inovação, somente avança quando o espírito colaborativo lidera os ideais de todo o projeto.

Com a evolução da internet das coisas, inúmeros Linux embarcados surgem a todo momento. Entretanto com um elevado números de devices com seus respectivos drivers, aplicativos e outros, torna-se complexo gerenciar as correções de vulnerabilidades. Isto é muito grave, pois estes equipamentos destinados para o mercado de IoT tendem gerenciar nossos eletrodomésticos, armazenar dados sensíveis e administrar uma gama de informações sem precedentes na história da tecnologia.

A tecnologia da Internet das Coisas surgiu para revolucionar o nosso dia a dia, pois nasceu para conectar tudo e todos na rede mundial de computadores. Ou seja, geladeiras, televisão, micro-ondas, relógios, alarmes, ar condicionado, termostatos, máquinas de lavar, carros, enfim TUDO! O conceito vai além de conectar todos os devices e sim torná-los mais eficientes em função da comunicação.

Com o lançamento de um suposto sistema operacional "universal", na teoria, os equipamentos estão menos vulneráveis. Pois quando uma determinada correção surge, todos dos dispositivos deveriam se beneficiar deste patch. Ou seja minimiza-se ao máximo o retrabalho e permite uma evolução da indústria 4.0 mais segura e padronizada. Pois se um determinador hardware for substituído por questões estratégica, o código legado seria no mínimo 100% compatível com a nova plataforma de hardware.

Então em 2016 surge o Android Things, um sistema operacional baseado no Brillo, uma versão minimalista do Android para executar em hardware simples e/ou modesto voltado para a Internet das Coisas. Mas a real diferença é que o Android Things utiliza o legado de ferramentas Android (como Android Studio, Google Play Services e outros), o que torna muito acelerado a adoção da plataforma.

Atualmente o Android Things é compatível com as plataformas a seguir:

  • Intel Edison (descontinuado)
  • Intel Joule (descontinuado)
  • NXP i.MX7D Pico
  • NXP i.MX6UL Argon
  • NXP i.MX6UL Pico
  • Raspberry Pi 3

Eu penso que um dos maiores problemas das câmeras, roteadores e outros dispositivos modestos, é a falta de atualização. Assim tornando vulneráveis os sistemas Linux, e por consequência, tornam-se alvo de ataques DDOS, que atualmente ultrapassa a 1 terabit por segundo.

A arquitetura conforme a figura acima é muito semelhante a plataforma convencional. Percebe-se a presença da API Things Support Library. Cuja função permite integrar os aplicativos com uma nova gama de hardware denominados dispositivos não móveis.

Diferenças entre o Intel Edsion e Raspberrypi

RaspberryPi: basta gravar a imagem com qualquer ferramenta e utiliza-lo, o Android Things para esta versão possui interface gráfica.

Intel Edson: necessário o uso de ferramenta flash tools para gravação de firmware, não possui interface gráfica.

Instalação no Intel Edison

Por que o Intel Edison se ele foi descontinuado? Bom, nesta vida quem pode mais, também pode menos. Então se soubermos instalar no Intel Edson sem saída de monitor e interface gráfica, fundamentaremos conceitos para instalar em qualquer outro dispositivo.

ATENÇÃO: antes de iniciar deixo claro que o leitor deste post é responsável por qualquer problema que venha a acontecer com o seu aparelho, sendo de sua inteira responsabilidade e risco a utilização das instruções a seguir.

Download dos requisitos

Os requisitos para este artigo são as ferramentas:

Conforme a imagem acima, no lado esquerdo da placa, utilize a porta micro-USB superior (3), ou seja, a mais próxima do Swith.

ATENÇÃO: apenas e somente se desejar monitorar todo processo ligue também a segunda porta micro-USB. Não precisaremos conectar a fonte de energia, a posição do Swith (1) deve estar na posição virado PARA BAIXO e próximo das portas micro-USB. Para ativar o modo de upload do firmware, devemos manter o botão FW (2) durante a inicialização do equipamento.

Agora no modo UPLOAD, se optou conectar o cabo a segunda porta micro-USB utilize o comando a seguir para monitorar o console e boot do Intel Edison:

  sudo screen /dev/ttyUSB0 115200

Instale a ferramenta Platform Flash Tool Lite da Intel:

  # rpm -ivh platformflashtoollite_5.8.3.0_linux_x86_64.rpm

Para efetuar a instalação, lembre-se de colocar a placa do Intel Edison no modo UPLOAD FIRMWARE conforme mencionado anteriormente. E digite "platformflashtoollite" para utilizar o modo gráfico bastando apenas selecionar a imagem recentemente baixada:

  # /usr/bin/platformflashtoollite

Ou o comando no modo console conforme o exemplo a seguir:

# platformflashtoollitecli -c non_os -f androidthings_edison_devpreview_3.zip -l 3
05/06/17 21:37:45.039  INFO   : Intel(R) Platform Flash Tool Lite V 5.8.3.0 x64 (build on Friday February 24th 2017, 05:21:16 UTC)
05/06/17 21:37:45.040  INFO   : Using xFSTK Downloader version: 2.0.0
05/06/17 21:37:45.044  INFO   : Using DFU Downloader version: 0.8.4
05/06/17 21:37:45.044  INFO   : Using DnX Firmware Downloader version: 1.0.0.0 (API: 3.0.0.1108(DBG))
	"	"		"	"		"	"		"	"
	"	"		"	"		"	"		"	"
	"	"		"	"		"	"		"	"
	"	"		"	"		"	"		"	"
	"	"		"	"		"	"		"	"
05/06/17 21:38:19.630  INFO   : [Port 3] Command `Notify Run 'flash-all.sh' to flash and boot the device.` succeed
05/06/17 21:38:19.630  INFO   : [Port 3] Flash success (duration=00:00:34.440)
05/06/17 21:38:19.642  INFO   : Platform Flash Tool Lite exited with code 0

Se habilitou com o comando screen o monitoramento do console anteriormente, teremos as seguintes informações durante a atualização do firmware/bootloader:

******* PSH loader *******
PCM page cache size = 192 KB
Cache Constraint = 0 Pages
Arming IPC driver ..
Adding page store pool ..
PagestoreAddr(IMR Start Address) = 0x04899000
pageStoreSize(IMR Size)          = 0x00080000

*** Ready to receive application ***


Edison IA32 CPU Firmware
Copyright (C) 1999-2016, Intel Corporation. All rights reserved.

IA32 FW:    CPU 3.1 (INTELFDK) [2016.02.24:15.14]
Other FW:   OEM 3.1 (OEMHOOKS); SCU BS 00B0.0003, RT 00B0.0049; C 0000.0045
            PSH B018.2B2B; IFWI 00ED.1D0E; PL 824
Hardware:   SOC B0 800; 406A8; 50504:292929:505:4E4E


Starting OS recovery

OS recovery complete
Resetting platform

Após gravar o bootloader (ou firmware), o sistema reiniciará, para verificar se tudo esta funcionando corretamente, execute o comando a seguir:

  # fastboot devices
  1b2f21d4e1fe0129    fastboot

Agora descompacte o arquivo Androidthings_edison_devpreview_3.zip, entre na pasta recém criada e execute o comando flash-all para gravar a imagem do Android.

# ./flash-all.sh
target reported max download size of 117440512 bytes
sending 'gpt' (33 KB)...
OKAY [  0.010s]
writing 'gpt'...
OKAY [  0.148s]
	"	"		"	"		"	"		"	"
	"	"		"	"		"	"		"	"
	"	"		"	"		"	"		"	"
	"	"		"	"		"	"		"	"
OKAY [  0.195s]
writing 'oem_b'...
OKAY [  0.864s]
finished. total time: 2.122s

Successfully flashed your Edison.
rebooting...

finished. total time: 0.101s

Se habilitou com o comando screen o monitoramento do console, novamente teremos as seguintes informações durante a atualização do firmware/bootloader:

******************************
PSH KERNEL VERSION: b0182b2b
                WR: 20104000
******************************

SCU IPC: 0x800000d0  0xfffce92c

PSH miaHOB version: TNG.B0.VVBD.0000000c

microkernel built 11:24:08 Feb  5 2015

******* PSH loader *******
PCM page cache size = 192 KB
Cache Constraint = 0 Pages
Arming IPC driver ..
Adding page store pool ..
PagestoreAddr(IMR Start Address) = 0x04899000Starting download of 34304 bytes

downloading of 34304 bytes finished
fb_mmc_flash_write: updating MBR, Primary and Backup GPT(s)
........ success
Erasing blocks 1024 to 9216 due to alignment
........ erased 4194304 bytes from 'u-boot'
Starting download of 384180 bytes
..
downloading of 384180 bytes finished
Flashing Raw Image
........ wrote 384512 bytes to 'u-boot'
Starting download of 10625024 bytes
..........................................................................
	"	"		"	"		"	"		"	"
	"	"		"	"		"	"		"	"
	"	"		"	"		"	"		"	"
	"	"		"	"		"	"		"	"
downloading of 61493312 bytes finished
Flashing Sparse Image
........ wrote 61493248 bytes to 'gapps_b'
Starting download of 4788468 bytes
....................................
downloading of 4788468 bytes finished
Flashing Sparse Image
........ wrote 4788224 bytes to 'oem_a'
Starting download of 4788468 bytes
....................................
downloading of 4788468 bytes finished
Flashing Sparse Image
........ wrote 4788224 bytes to 'oem_b'
resetting ...

Se tudo foi atualizado com sucesso a ferramenta ADB apresentara o seguinte resultado:

   adb devices
  List of devices attached
  Edisonb74661ad    device

@Pronto! Vamos para a configuração do Android Things!

Configurações do Android Things

Configurando a rede WIFI:

# adb shell am startservice \
-n com.google.wifisetup/.WifiSetupService \
-a WifiSetupService.Connect \
-e ssid [NOME-DA-SUA-REDE] \
-e passphrase [senha-sua-rede]

Testando a conexão com Internet:

# adb shell
edison:/ $ ping www.uol.com.br
PING homeuol-ib.uol.com.br (200.221.2.45) 56(84) bytes of data.
64 bytes from home.uol.com.br (200.221.2.45): icmp_seq=1 ttl=51 time=20.9 ms
64 bytes from home.uol.com.br (200.221.2.45): icmp_seq=2 ttl=51 time=21.2 ms
64 bytes from home.uol.com.br (200.221.2.45): icmp_seq=3 ttl=51 time=25.3 ms
^C
—- homeuol-ib.uol.com.br ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2003ms
rtt min/avg/max/mdev = 20.993/22.551/25.386/2.011 ms

Configurando o ADB para rede sem fio:

No Android Things:

edison:/ # setprop service.adb.tcp.port 5555
edison:/ # stop adbd
[ 97.923317] init: Service 'adbd' is being killed...
 | [ 97.929712] dwc3-device dwc3-device.1: request f54bf900 was not queued to ep0out
 | [ 97.938557] init: Service 'adbd' (pid 149) killed by signal 9
 | [ 97.938688] init: Service 'adbd' (pid 149) killing any children in process group

edison:/ # start adbd
[ 103.799226] init: Starting service 'adbd'...
 | [ 103.809732] read descriptors
 | [ 103.809802] read descriptors

Na sua estação:

# adb kill-server
# adb tcpip 5555
# adb connect [IP-DO-ANDROID-THINGS]
# adb kill-server
# adb connect [IP-DO-ANDROID-THINGS]

Pronto, agora basta efetuar os comandos adb shell, ou adb install...

  # adb shell
  edison:/ $

Desenvolvendo aplicativo para o Android Things

No arquivo AndroidManifest.xml insira as seguintes linhas:

<uses-library android:name="com.google.android.things"/>
<intent-filter>
   <action android:name="android.intent.action.MAIN"/>
   <category android:name="android.intent.category.IOT_LAUNCHER"/>
   <category android:name="android.intent.category.DEFAULT"/>
</intent-filter>

No arquivo build.gradle insira a linha a seguir em dependencies:

  dependencies {
  
      provided 'com.google.android.things:androidthings:0.3-devpreview'

Na aplicação importe as seguintes classes:

  import com.google.android.things.pio.Gpio;
  import com.google.android.things.pio.PeripheralManagerService;

Achei mais produtivo produzir um vídeo sobre o desenvolvimento para prova de conceito de como pisca um led. O exemplo foi baseado no projeto sample-simplepio cujo código fonte encontra-se no link a seguir. https://github.com/androidthings/sample-simplepio

A seguir um video demonstrativo PASSO A PASSO de como desenvolver um simples aplicativo para o Android Things.

Alessandro de Oliveira Faria é Sócio-fundador da empresa OITI TECNOLOGIA fundada em Junho de 1996, empresa especializada em desenvolvimento de soluções com a tecnologia de Reconhecimento Facial, Consultor Biométrico, Experiência em Realidade Aumentada, Visão Computacional (opencv), Neuro-tecnologia, Redes Neurais e Programação multi-nuclear com CPU e GPU, atua na área de tecnologia desde 1986, leva o Linux a sério desde 1998, membro da comunidade Viva O Linux com mais de 50 palestras e 100 artigos publicados, mantenedor da biblioteca open-source de vídeo captura, Embaixador e openSUSE Member.

Adicionar comentário

* Campos obrigatórios
5000
Powered by Commentics

Comentários

Nenhum comentário ainda. Seja o primeiro!


Veja a relação completa dos artigos de Alessandro de Oliveira Faria