Faz muito tempo que estou procurando uma boa resposta para essa pergunta.
Normalmente, qualquer projeto do Arduino, mas o mais simples, inclui:
- O principal arquivo de código fonte
MyProject.ino
- Bibliotecas específicas para o projeto (
MyProjectLibrary1.h
,MyProjectLibrary1.cpp
...) - Bibliotecas de terceiros (geralmente de código aberto gratuito, adicionados manualmente ao diretório de bibliotecas do Arduino)
- Esquemas, diagramas de PCB
- Documentação
- ...
Tudo isso dificulta a manutenção de todo o código e o documento de um projeto no Gerenciamento de código-fonte (por exemplo, no Subversion, Git ou GitHub).
Gerenciar o controle de origem do seu projeto significa gerenciar a versão de todos os arquivos usados pelo projeto, incluindo bibliotecas de terceiros.
Agora, para um único projeto, preciso definir uma estrutura de diretórios que:
- Inclui todos os arquivos de projeto, conforme descrito acima
- Posso me comprometer totalmente com uma ferramenta de Gerenciamento de Código Fonte (incluindo dependências de terceiros)
- Posso fazer checkout em qualquer lugar do meu disco rígido e criar o projeto a partir daí (ele precisa ser um único local, conforme imposto pelo IDE do Arduino)
- Posso compactar em um arquivo independente que posso enviar a um amigo para que ele crie o mais fácil possível (sem download manual extra)
O que acho particularmente complicado nos projetos do Arduino é o gerenciamento de dependências de bibliotecas externas. Os desenvolvedores de projetos Java possuem repositórios maven para isso e isso ajuda muito no gerenciamento de todos os deps externos. Mas não temos um sistema equivalente para bibliotecas do Arduino.
Eu estaria interessado em saber como outros fabricantes de projetos do Arduino lidam com esses aspectos em seus próprios projetos.
Observe também que estou aberto a alterar meu processo de desenvolvimento, incluindo meu IDE (atualmente uso o Eclipse com o plug-in Arduino na maioria das vezes e, em seguida, garanto que meus projetos também possam trabalhar diretamente com o Arduino IDE).