Last active
September 28, 2017 13:25
-
-
Save farribeiro/0766983579082ffc882a91ff8dc203bc to your computer and use it in GitHub Desktop.
Android-things
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<META http-equiv="Content-Type" content="text/html; charset=utf-8"> | |
<h1>Android Things - Aplicativos IoT padronizado para Indústria 4.0</h1> | |
Autor: Alessandro de Oliveira Faria (A.K.A. CABELO) <cabelo at opensuse.org> | |
Data: 23/09/2017 | |
<h1>Introdução</h1> | |
<p>Primeiramente, agradeço o trabalho em conjunto a Mackenzie no LabSec | |
(Laboratório de Pesquisas em Segurança Cibernética, cuja 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.</p> | |
<a href="//img.vivaolinux.com.br/imagens/artigos/comunidade/cabelo_edison.jpg" target="_blank"><img src="//img.vivaolinux.com.br/imagens/artigos/comunidade/thumb_cabelo_edison.jpg" width=200 height=112 border=0 alt="Linux: Android Things : Aplicativos IoT padronizado para Indústria 4.0" /></a> | |
<p>Com a evolução da internet das coisas, inúmeros <a | |
href="//www.vivaolinux.com.br/linux/">Linux</a> 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.</p> | |
<p>A tecnologia da <em>Internet das Coisas</em> 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.</p> | |
<p>Com o lançamento de um suposto sistema operacional <q>universal</q>, 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.</p> | |
<p>Então em 2016 surge o <em>Android Things</em>, um sistema operacional | |
baseado no Brillo, uma versão minimalista do <a | |
href="//www.vivaoandroid.com.br/android/" target="_blank">Android</a> 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.</p> | |
Atualmente o Android Things é compatível com as plataformas a seguir: | |
<ul> | |
<li> Intel Edison (descontinuado) </li> | |
<li> Intel Joule (descontinuado) </li> | |
<li> NXP i.MX7D Pico </li> | |
<li> NXP i.MX6UL Argon </li> | |
<li> NXP i.MX6UL Pico </li> | |
<li> Raspberry Pi 3 </li> | |
</ul> | |
<p>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.</p> | |
<a href="//img.vivaolinux.com.br/imagens/artigos/comunidade/arquitetura-plataforma-android-things.png" target="_blank"><img src="//img.vivaolinux.com.br/imagens/artigos/comunidade/thumb_arquitetura-plataforma-android-things.png" width=500 height=233 border=0 alt="Linux: Android Things : Aplicativos IoT padronizado para Indústria 4.0" /></a> | |
<p>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.</p> | |
<h1>Diferenças entre o Intel Edsion e RaspberryPi</h1> | |
<dl> | |
<dt>RaspberryPi</dt> | |
<dd>basta gravar a imagem com qualquer ferramenta e utilizá-lo, o Android | |
Things para esta versão possui interface gráfica.</dd> | |
<dt>Intel Edson</dt> | |
<dd>necessário o uso de ferramenta flash tools para gravação de firmware, não | |
possui interface gráfica.</dd> | |
</dl> | |
<h1>Instalação no Intel Edison</h1> | |
<p><strong>ATENÇÃO:</strong> 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.</p> | |
<h1>Download dos requisitos</h1> | |
<p>Os requisitos para este artigo são as ferramentas:</p> | |
<ul> | |
<li><a href="https://developer.android.com/studio/releases/platform-tools.html" | |
rel="nofollow" target="_blank">Android SDK Platform Tools</a>: é necessária a | |
versão 25.0.3 ou superior, mas acredito estar presente em quase todas | |
distribuições Linux</li> | |
<li><a | |
href="https://01.org/android-ia/downloads/intel-platform-flash-tool-lite" | |
rel="nofollow" target="_blank">Platform Flash Tool Lite da Intel</a> para o | |
seu sistema operacional</li> | |
<li>Imagem <a href="http://tinyurl.com/android-things-edison" rel="nofollow" | |
target="_blank" rel="nofollow" target="_blank">Android Things</a> para o Intel | |
Edison</li> | |
</ul> | |
<div class="figura"><img src="//img.vivaolinux.com.br/imagens/artigos/comunidade/edison-arduino-connections.png" width=396 height=248 alt="Linux: Android Things : Aplicativos IoT padronizado para Indústria 4.0" /></div> | |
<p>Conforme a imagem acima, no lado esquerdo da placa, utilize a porta | |
micro-USB superior (3), ou seja, a mais próxima do Swith.</p> | |
<p><strong>ATENÇÃO:</strong> 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.</p> | |
<p>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:</p> | |
<pre><samp> | |
$ sudo screen /dev/ttyUSB0 115200 | |
</samp></pre> | |
<p>Instale a ferramenta Platform Flash Tool Lite da Intel:</p> | |
<pre><samp> | |
# rpm -ivh platformflashtoollite_5.8.3.0_linux_x86_64.rpm | |
</samp></pre> | |
<p>Para efetuar a instalação, lembre-se de colocar a placa do Intel Edison no | |
modo UPLOAD FIRMWARE conforme mencionado anteriormente. E digite | |
<samp>platformflashtoollite</samp> para utilizar o modo gráfico bastando apenas selecionar | |
a imagem recentemente baixada:</p> | |
<pre><samp> | |
# /usr/bin/platformflashtoollite | |
</samp></pre> | |
<div class="figura"><a href="//img.vivaolinux.com.br/imagens/artigos/comunidade/Install_Graphic.png" target="_blank"><img src="//img.vivaolinux.com.br/imagens/artigos/comunidade/thumb_Install_Graphic.png" width=500 height=306 border=0 alt="Linux: Android Things : Aplicativos IoT padronizado para Indústria 4.0" /></a></div> | |
<p>Ou o comando no modo console conforme o exemplo a seguir:</p> | |
<pre><samp> | |
# 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 samp 0 | |
</samp></pre> | |
<p>Se habilitou com o comando screen o monitoramento do console anteriormente, | |
teremos as seguintes informações durante a atualização do firmware/bootloader: | |
</p> | |
<pre> | |
<samp> | |
******* 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 | |
</samp></pre> | |
Após gravar o bootloader (ou firmware), o sistema reiniciará, para verificar se tudo esta funcionando corretamente, execute o comando a seguir: | |
<pre><samp> | |
# fastboot devices | |
1b2f21d4e1fe0129 fastboot | |
</samp></pre> | |
<p>Agora descompacte o arquivo <a href="//www.vivaoandroid.com.br/android/" | |
target="_blank">Android</a>things_edison_devpreview_3.zip, entre na pasta recém | |
criada e execute o comando flash-all para gravar a imagem do Android.</p> | |
<pre><samp> | |
# ./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 | |
</samp></pre> | |
<p>Se habilitou com o comando screen o monitoramento do console, novamente | |
teremos as seguintes informações durante a atualização do | |
firmware/bootloader:</p> | |
<pre><samp> | |
****************************** | |
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 ... | |
</samp></pre> | |
<p>Se tudo foi atualizado com sucesso a ferramenta ADB apresentara o seguinte | |
resultado:</p> | |
<pre><samp> | |
# adb devices | |
List of devices attached | |
Edisonb74661ad device | |
</samp></pre> | |
<p>@Pronto! Vamos para a configuração do Android Things!</p> | |
<h1>Configurações do Android Things</h1> | |
<p>Configurando a rede WIFI:</p> | |
<pre><samp> | |
# adb shell am startservice \ | |
-n com.google.wifisetup/.WifiSetupService \ | |
-a WifiSetupService.Connect \ | |
-e ssid [NOME-DA-SUA-REDE] \ | |
-e passphrase [senha-sua-rede] | |
</samp></pre> | |
<p>Testando a conexão com Internet:</p> | |
<pre><samp> | |
# 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 | |
</samp></pre> | |
<p>Configurando o ADB para rede sem fio:</p> | |
<p>No <a href="//www.vivaoandroid.com.br/android/" target="_blank">Android</a> | |
Things:</p> | |
<pre><samp> | |
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 | |
edison:/ # | |
</samp></pre> | |
<p>Na sua estação:</p> | |
<pre><samp> | |
# adb kill-server | |
# adb tcpip 5555 | |
# adb connect [IP-DO-ANDROID-THINGS] | |
# adb kill-server | |
# adb connect [IP-DO-ANDROID-THINGS] | |
</samp></pre> | |
<p>Pronto, agora basta efetuar os comandos adb shell, ou adb install...</p> | |
<pre><samp> | |
# adb shell | |
edison:/ $ | |
</samp></pre> | |
<h1>Desenvolvendo aplicativo para o Android Things</h1> | |
<p>No arquivo <em>AndroidManifest.xml</em> insira as seguintes linhas:</p> | |
<pre> | |
<code> | |
<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> | |
</code> | |
</pre> | |
<p>No arquivo <em>build.gradle</em> insira a linha a seguir em | |
dependencies:</p> | |
<pre> | |
<code> | |
dependencies { | |
provided 'com.google.android.things:androidthings:0.3-devpreview' | |
</code> | |
</pre> | |
<p>Na aplicação importe as seguintes classes:</p> | |
<pre><code> | |
import com.google.android.things.pio.Gpio; | |
import com.google.android.things.pio.PeripheralManagerService; | |
</code></pre> | |
<p>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.</p> | |
<ul> | |
<li><a href="https://github.com/androidthings/sample-simplepio" rel="nofollow" target="_blank">https://github.com/androidthings/sample-simplepio</a> | |
</ul> | |
<p>A seguir um video demonstrativo PASSO A PASSO de como desenvolver um | |
simples aplicativo para o Android Things.</p> | |
<!-- | |
<div class="figura"><div class="figura"><iframe width="560" height="315" src="//www.youtube.com/embed/pWWwAb-AHDE" frameborder="0" allowfullscreen></iframe></div></iframe></div> | |
--> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment