IoT 101–Primeiros passos para você entender de forma prática!
Assim como muitos outros conceitos disruptivos que temos ouvido falar nos últimos anos, IoT (Internet of Things) é um assunto extremamente amplo, e traz consigo uma série de pré-requisitos de conhecimento muito abrangente.
Muitas vezes, temos dificuldade de encontrar exemplos práticos e sistemas que são realmente aplicáveis ao mercado. Até pouco tempo atrás isso se devia muito ao fato de que tínhamos poucas ferramentas, Frameworks e Sistemas Operacionais criados para facilitar o desenvolvimento de Gadgets e produtos com IoT. Porém, hoje, temos Sistemas Operacionais como o Android Things e IoTivity, que são projetados para trabalhar com linguagens de alto nível como Java, para poder dar mais acessibilidade ao desenvolvimento por parte da comunidade que, em sua maior parte, domina conhecimentos apenas em linguagens de alto nível.
Pensando nisso, grandes empresas do cenário mundial têm desenvolvido ferramentas projetadas para facilitar a vida do desenvolvedor, entretanto, deve-se ter em mente que conhecimentos em Eletrônica, computação distribuída e estrutura de dados são essenciais para o desempenho satisfatório de um projeto com IoT.
No decorrer deste artigo, iremos discorrer sobre um dos sistemas operacionais mais atuais desenvolvidos exclusivamente para IoT. 😉
Android Things
É um Sistema operacional criado com base na plataforma Android, cuja a principal característica é a facilidade das suas ferramentas, como a IDE Android Studio e o SDK (Software Development Kit) do Android, contendo o ADB (Android Debug Bridge) e o Monitor de processos.
A versão oficial do Sistema Operacional (versão 1.0), em desenvolvimento desde 2016, foi lançada oficialmente no dia 07/05/2018, e trouxe o suporte a três SoMs (System on Module), que são módulos como a Raspberry Pi 3 model B, com o qual é possível utilizar o Android Things com suporte a todas as funcionalidades do hardware.
A arquitetura interna do Android Things é muito semelhante à do Android, como pode ser visto a seguir:
Na prática, trabalharemos muito com a layer “Things Suport Library”, onde criaremos as interações com o hardware. Neste contexto, temos classes de apoio como a “PeripheralManagerService”, com a qual é possível que você configure um pino específico da placa para que ele funcione como entrada ou como saída. Abaixo, temos um exemplo de configuração:
Percebe-se que a linguagem acaba ficando bastante declarativa, sendo possível observar que, basicamente, está sendo feita a configuração do pino “BCM6” da RaPi3 como saída, de forma que seu estado inicial será em nível baixo e, logo após, ele poderá ser ativado ou desativado, mediante ao método “setValue”.
O que há de mais interessante em utilizar o sistema operacional Android e o acesso ao hardware é a possibilidade de se poder aproveitar uma série de bibliotecas que foram criadas para facilitar a vida do desenvolvedor. Uma destas bibliotecas é a “TextToSpeech”, que basicamente envia o sinal sonoro para a saída de áudio de acordo com o texto que você escreveu no seu programa, utilizando uma das vozes padrão do Google. Em virtude que a saída de áudio está disponível na RaPi3, o trabalho se torna bastante simplório, pois com apenas um fone de ouvido ou uma caixa de som, já é possível testar nosso código. Muito fácil, não acha? 😎
Bom, chega de conversa e vamos para o que interessa! Ver como funciona na prática! Abaixo, temos um “Hello world” com a RaPi3, onde há um push Button sendo utilizado como entrada para disparar um processo que, neste caso, é um texto sendo enviado para a saída de áudio.
Caso você tenha dúvidas sobre a posição dos pinos da RaPi3, é possível se guiar por esta imagem, a qual traz os nomes de todos os pinos e pode ser usada em conjunto com o datasheet da placa.
Claro que além do suporte a GPIO, há o suporte a uma série de funcionalidades e máquinas de hardware como UART, PWM, SPI e I2C. A maior parte delas com exemplos práticos no guia do desenvolvedor do Android Things.
A imagem abaixo ilustra os recursos que você pode utilizar na placa:
Como se percebe é bastante prático acoplar periféricos a placa, como câmeras, display HDMI e muito mais. Além disso, há uma série de recursos que comumente não são acoplados a um Kit de desenvolvimento, como Bluetooth e Wifi.
Vale ressaltar que a forma mais simples para se conectar a placa para realizar o desenvolvimento é via Wifi, utilizando o ADB. Para iniciar a comunicação com o dispositivo, basta rodar o seguinte comando:
adb connect <ip-address:5555>
Logo após, para confirmar a conexão com o dispositivo rode o comando:
adb devices
Bom, era isso, espero que você tenha compreendido os conceitos elementares sobre o desenvolvimento utilizando Android Things. Este foi apenas o primeiro experimento sobre IoT, ainda há uma série de conceitos para explorar.
Os próximos artigos terão como propósito apresentar ferramentas para programar com NodeJS e Python, abrangendo algumas opções de development kits de valor bem mais acessível do que a RaPi3, como ESP8266.
Adianto que, no próximo artigo, será demonstrado como construir um sensor que detecta a abertura e fechamento da porta da sua casa e lhe notifica por Slack(chat), dentre outras formas de contato, utilizando a plataforma IFTTT.
Obrigado e até a próxima. 😊