Projetando na nuvem com o kit mbed

- por Sergio Prado

Categorias: Hardware, Mbed Tags: , ,

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

Faça um Comentário

Navegue
Creative Commons Este trabalho de Sergio Prado é licenciado pelo
Creative Commons BY-NC-SA 3.0.