Eu costumava levantar algumas questões nas palestras que abordava o tema de Internet das Coisas e que são as principais dores dos desenvolvedores: começando pelo processo de configuração inicial do dispositivo, até atualizações “over the air” do hardware e mecanismos de segurança e privacidade.

Foi nessa mesma época que o Google criou os projetos Brillo e Weave. Um com foco na plataforma de hardware e outro na integração e comunicação entre os dispositivos. Apesar de ainda fechados, eles respondiam essas questões de todos os desenvolvedores de software que começaram a trabalhar com hardware e sistemas embarcados (como Arduino, RaspberryPi, BeagleBone, entre outros).
Além disso, enquanto a plataforma Brillo criava a base de hardware, incluindo updates “over the air” e propriedade/segurança do dispositivo, o Weave focava na parte de comunicação e representatividade de estado virtual/físico. Quem atua hoje desenvolvendo esses tipos de protocolos, sabe quão complicado e custoso é manter um sistema realtime que faça isso.

Foi em dezembro de 2016 que o Google lançou o Android Things e descontinuou o Brillo. A partir de então, qualquer desenvolvedor munido do hardware apropriado (Intel Edison, Raspberry Pi 3 e NXP Pico) poderia gravar o sistema operacional Android e começar a desenvolver para hardwares embarcados utilizando o Android Studio.
Me lembro que o processo de configuração de um dispositivo com o Brillo era muito complicado, possibilitando seu uso a um pequeno grupo de desenvolvedores. Inclusive, você precisava compilar o sistema operacional e gravar o bootloader. Com o Android Things, uma vez que você gravou um bootloader padrão, ao conectar com o Android Studio, ele seria identificado da mesma forma quando você conecta seu celular com o modo de desenvolvedor ativado.
Se você pretende desenvolver para o AT (assim que vou chamar o Android Things a partir de agora), basta saber Java e conhecer um pouco de eletrônica e alguns protocolos, que são abordados de forma didática na própria documentação do AT sobre hardware. Tem um outro artigo em inglês muito legal sobre eletrônica básica.

Outro grande trunfo da plataforma é a biblioteca compartilhada de drivers. Isso significa que qualquer dev que queria contribuir com algum código para acesso a dispositivos e com objetivo de facilitar o acesso a eles. Assim, teremos uma camada de alto-nível para acesso a dispositivos, sem se preocupar com os protocolos e comunicações entre eles.
Qual a diferença entre o Intel Edison e o RaspberryPi
Basicamente, só muda a forma de gravar o bootloader. Enquanto o RasPi é um mini-computador que você precisa gravar o disco de boot em um cartão de memória SD, o Intel Edison tem um sistema próprio para gravar a imagem. Se você utilizar o RaspberryPi, terá como extra, além da saída HDMI, os barramentos de display e de câmera, mais portas USB e saída de áudio.
RaspberryPi
- Qualquer ferramenta para gravar imagens vai lhe ajudar a começar;
- Você precisa conectar o ADB através da rede na primeira vez (o boot não finaliza sem a conexão de rede). Portanto, é necessário ter uma conexão ethernet (roteador ou switch) ligado ao RasPi;
- Possui interface gráfica de saída. Dá pra montar um quiosque.
Intel Edison
- Use o Platform Flash Tool Lite para gravar o firmware;
- Uma das portas micro-USB funciona com o ADB diretamente. Não é necessário configurar o Wifi;
- Não possui interface gráfica, portanto, qualquer saída/aviso precisa ser implementado com algo externo (leds, displays LCD, etc);
Em ambos os casos, uma vez conectado, você pode configurar o wifi e redirecionar o ADB por ele!

