Arduino Uno + Ubuntu + CMake

Já faz uma semana que estou brincando meu Arduino Uno novo em folha. Infelizmente a versão Maverick (10.10) do Ubuntu vem com um SDK do Arduino que é incompatível; parece que congelaram a versão estável do pacote pouco antes do lançamento do Uno. A primeira coisa que fiz foi atualizar meu SDK para os pacotes instáveis do Natty (11.04). Basta baixar e instalar manualmente do site do Ubuntu (lembre-se de atualizar tanto o pacote arduino quanto o arduino-core).

A IDE é bem amigável para os programadores casuais e permite escrever programas simples sem muito esforço. Ao primeiro olhar, pode parecer que uma versão não padrão de C/C++ é usada, mas isto se deve ao fato da IDE adicionar headers e a função main() para você automaticamente no momento em que você clica em Upload. Me parece que você pode ter apenas um arquivo de código fonte por projeto, o que é razoável para coisas não muito complexas.

Arduino IDEPara aqueles que desejam desenvolver de maneira tradicional usando linha de comando, eu criei este template baseado em CMake para o Arduino Uno. Ele foi feito de tal forma que possibilita adicionar suporte a outros modelos de Arduino apenas criando um novo arquivo com as configurações do hardware. Não há restrição de uso deste template em outras distribuições Linux (nem mesmo em outros sistemas operacionais, uma vez que o CMake roda em Mac e Windows também), mas claro que modificações podem ser necessárias. Patches são sempre bem-vindos. :)

Usando o template CMake para Arduino

Você vai precisar, claro, dos pacotes do cmake instalados e uma versão compatível do SDK do Arduino (veja acima como resolver esta questão Ubuntu Maverick x Uno). Apenas o pacote arduino-core é necessário para rodar este template.

Faça download da última versão aqui:

arduino_cmake.tar.gz

Esta é uma versão modificada do exemplo clássico chamado Blink, convertido em C/C++ padrão (é estranho o fato das bibliotecas do Arduino serem escritas em uma mistura de C e C++ e não apenas C). Este exemplo é bacana porque lhe dá uma resposta visual sem ser necessário espetar algum componente extra na placa. Parece que quase todas as vesões do Arduino possuem um LED embutido ligado ao pino 13. Como o cmake não é tão conhecido (o que é uma pena por ser uma ferramente excelente), segue as instruções de como compilar o exemplo:

$ mkdir build
$ cd build
$ cmake ..
$ make

Você pode exportar a variaǘel de ambiente ARDUINO_PORT ou editar o arquivo CMakeLists.txt para alterar a porta no qual seu dispositivo está conectado. Provavelmente você não vai precisar mexer nisso se estiver usando o combo Ubuntu Maverick e Arduino Uno.

Dois targets extras foram adicionados ao Makefile para tornar as coisas mais fáceis:

Dicas

Minha forma predileta de depuração de software é usando printf(). A versão modificada do Blink que está sendo usada no template contém algumas mensagens de debug nesta forma. Use o minicom para ver estas mensagens pelo terminal:

$ minicom -b 115200 -D /dev/ttyACM0

Você precisa sair do minicom antes de “flashar” o hardware novamente. Faça isso usando CTRL+A e depois X.

Aviso

Ao seguir este tutorial e usar o template do buildsystem, você pode potencialmente destruir seu Arduino e transformá-lo em um peso de papel (não muito bom, uma vez que ele é bem leve). Você está assumindo este risco, eu não me responsabilizo por nada.

Postado em dezembro 23, 2010 às 10:26 por Thiago · Link permanente · 6 Comentários
Em: desenvolvimento, en, linux, nerd · Com as tags: , , , , , ,

qmake template

Escrever um buildsystem é sempre o primeiro passo (e algumas vezes o mais chato) ao começar um novo projeto de software. O Qt provê uma ferramenta própria para fazer com que uma única árvore de código possa ser compilada em todas as plataformas suportadas: o qmake. Ao invés de criar um projeto do qmake do zero para seu novo projeto, este template tem como objetivo lhe fornecer uma base sólida para seu buildsystem, atendendo a alguns requisitos básicos:

Shadow build – Chega de repositórios sujos após uma compilação. Compilar seu código dentro do repositório é opcional, você precisa apenas criar um diretório qualquer fora da sua árvore e chamar o script de configuração do seu projeto (configure). Existem várias situações onde isto é especialmente necessário: compilar a mesma árvore de código para diferentes plataformas ou quando seu código fonte está localizado em um storage lento (como um compartilhamento de rede ou uma partição criptografada).

