Hello World com Raspberry Pi 3 usando Android Things

Bruno Zaranza
Android Dev BR
Published in
9 min readDec 19, 2016

Muitos não sabem, mas minha formação é em Mecatrônica pelo Instituto Federal do Ceará, tô devendo o TCC ainda. Fiquei muito animado com o lançamento do Android Things (AT) e a possibilidade de juntar o meu trabalho com o que estudei na faculdade e resolvi investir meu tempo nessa novidade do Google e aplicá-la no meu Projeto de Conclusão de Curso. Nesse post, irei mostrar a vocês como começar a brincar com a Raspberry Pi usando AT, que nada mais é do que uma versão do Android adaptada para placas.

Fig 1. Kit necessário

O que você precisa?

  • Raspberry Pi 3 Model B (não, a versão 1 e 2 não funcionam, nem o novo modelo 4);
  • MicroSD de no mínimo 8Gb Classe 10 (classes inferiores a placa não consegue dar o boot pela lentidão de leitura);
  • Fonte de 5v/2A~3A com cabo Micro USB;
  • Cabo Ethernet;
  • Cabo HDMI; (Opcional)
  • Tela com entrada HDMI; (Opcional)

Caso você não queira usar um monitor, pode usar a dica de acesso remoto com Vysor que escrevi no post abaixo.

Tem tudo isso em mãos? Vamos começar…

Caso não tenha uma conta no Google, crie uma.

Com uma conta criada, entre no Android Things Console nesse link: https://partner.android.com/things/console/u/0/

Fig 2. Console Android Things

Crie um novo produto em “Create a Product”

Fig 3. Criando um novo produto iOT
  1. Escolha um nome qualquer para o seu produto;
  2. Escolha a plataforma que será utilizada, no nosso caso, a Raspiberry Pi 3. SOM significa System on Model (“Sistema na placa”);
  3. Indique se seu produto usuará a API do Google Play Services ou não (se você nem sabe para o que serve, pode deixar desmarcado, não vai ser importante para um Hello World);
  4. Selecione a partição que será alocada para o seu app, se baseando no tamanho máximo que seu APK pode chegar no final do projeto, entre um intervalo de 32 MB a 512 MB. OEM significa Original Equipment Manufacturer;
  5. Adicione uma breve descrição do seu produto;
  6. Finalmente clique em Create.

Após o projeto criado, você deverá ver uma tela semelhante a esta:

Fig 4. Projeto criado

Observe que há 3 divisões. A primeira de Models, que são os modelos contendo as versões de compilação usados no seu produto que você configurou, ele gera uma automaticamente após criado um projeto. A segunda divisão contém as informações do projeto que você acabou de criar. A terceira define quem tem acesso a esse projeto, você poderá adicionar pessoas para trabalharem com você.

Certo, mas o que foi isso aí que ele gerou? Isso é o seu centro de configuração e distribuição do seu projeto. Imagine que alguém comprou um projeto seu e você quer atualizar, bem aqui você pode gerenciar as atualizações dos seus projetos. Você pode adicionar membros para trabalhar com você, alterar as configurações e criar diferentes canais de distribuição para versões… Imagine uma solução de casa inteligente para pontos diferentes do planeta, um canal pode ter um tipo de solução para uma região, enquanto outro pode ter outra… Não sei, foi um exemplo. Use a imaginação para ver a utilidade disso.

Agora vamos editar o nome do Model que foi gerado automaticamente para ficar melhor organizado. Edite para indicar a versão do AT que iremos usar, que é a versão 0.7 (já passou da versão 1.0, porém ainda é do mesmo jeito). Você também pode criar um novo, mas vamos aproveitar o que foi gerado automaticamente.

Fig 5. Nomeando um Model

Feito isso, clique nesse Model e você deverá ver a seguinte tela:

Fig 6. Configuração de um Model

Para nosso Hello World, não se preocupe em criar um novo Bundle agora, detalharei isso melhor em outro post. Apenas utilize o Empty bundle criado por padrão e clique em NEXT. Então você será direcionado para a fase seguinte, a de escolher a compilação do ATOS que usaremos.

Fig 7. Seleção da versão do ATOS

Após selecionada a versão 0.7.0 (ou mais atual), clique em NEXT.

Fig 8. Nomeando configuração de compilação

Ecolha um nome para sua configuração e clique em CREATE BUILD.

Você verá que uma lista foi criada com suas Compilações do AT.

Fig 9. Lista de compilações criadas

Faça o download no seu computador e agora terá uma compilação AT para instalar na sua placa.

Descompacte o zip e grave a imagem no seu cartão microSD. É importante lembrar que ele precisa estar formatado em FAT32. Eu usei MacOS High Sierra, então foram necessários os seguintes passos:

  • Abra o Menu Apple, naquela maçã lá no canto superior-esquerdo do seu monitor e selecione “Sobre este Mac”;
  • Clique em “Relatório do Sistema…”, e em “Hardware”, clique em “USB”;
  • Veja onde tem “Card Reader” o nome BSD do seu cartão SD, é algo do tipo “diskn”, onde n deve ser um número, no meu caso era disk1 (como é na maioria das vezes);
  • Abra o “Utilitário de Disco” e desmonte a partição do seu cartão SD;
  • Abra o terminal e digite a seguinte linha de comando:
sudo dd bs=1m if=CAMINHO_DA_SUA_IMAGEM.img of=/dev/rdiskN;

Note que em em of, você precisa trocar o N pelo número que você viu no nome BSD anteriormente. Em if, você precisa colocar o caminho de onde você descompactou sua imagem, eu descompactei em Downloads mesmo, então meu comando ficou assim:

sudo dd bs=1m if=Downloads/iot_rpi3.img of=/dev/rdisk1.

Caso esse comando não funcione, substitua rdiskN por diskN (não esquecendo de trocar o N pelo o seu número BSD).

Agora coloque o seu microSD na Raspberry Pi 3.

Se você não usa MacOS, pode ver como criar a imagem do AT no cartão microSD nos links a seguir:

Se você não conseguir criar a imagem no cartão, deixa um comentário que tento ajudar.

Ligue sua placa.

Fig 10. Raspberry Pi

Na entrada 3, conecte o cabo HDMI do seu monitor (caso queira usar). Na entrada 2, conecte o cabo Ethernet. Na entrada 1, coloque o cabo micro USB (note que a placa necessita de uma amperagem de no mínimo 2A, o ideal é que seja 3A, numa fonte de 5V). Perceba que deixei a fonte por último para evitar ficar pegando na placa com carga e evitar danificá-la. Ela não é tão fácil de danificar, porém, é bom ter cuidado, leia o manual que vem com a Raspberry que tem boas recomendações, é curto e tem em português.

Você já deve estar vendo esta tela de apresentação do Android Things.

Fig 11. Carregando ATOS

A seguir, a tela inicial, após o boot.

Fig 12. Tela Inicial

Nessa versão 0.7, inseriram uma interatividade muito melhor. Agora você pode conectar à rede WiFi pela própria interface (antes tinha que ser via código) e também pode atualizar o ATOS pela própria interface. Você pode colocar um mouse e um teclado USB e usar normalmente.

Veja que em seção Network aparece o IP da sua placa, você poderá fazer a conexão do Android Studio com a placa através desse IP, veremos isso mais a frente. (Também é através desse IP que você configura o Vysor)

Agora estamos prontos para começar o Hello World.

Abra o seu Android Studio (caso não tenha, faça o download aqui) e crie um novo projeto (nas novas versões do Android Studio, já existe a opção de criar um novo projeto Android Things com as pré-configurações necessárias).

Fig 13. Criando um novo projeto

Configure o seu projeto como preferir. Veja as imagens das minhas configurações a seguir:

Fig 14. Configuração do novo projeto

Escolhi o nome HelloWorld_iot para a minha aplicação, escolha o seu.

Fig 15. Selecionanto a plataforma

Não mude nada nessa etapa e somente clique em Next. (Para versões do Android Studio acima do 3.0, já está incluso a plataforma Android Things e você pode selecionar ela, assim o Android Studio gerará um módulo para AT. E se selecionar Phone a IoT, você terá um projeto divido em dois módulos — caso vá usar um app associado a sua placa).

Selecione Empty Activity e clique em Next.

Não mude nada aqui e apenas clique em Finish.

Espere o seu Android Studio terminar de carregar seu projeto. O arquivo activity_main.xml já tem um TextView com um Hello World por default. Agora só precisamos configurar o arquivo AndroidManifest.xml para adaptá-lo como uma aplicação IoT (lembrando que as novas versões do Studio, se você criar um projeto IoT, esse passo é criado por default).

No AndroidManifest.xml, a única coisa que você precisa adicionar, é o seguinte trecho de código dentro da tag da sua activity:

<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>

Pronto! Seu Hello World está pronto.

Agora vamos compilar na placa?

Para enviar sua apk para a placa, você vai conectar seu Android Studio com a placa via rede com o adb.

  • Localize ( + espaço no Mac) a pasta platform-tools que contém o adb;
  • Abra o terminal e entre nessa pasta via comando:
cd CAMINHO_DA_SUA_PASTA/sdk/platform-tools/

Exemplo:

cd /Documents/Developer/Android/sdk/platform-tools/
  • Agora execute o comando de conexão:
./adb connect Android.local;

No Windows, não precisa colocar o “./” no início do comando.

Isso localiza o IP da sua Raspberry, caso haja só uma placa em rede. Caso haja mais de um dispositivo com AT na rede, conecte com o IP específico (aquele que a gente viu anteriormente na tela de apresentação do AT, lembra?):

 ./adb connect <ip_do_raspberry>;

Com isso sua conexão deve ser estabelecida.

Você também pode conectar via Wi-Fi via código, como era no modo roots das primeiras versões, usando o seguinte comando:

$ adb shell am startservice \
-n com.google.wifisetup/.WifiSetupService \
-a WifiSetupService.Connect \
-e ssid <NOME_DA_REDE> \
-e passphrase <SENHA>

Volte para o Android Studio e clique em Run (o play) e selecione a opção “Unknown Iot_rpi3” e clique em OK.

Seleção da placa

É isso.

Você fez seu Hello World na Raspberry Pi 3 usando Android Things OS. O resultado será algo como mostra a imagem a seguir.

Hello World concluído

No seu, o Hello World aparecerá menor, aqui eu aumentei pra ficar mais visível na foto. Agora é só ir brincando com o layout que você deseja.

O Google fornece um repositório com um template de exemplo, caso queira dar uma olhada, clique aqui.

Algo mais?

Quando formos realmente interagir com a placa, ter acesso ao GPIO (General Purpose Input/Output), que são as portas programáveis de entrada e saída de dados da Raspberry, precisaremos adicionar a lib do AT nas dependências do Gradle.

dependencies {
compileOnly 'com.google.android.things:androidthings:+'
}

Continua…

Nos próximos posts, vamos interagir com leds e botões, então já providencia uma protoboard, uns leds e uns botões. Até mais.

--

--