Como adquirir o hardware?
Hoje, no Brasil, o jeito mais fácil para adquirir tanto o RaspberryPi 3, quanto o Intel Edison é utilizar o FilipeFlop. Lembre-se de comprar uma boa fonte (micro-usb 2A para o Raspi ou 12V 1.5A para o Edison).
Pontos interessantes do Android Things
Quem desenvolve hardware embarcado hoje lida com uma série de protocolos de comunicação. Muito além de ligar e desligar portas, você precisa desses protocolos para interfacear com os mais variados dispositivos. Desde controlar uma comunicação serial que vai modificar o status de uma controladora DMX (daquelas que mudam a iluminação de shows) até receber dados de um sensor de temperatura ou imprimir cupons na impressora térmica. Você não precisa conhecer os protocolos, mas saber o que é utilizado pelos dispositivos/circuitos. A programação é alto-nível e você não vai precisar escovar bits.
Quais são os passos para fazer um app no Android Things?
- Gravar o bootloader no dispositivo;
- Conectar o dispositivo no Android Studio via ADB;
- Desenhar a integração do hardware;
- Adicionar as bibliotecas necessárias e desenvolver o app;
- Publicar o app (ou “firmware”) no dispositivo.
Gravar o Bootloader/Firmware no Edison
Vou abordar apenas o processo de configuração do Intel Edison, pois o artigo do Bruno Zaranza já explica como realizar o processo no Raspi.
Download e configuração das ferramentas
Você precisa baixar as seguintes ferramentas:
- Android SDK Platform Tools, a partir da versão 25.0.3 (versões anteriores não dão suporte). Lembre-se de modificar o PATH para acessar o fastboot e o executável dele precisa ser acessado diretamente pelo prompt de comando;
- Imagem atualizada do Android Things para o Edison. Verifique o checksum;
- Platform Flash Tool Lite da Intel, conforme o seu sistema operacional.
Diferentemente do Raspi, você grava na memória do Edison o SO através da Flash Tool Lite e em seguida instala o software do seu app específico. Para realizar o primeiro procedimento, você precisa de um cabo micro-USB.
Na imagem do AT encontra-se um arquivo chamado FlashEdison.json. Ele deve ser selecionado através do botão “Browse…”. Escolha a opção de configuração “Non_OS”.

Prepare o Edison
Dependendo de qual formato de board você tiver, vai mudar a porta USB que utilizará.

No Arduino Breakout, conforme a imagem acima do lado esquerdo, utilize a porta USB mais próxima da conexão de energia. Não é necessário incluir uma fonte de energia neste momento, ok? O Swith do lado esquerdo deve estar virado PARA BAIXO também (mais próximo das portas micro-USB). Para ativar o modo de upload, mantenha o botão FW pressionado enquanto liga o cabo micro-USB nele.

Se você utilizar o Sparkfun Block, a porta micro-USB que vai utilizar é a inferior (na mesma linha do barramento que conecta o microprocessador. Neste caso, não há o botão FW e o funcionamento do dispositivo é parecido com o OTG.
Após gravar o bootloader (ou firmware), o fastboot vai inicializar automaticamente. Para conferir se está tudo certo, execute o comando a seguir:
$ fastboot devices 1b2f21d4e1fe0129 fastboot
Se seu dispositivo não aparecer no modo fastbook, utilize a ferramenta ADB para ativá-lo e rode o “fastboot devices” quando tiver finalizado.
$ adb reboot bootloader
Rode os comandos abaixo para instalar a imagem do sistema operacional:
$ fastboot \ flash gpt partition-table.img \ flash u-boot u-boot-edison.bin \ flash boot_a boot.img \ flash boot_b boot.img \ flash system_a system.img \ flash system_b system.img \ flash userdata userdata.img \ erase misc \ set_active _a $ fastboot \ flash gapps_a gapps.img \ flash gapps_b gapps.img $ fastboot \ flash oem_a oem.img \ flash oem_b oem.img
E agora, só fazer o boot no Android Things:
$ fastboot reboot
Tudo certo? Então, seu dispositivo deve aparecer no adb:
$ adb devices List of devices attached Edisonb74661ad device
Após realizar este processo, além de poder publicar seu app no dispositivo, também é possível configurar o Intel Edison para ativar o ADB pelo WiFi. Veja aqui um tutorial de configuração do ADB via Wifi n o Intel Edison (em inglês). Em breve, devo realizar os testes com WiFi e faço um artigo específico sobre isso.
Por enquanto, é isso. No próximo artigo, abordarei sobre como conectar o dispositivo no Android Studio via ADB.
***
Artigo originalmente publicado em: https://medium.com/android-dev-br/android-things-primeiros-passos-2c98be4be394#.qmaebnuex