ZTOP+ZUMO

Zen e a arte de prototipar com o Intel Edison

Passei um tempo com Jomar Silva, evangelista de desenvolvimento para IoT & Open Source da Intel, que me explicou como trabalhar com as placas de prototipação Intel Edison e Arduino 101.

Foi durante o keynote de abertura do Intel Developer Forum de 2013 que Brian Krzanich, CEO da Intel, apresentou pela primeira vez o chip Quark, que seria o ponto de partida de toda uma nova família de chips, produtos e serviços embarcados baseados na microarquitetura x86…

IDF2013_D1_krzanich_quark

… sendo que meses depois, a empresa anunciou seu primeiro produto de fato: a Placa Intel Galileo Development Board, uma placa de prototipação/desenvolvimento de aplicações embarcadas compatível em nível de hardware com os módulos de expansão (ou shields) da plataforma Arduino…

Zen_edison_Galileo_board

Depois disso, a Intel avançou ainda mais nesse mercado, anunciando o módulo de computação Intel Edison

Zen_edison_edson_description

… uma plataforma microprocessada para prototipação e desenvolvimento de projetos bastante versátil, que foi lançada junto com uma placa de expansão semelhante à Galileo…

Zen_edison_Edison_board

… mas que também trabalha com outra placa menor batizada de Edison Breakout Board, onde o usuário pode criar seus projetos…

Zen_edison_Galileo_breakout_board

… sobre uma plataforma menor e mais enxuta:

Zen_edison_edson_board_mini

Finalmente, o Intel Curie, um módulo para prototipação e desenvolvimento de projetos ainda mais compacto, equipado em um núcleo de processamento Quark SE com 80 KB de SRAM, 384 KB de memória flash, acelerômetro de seis eixos, interface Bluetooth LE (entre outros) e que foi criado originalmente para o desenvolvimento  de dispositivos vestíveis (ou wearables).

Intel_curie_module

Isso porém não impediu que ele também encontrasse o seu espaço no mundo da prototipação na forma do Arduino 101cuja aparência com o Arduino Uno não é mera coincidência.

Zen_edison_arduino_genuino_board

Com isso, a Intel conta hoje com uma linha bastante completa de placas de desenvolvimento que pode atender a desenvolvedores e hobbistas com produtos para todos os bolsos e gostos.

Placa Arduino 101 / Genuino 101
com Intel Curie
Placa Intel Galileo
(2ª Geração)
Módulo Intel Edison
(com placa de expansão para Arduino)
 Intel_Genuino_Thumb  Intel_Galileo_thumb  Intel_edson_thumb
Tecnologia Intel Microcontrolador Intel Quark SE
de 32 bits de baixa voltagem
SoC Intel Quark X1000
de 32-bits single-core
sem HT de até 400 MHz.
Compatítvel com set de instruções
do processador Intel Pentium.
SoC Atom dual-core com HT
de 22 nm e 500 MHz
e um microcontrolador
Quark de 32-bits de 100 MHz
Principal público alvo Escolas em geral / Makers Ensino médio e superior
/ Makers / Hobbyistas
Makers / Desenvolvedores de
sistemas embedded / Empreendedores
Diferenciais Bluetooth, Sensor de
movimento de 6 eixos
Diversas conexões físicas,
incluindo slot PCIe
Desenho modular, Wi-Fi, bluetooth,
certificado em mais de 160 países
Preço sugerido A partir de ~US$ 30 A partir de ~US$ 60 A partir de ~US$ 90
Disponível no Brasil?  Sim (em breve)  Sim  Sim

Eu particularmente sempre fui fascinado tanto pelo conceito quanto pelo potencial criativo dessas mini plataformas programáveis, mas a minha impressão é que existe uma barreira — ou será um abismo? — tecnológico que separa o ser humano comum e os iniciados desta prática, que no Brasil ainda está muito associado ao que chamaria de adeptos da “computação de raiz”.

São um tipo de entusiasta/inventor/nerd/empreendedor/maluco do pedaço que curte circuitos eletrônicos, artes manuais, software livre e outros interesses ou habilidades que se ajudam ou se complementam mutuamente com o objetivo de concretizar uma idéia, por mais inviável que ela possa parecer.

E para entender como funciona a parte operacional dessas plataformas de prototipação, eu procurei a Intel do Brasil (hi Fernando!) que me agendou uma tarde com Jomar Silva, evangelista de desenvolvimento para IoT & Open Source da companhia, que fez uma introdução teórica e prática de como desenvolver aplicações com essas plaquinhas. Para um cara super zen (noção) como eu, foi uma experiência bem reveladora, diga-se de passagem.

