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, Digikey ou LPC Tools. 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

  • Para prototipagem de produtos que não necessitem das qualidades da mbed, você compararia a mbed ao Arduino?
    Em dezembro do ano passado você citou que tinha várias coisas para escrever, dentre elas sobre Arduino. Quando virá o post sobre Arduino?

  • Olá Carlos!

    Apesar de ambas serem plataformas de prototipação rápida, além das diferenças na arquitetura, acredito que são voltadas à um público alvo um pouco diferente.

    O Arduino é mais para iniciantes e hobbystas. Tem muita documentação e shields pra tudo, bem ao estilo "Lego" . É a plataforma perfeita para leigos, que querem algo funcionando, sem se preocupar muito com eletrônica ou programação. Já o mbed é uma plataforma mais profissional.

    Imagine que você precise prototipar um produto e validar uma solução para sua empresa: o mbed é uma boa opção. Imagine que você queira desenvolver um projetinho com sensor de presença para acender luzes na presença de pessoas: neste caso o Arduino pode ser uma boa opção. A idéia é mais ou menos essa.

    Com relação aos posts sobre o Arduino, ainda está na minha fila. Mas chego lá. Aguarde!

    Abraços!

  • William

    Gostaria de saber se teria como desenvolver um hadware e so usar o complilador mbed

    • Olá William,

      Em teoria, sim. Porque a unica coisa que o compilador faz é gerar o código para um ARM Cortex-M3. O arquivo binário gerado você poderia gravar em qualquer CPU com o core compatível.

      É lógico que existem alguns detalhes, como por exemplo todas as bibliotecas estão mapeadas para a configuração de I/O do LCP1768. então se você pretende usar as bibliotecas fornecidas pelo compilador, teria que usar a mesma CPU ou uma compatível.

      Um abraço!

  • Frederico

    Oi Sergio
    Muito bom, parabéns !
    mbed é show de bola, está na minha lista de metas :)
     
    Abraço

  • Rogerio

    Eh uma pena que nao e um projeto opensource assim como o Arduino

  • Brasilrobotics

    Tem para comprar Mbed aqui nesse site no Brasil:
    http://lojabrasilrobotics.blogspot.com/

  • Rhamon

    que software eu utilizo para programar o mini6410 arm 11 queria que ele mandasse comando e recebe informaçoes do microcontrolador pic pela porta serial rs232. Teria como você me ajudar é para um trabalho que eu estou fazendo no SENAI(RJ) queria aprender a usar o mini6410 com o software labview mas não sei como programa-lo ali. qualquer opinião sera de muito valor.obrigado

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