Integração com testes automatizados – Desenvolvimento orientado a testes tem sido cada vez mais comum e provou ser uma importante ferramenta para detectar regressões. Este template provê mais do que um modo fácil de rodar seus testes (digitando “make check”), mas um relatório gráfico mostrando quão abrangentes seus testes são usando LCOV.

LCOV mostrando a cobertura dos unit tests

Documentação de código – Desenvolvedores em geral são preguiçosos se tratando de escrever documentos, a não ser que você lhes dê uma forma fácil de ver o o belo resultado de uma documentação bem escrita. Após digitar “make doc”, uma página HTML é automaticamente gerada agrupando toda a informação extraídas dos markups qdoc3 do seu código fonte.

Documentação extraída da classe Foobar

Internacionalização – Um buildsystem moderno precisa prover um jeito fácil para os tradutores atualizarem os arquivos de tradução. Precisamos ter em mente que tradutores não são necessariamente desenvolvedores e eles podem não gostar de ter que vasculhar o código fonte em busca de strings para tradução. Este template fornece uma integração com lupdate e lrelease – ferramentas i18n do Qt – criando todos os aquivos .ts necessários ao Qt Linguist.

Use o Qt Linguist para editar os arquivos de tradução

Fácil depuração – É meio óbvio que um buildsystem também deve gerar uma versão do software especial para depuração. Você também não precisa instalar esta versão no sistema para fazer testes (pelo menos no Linux).

Empacotamento – Seu software precisa ser de fácil distribuição. Adicionamos o suporte a empacotamento para Debian como exemplo neste template para demonstrar como é fácil fazer um pacote baseado neste buildsystem. Alguém anima contribuir com o empacotamento RPM?

Considerações finais

Só fiz testes deste template no Linux. Infelizmente algumas features só vão funcionar se você estiver usando GCC, como por exemplo a cobertura de código dos testes automatizados. :(

A última versão para download está disponível aqui. Você também pode navegar pelo repositório git do template. Lembre-se: patches e sugestões são sempre bem-vindos.

Mais instruções de uso (em inglês) no aquivo BUILD.

Postado em agosto 2, 2010 às 18:36 por Thiago · Link permanente · Deixe um comentário
Em: artigo, desenvolvimento, en, nerd, pt_br · Com as tags: , ,

Ovi Maps 3

Recentemente fiz uma viagem de moto partindo de Porto Velho – RO com destino a Belo Horizonte – MG. Durante a viagem, usei extensivamente meu celular Nokia N85, principalmente o GPS embutido do mesmo. Resolvi escrever sobre a aplicação de maps, porque muita gente potencialmente tem acesso a ela (já tem o celular com GPS embutido) e não se deu conta de quão útil é.

Ovi Maps 3 em ação

Instalar a aplicação no celular é um parto, o que pode ser o motivo de tanta gente não dar a mínima para os mapinhas. O N85 vem com a versão 2.X que é bem inferior e para atualizar, foi necessário fazer uma série de downloads de lugares diversos. Um amigo com um N95 mais antigo chegou a ter que atualizar o firmware do celular por causa de um erro de certificado ao instalar a nova versão do Ovi Maps.

Após tudo instalado e funcionando, uma bela surpresa. O meu celular veio com uma licença de navegação por voz gratuita de 180 dias. Sem esta licença, o programa serve apenas para localização e perde sua principal função.

A Nokia liberou gratuitamente a navegação por voz para os modelos mais novos de celular e há rumores que vai fazer o mesmo para os mais antigos. Até lá, no caso de comprar a navegação para a América Latina, os preços são R$25,99 / ano ou R$7,69 / mês. Você compra pelo próprio celular usando um cartão de crédito. O mais engraçado é que semana passada, estava custando ~R$140,00. Considero o preço atual bastante atrativo.

Atenção: A licença é atrelada ao SIM Card, portanto não invente de ficar trocando de chip a todo momento e usando o Ovi Maps. Use sempre com o mesmo chip para não perder a licença (como aconteceu comigo). :(

Durante minha viagem, testei o software em diversas cidades – pequenas e grandes – com sucesso. Os mapas estão atualizados e o GPS é bem preciso. A única cidade que não funcionou tão bem foi Brasília, que devido ao confuso sintema de nomenclatura de ruas, é difícil localizar um endereço sem ser pelo CEP.

Como estava de moto, utilizei um fone de ouvido e escutava apenas a mulher falando (em bom e claro português do Brasil), para virar à esquerda, retornar, etc. Já depois, de carro em Belo Horizonte, podendo olhar para o celular, se mostrou ainda mais eficaz.

Dicas:

Suporte chinês: vintão

Postado em março 10, 2010 às 15:12 por Thiago · Link permanente · Um Comentário
Em: nerd, pt_br · Com as tags: , , ,