Zen_edison_demo

Jomar explicou que o ancestral direto das placas de prototipação são as chamadas placas de ensaio (também conhecidas como protoboard ou breadboard, em inglês) que são formadas por uma base furada, onde podem ser inseridos diversos componentes eletrônicos que podem se conectar por meio de furos eletricamente interligados ou por meio de fios que podem ir de um lado para outro da placa, facilitando assim o ensaio de circuitos experimentais, já que esse método dispensa o uso de solda.

Zen_edison_prototyping_old1

O problema é que a medida que o circuito torna-se cada vez mais complexo, o emaranhado de fios pode tornar o trabalho cada vez mais confuso — e isso sem falar no risco de um fio ou outro apresentar mau contato, escapar da placa ou ter virado brinquedo do gato.

Sob esse ponto de vista, as placas de prototipação como o Edison/Arduino 101 tem a vantagem de simplificar em muito esse processo, já que muitas funções/comportamentos do projeto que tinham que ser implementadas via hardware — como por exemplo, ativar o circuito oscilador astável “W” para fazer piscar os LEDs “X” e “Y” quando o sensor de luz “Z” indicar baixa corrente — pode ser implementada via software, restando para o usuário apenas instalar os LEDs e o sensor de luz.

O interessante é que, com a popularização de plataformas como o Arduino e sua filosofia de código aberto, incentivou a criação de um grande mercado de módulos padronizados bem sofisticados, placas de expansão (também conhecido como shields) e até pacotes de software, que torna a tarefa de prototipar em algo tão simples quanto montar um brinquedo de Lego:

Zen_edison_board

Trata-se de um ecossistema tão dinâmico e vibrante que a própria Intel preferiu abraçar a causa em vez de impor o seu próprio padrão.

Jomar observa que essa plataforma também é uma grande oportunidade para programadores aprenderem rudimentos de eletrônica e vice-versa.

Por exemplo, um sensor de calor/frio pode não enviar um valor numérico em graus Celsius ou em Fahrenheit e sim apenas uma corrente elétrica variável que vai ser lida por um pino da placa do Edison. Daí, a necessidade montador ser capaz de compreender esse fenômeno e descobrir como converter esse valor em uma unidade de temperatura (=coisa de eletrônico) e depois criar um algoritmo matemático para implementar essa função via software na placa de prototipação (=coisa de programador).

Mas voltando ao que interessa, em vez de fazer algo muito simples e vulgar — como acender um LED na placa — Jomar sugeriu um projeto um pouco mais elaborado que ele batizou de “sensor de ar condicionado”…

Zen_edison_jomar_silva

…que utiliza uma placa de prototipação (no nosso caso um Intel Edison com sua respectiva placa Arduino) ….

Zen_edison_edison

… é ligado a um sensor de temperatura (Grove temperature Sensor)…

Grove_Temperature_Sensor

… sendo que quando o sensor acusa um valor acima de um limite pré-determinado pelo sistema, ele ativa um relê eletromecânico (Grove Relay) que liga o ar-condicionado. Para facilitar a sua monitoração, esse módulo possui um LED que acende quando o relê for acionado:

grove_relay2a

Para tornar esse projeto bem mais elaborado, Jomar também irá usar um visor LCD (Grove RGB LCD)  capaz de apresentar mensagens alfanuméricas e trocar a cor do seu iluminador de fundo para destacar alguma informação.

grove_LCD_RGB

E para facilitar o processo de montagem ele também2 usou placa de expansão batizada de Grove Base Shield que implementa um sistema de conexão baseado em cabos equipados com um conector padrão (o chamado Grove System). Note que esse módulo dá acesso a quatro portas analógicas (A0~A3), sete digitais (D2~D5), uma UART (porta serial) e uma I2C.

grove_base_shield_V2Vale a pena observar que pesar de todas as portas acima parecerem idênticas, cada uma delas possuem características diferentes de modo que o montador deve saber o que cada uma faz, como programá-las e aplicá-las em seus projetos. Taí de novo uma grande oportunidade para os programadores aprenderem alguma coisa a mais sobre eletrônica digital/analógica e os eletrônicos aprenderem algo sobre programação, né?

A boa notícia é que existem diversos sites na internet que apresentam/vendem esses componentes que descrevem detalhadamente o seu funcionamento, a pinagem dos seus conectores e até fornecem diversos exemplos de código fonte em diversas linguagens de programação, acelerando assim o processo implementação e elaboração do software de controle (mais sobre isso adiante).

