Projetando na nuvem com o kit mbed
- por Sergio Prado
Recebi recentemente da NXP o kit mbed, conforme já havia escrito neste artigo aqui. E após algumas horas “brincando” com ele, minhas impressões são muito boas. O kit é realmente intuitivo e fácil de usar, perfeito para quem quer prototipar algo rapidamente e ver o negócio funcionando. Vamos então dar uma olhada mais de perto neste kit.
O HARDWARE
O kit usa o LPC1768 da NXP, um ARM Cortex-M3 com 512K de flash e 32K de RAM, voltado principalmente para aplicações mais complexas com requisitos de tempo real. A CPU roda a 96MHz, com um pipeline de 3 estágios e arquitetura Harvard (barramento separado para código e dados). Além disso, possui também um barramento separado para os periféricos. E por falar em periféricos, a lista é grande. A começar por 70 I/Os configuráveis, 4 UARTs, SPI, I2C, CAN 2.0, USB 2.0 Device/Host e Ethernet MAC. A placa em si é pequena, possui 1 led de status, 4 leds de uso geral, um botão de reset e uma porta serial que pode ser emulada através da interface USB.
O PROJETO
A plataforma mbed (www.mbed.org) foi iniciada por dois funcionários da ARM, que depois assumiu o projeto em parceria com a NXP. Seu principal objetivo é prover um ambiente de prototipagem rápida. Você tem uma idéia, como colocar isso em prática da forma mais rápida possível? Não estamos falando aqui de desenvolver o produto final, e sim de experimentar, de validar uma idéia. O kit atinge muito bem este objetivo, por 4 principais motivos.
1) A placa foi desenvolvida no formato DIP de 40 pinos. Isso significa que você consegue espetá-la facilmente numa protoboard, adicionar alguns periféricos e voilá: hardware pronto para testes!
2) O ambiente de desenvolvimento (editor de texto, compilador, arquivos do projeto) é todo baseado em computação na nuvem. Você faz tudo pelo seu navegador preferido, dentro do seu sistema operacional predileto. Que bom que não precisei reiniciar no Window$ para testar o kit! :) E não precisa instalar nada mesmo. Todo o processo de programação, compilação e gravação é transparente para o desenvolvedor.
3) Por falar em gravação, não poderia ser mais fácil gravar o firmware na flash. Quando você liga o kit na USB do seu PC, ele irá criar automaticamente o drive “MBED”, como se fosse um pendrive. Para gravar o firmware, basta copiar o arquivo binário gerado para este diretório. Muito fácil.
4) E por último, o desenvolvimento é todo baseado em bibliotecas disponibilizadas pelo projeto. Tem biblioteca para todas as interfaces do microcontrolador. Como vocês verão a seguir, fica muito fácil escrever algo para usar a porta serial ou a interface CAN, por exemplo.
CARREGANDO O PRIMEIRO PROGRAMA
Carregar o primeiro “Hello World” foi questão de segundos, sem brincadeira! Conectei o kit na USB e apareceu o drive “MBED“. Dentro dele cliquei no arquivo “MBED.HTM“, que abriu o navegador e pediu para fazer um cadastro rápido. Após o cadastro, apareceu a página inicial do projeto com um link para baixar a aplicação “HelloWorld.bin“. Cliquei no link, baixei a aplicação para o drive “MBED” e reiniciei o kit. Pronto! A aplicação “Hello World” já estava rodando (um led piscando).
Esta tela inicial possui os seguintes menus:
-
Blog: acesso ao blog do projeto mbed.
- Forum: onde você pode tirar suas dúvidas e resolver problemas.
- Handbook: Muita documentação sobre o projeto: hardware, ambiente de programação, compilador, bibliotecas, etc.
- Cookbook: Wiki que pode ser acessada e editada por qualquer usuário para documentar bibliotecas e escrever tutoriais, por exemplo.
- My home: Seu perfil, log de atividades, seus programas e bibliotecas.
- My notebook: Suas anotações.
- Compiler: O compilador na nuvem. É aqui que a diversão começa!
PROGRAMANDO
O menu “Compiler” dá acesso ao ambiente de desenvolvimento do kit. Ao criar o primeiro projeto, o ambiente gera automaticamente o arquivo main.cpp com o código abaixo:
1 2 3 4 5 6 7 8 9 10 11 12 |
#include "mbed.h" DigitalOut myled(LED1); int main() { while(1) { myled = 1; wait(0.2); myled = 0; wait(0.2); } } |
É o código do “Hello World” que carregamos anteriormente. Veja que as bibliotecas estão implementadas em C++.
Clicando em “Compile“, o processo de compilação é quase que instantâneo, abrindo uma janela para salvar o arquivo .bin gerado. Basta salvar no drive “MBED” e reiniciar o kit para a primeira aplicação estar funcionando.
Obs: Não esqueça de remover qualquer arquivo .bin antes de copiar para o drive “MBED“, já que com dois arquivos .bin lá dentro, o kit mbed pode não saber qual aplicação usar.
Ao ler o código, e sem consultar biblioteca nenhuma, tentei intuitivamente fazer os quatro leds piscarem, com o código abaixo:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
#include "mbed.h" DigitalOut myled1(LED1); DigitalOut myled2(LED2); DigitalOut myled3(LED3); DigitalOut myled4(LED4); int main() { while(1) { myled1 = !myled1; myled2 = !myled2; myled3 = !myled3; myled4 = !myled4; wait(0.5); } } |
E não é que funcionou de primeira! O uso dos bibliotecas é bem intuitivo.
Consultei rapidamente a documentação da biblioteca da porta serial, e com duas linhas adicionais no código já estava enviando dados pela serial.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
#include "mbed.h" DigitalOut myled1(LED1); DigitalOut myled2(LED2); DigitalOut myled3(LED3); DigitalOut myled4(LED4); // default 9600 N81 Serial pc(USBTX, USBRX); int main() { while(1) { myled1 = !myled1; myled2 = !myled2; myled3 = !myled3; myled4 = !myled4; pc.printf("Hello Embedded World!\n"); wait(0.5); } } |
Com mesma interface USB o kit mbed emula um porta serial (no Linux, cria um device em /dev/ttyACM0). Basta usar qualquer aplicação de terminal serial apontando /dev/ttyACM0 e configurado com 9600 8N1 para receber a mensagem.
É realmente muito divertido programar com este kit. E existe uma espécie de rede social dentro do ambiente de desenvolvimento. Você pode por exemplo publicar e compartilhar seus projetos direto do compilador, de forma que outras pessoas possam reusar e melhorar seu código.
É claro que nem tudo são flores, e a plataforma mbed tem algumas deficiências. E se você estiver desenvolvendo seu projeto e o link de internet cair? Vai namorar, jogar videogame ou brincar com seu cachorro, porque sem internet você perde acesso ao ambiente de desenvolvimento. Debbuging no kit é outro problema. Como ele não tem uma interface JTAG, você precisará aplicar técnicas “old school” usando os leds ou enviando prints na porta serial para debugar sua aplicação. O compilador online também é carente de algumas funcionalidades como auto-complete de código e buscas avançadas.
Mas o projeto chama a atenção por quebrar alguns paradigmas e ser bastante inovador.
ONDE COMPRAR
Para quem estiver interessado, o kit mbed pode ser adquirido lá fora através da Embedded Artists ou Digikey. Aqui no Brasil, o kit pode ser adquirido na Arrow, Avnet ou Karimex. O valor FOB médio de todos eles é USD 59,00.
No próximo artigo, para explorar melhor todas as possibilidades e interfaces do kit mbed, iremos usá-lo junto com a LPCXpresso Base Board, que tem diversas interfaces de I/O disponíveis, e quem sabe colocar o FreeRTOS para rodar nele.
Um abraço,
Sergio Prado