Juntando todas as peças, o resultado final foi esse:

Zen_edison_montagem_basica_Leg

E o passo seguinte foi ligá-lo ao PC via porta USB e na fonte de alimentação para dar início ao processo de carga do programa:

Zen_edison_montagem_ligacoes_leg

De fato é até possível monitorar a carga do sistema operacional e seu funcionamento por meio de um programa emulador de terminal TTY, funcionando assim como um sistema Linux no modo texto:

Zen_edison_soft_boot_system

Segundo Jomar, o ambiente de programação das plaquinhas da Intel é bastante flexível, rodando o sistema operacional Yocto Linux e aceitando linguagens das mais simples às mais complexas, de modo que o desenvolvedor pode optar pelo dialeto que se encaixar melhor às suas necessidades:

Zen_edison_soft_dev_options

No nosso caso, Jomar optou por utilizar o Arduino IDE que é um ambiente de desenvolvimento do Arduino cuja linguagem é uma versão simplificada do C++ originalmente concebida para a plataforma Wiring. O exemplo abaixo é Blink, que seria o equivalente do “Hello World” do mundo da programação:

Arduino_Sketch_Blink_En

Interessante observar que o Arduino também pode ser programado por meio de linguagens visuais como o Scratch ou até mesmo o Wyliodrin, que utiliza um modelo de programação visual cujos comandos e procedimentos são montados e organizados como bloquinhos de Lego. Embaixo o equivalente do “Blink” nessa linguagem:

wyliodrin_blink_application

De fato, existem diversas ferramentas onde pode-se programar com scratch e ele gerar o código do Arduino. Jomar cita uma notícia recente onde um grupo de brasileiros acaba de anunciar um projeto batizado de Block.ino que traz uma proposta bastante radical: Aprenda a programar para Arduino, sem precisar comprar sua própria placa, mas usando um Arduino real comandando-o remotamente pela Web usando um smartphone ou tablet com Android ou iOS:

bloack.ino

Mas voltando ao Arduino IDE, Jomar explicou que, por padrão esse ambiente de programação não suporta as placas da Intel, de modo que é preciso instalar os arquivos de suporte por meio do seu gerenciador de placas (Tools-> Board > Board Manager). Ali estarão três pacotes de suporte: Intel i586 Boards (Galileo), Intel i686 Boards (Edison) e Intel Curie Boards (Arduino 101).

Feito isso, o sistema está pronto para programar:

Zen_edison_soft_demo_code_temp1a

Uma sacada interessante na hora de programar é que, como citamos acima, os diversos sites que vendem esses componentes para o Arduino também dão dicas de programação de como implementá-los em seus projetos (veja alguns exemplos aqui, aqui e aqui). Por exemplo no caso do sensor de temperatura, a página do produto sugere o código abaixo…

Zen_edison_soft_demo_code_temp_arduino

… que pode ser editado para atender as particularidades do projeto e implementado.

Zen_edison_soft_demo_code_temp1

Feito tudo isso, basta executar um comando no IDE para compilar o código de máquina (o chamado Sketch) e enviá-lo para o Edison. Se tudo ocorrer como o esperado o sistema entra em funcionamento, sendo que o display apresenta a temperatura lida pelo sensor e que é armazenada na variável temp. Como esse valor está abaixo de 28 (graus Celsius), o display brilha na cor azul:

Zen_edison_montagem_ligado1

Mas ao aplicar um pouco de calor no sensor o valor de temp passa para 32 (graus Celsius) o que ultrapassa o valor de 28 do programa o que dispara o relê (note o LED aceso) e o painel passa para a cor laranja.

Zen_edison_montagem_ligado2

Num segundo exemplo, Jomar troca de placa, passando a montagem para a plaquinha Arduino 101, reconfigura o IDE e envia o mesmo programa para a nova plataforma, com resultados praticamente idênticos, apesar de um pequeno bug na conversão da unidade:

Zen_edison_montagem_ligado3_leg

No geral, achei que a experiência de desenvolver um projeto e/ou programar no Intel Edison/Arduino 101 não é tão simples quanto imaginava, mas também não é nenhum bicho de sete cabeças que exige um curso de especialização com direito a um diploma no final, só para aprender a fazer uma luzinha piscar na placa.

Quando falei com Jomar sobre esse desafio de como começar, ele me mostrou um slide que ele usou numa apresentação onde ele propôs o seguinte:

Zen_edison_mensagem

Para mim eu acho que o terceiro item onde ele diz “Crie um projeto para chamar de seu: Nesse novo mundo, o melhor jeito de aprender é fazendo.” resume bem o espírito de quem quer realmente tirar proveito dessa tecnologia, ou seja, estabeleça um objetivo e comece a correr atrás do conhecimento necessário para superar os desafios e realizar o seu sonho, seja aprendendo a programar ou dominando rudimentos de eletrônica básica.

E se precisar de ajuda ainda existem os grupos de discussão na rede, os encontros temáticos como o próximo Arduino Day 2016 que acontece no próximo dia 2 de abril em São Paulo (o Jomar vai estar lá azucrinando o pessoal) ou procure os chamados Hackerspace ou Makerspace, pontos de encontro onde pessoas de mesmo interesse costumam se reunir para compartilhar idéias, trocar dicas ou apenas se divertir com um monte de papo cabeça.

Be there or be square.

Henrique comenta: vale ler também o excelente blog BR-Arduino.org 🙂

Desde o século passado Mario Nagano analisa produtos e já escreveu sobre hardware e tecnologia para veículos como PC Magazine, IDGNow!, Veja e PC World. Em 2007 ele fundou o Zumo junto com o Henrique assumindo o cargo de Segundo em Comando, Editor de Testes e Consigliere.

  • dflopes 30/03/2016, 22:16

    excelente reportagem.
    como eu falo: “Só é capaz quem faz”!

    Eu tenho o meu projeto em mente, só me falta tempo pra implementar. ate a arduino eu comprei.

    E falando em aprender linux. Zumo+ztop (e vice-versa) comentarão sobre a simbiose win10+shell?

    • ussantos 05/04/2016, 21:03

      dflopes, leia minha resposta ao Adriano (abaixo), creio ser do seu interesse.

  • Adriano De Lima 31/03/2016, 11:33

    Excelente artigo.
    Estudar Linux pra ontem é algo tão importante no momento que a pŕopria Microsoft está promovendo o uso do bash de modo “nativo” (um tipo de Wine às avesas) na próxima atualização do Windows 10!
    Como sugestão de leitura recomendo o blog do Sérgio Prado: https://sergioprado.org/ e o blog do Djames Suhanko: http://dobitaobyte.com.br/

    • ussantos 05/04/2016, 21:02

      Adriano, não dá para comparar com Wine (emulação), pois é um subsystem Linux/ubuntu rodando em cima do kernel do windows, ao lado do subsystem win32 (onde as aplicações .exe rodam), falando diretamente com o kernel.

      Então é possível rodar binários sem recompilar (bash, gcc, apt-get, etc), de forma nativa. Se fosse uma emulação, esses binários seriam interpretados por outra aplicação (emulador) rodando dentro do subsystem win32, ou seja: seria lerdo.

      Subsystems existem desde o lançamento do NT, no passado já teve subsystem POSIX pra rodar programas UNIX e subsystem OS/2 pra rodar programas do OS/2… Mais detalhes aqui: https://en.wikipedia.org/wiki/Architecture_of_Windows_NT

      Esse video mostra o subsystem Linux/ubuntu funcionando no Windows 10:
      https://sec.ch9.ms/sessions/build/2016/P488.mp4

      É importante entender o contexto que fez a Microsoft seguir este caminho:

      O evento onde o recurso foi apresentado (BUILD 2016) é focado nos Devs, eles sempre pediram a MS pra levar as ferramentas de desenvolvimento dela pro Linux, pois o Linux também tem boas ferramentas, e eles queriam juntar os dois mundos… Mas a MS ao invés de levar as ferramentas pro Linux, trouxe o Linux pro Windows.

      Agora um Dev pode rodar um Visual Studio da vida (Windows) e um gcc (compilador Linux), por exemplo, tudo na mesma maquina.

      Conclusão:

      Sabendo disso, nenhum bom administrador de infra vai colocar um MySQL da vida pra rodar nesse subsystem, nesse cenário melhor usar uma distro tradicional.

      • Adriano De Lima 05/04/2016, 23:36

        Obrigado pelo esclarecimento!
        Sobre esse subsistema rodando em paralelo com a base win32, seria possível fazer esse subsistema win32 ser carregado no Linux e assim tornar possível executar as aplicações do Windows no Linux!? Eu sei que na informática da imaginação tudo é possível, reversível e até recursivo. Entretanto o quão plausível/viável pode vir a ser isso?