Tutorial Prático do Código‑Fonte do Firmware Meshtastic
Este tutorial aborda um fluxo de trabalho básico do firmware Meshtastic no Windows e macOS: clonar o repositório, compilar seeed_wio_tracker_L1, fazer uma pequena alteração na interface do usuário e gravar o resultado.
Se Git, Python e PlatformIO já estiverem instalados, você pode pular direto para a parte prática.
Os comandos são fornecidos tanto para Windows quanto para macOS. A maioria das capturas de tela usa Windows, mas o fluxo de trabalho é o mesmo no macOS.
Pré‑requisitos
Prepare as seguintes ferramentas:
- Git
- Python 3
- VS Code
- PlatformIO
1. Instalar o Git
- Windows
- macOS
Abra a página oficial de download do Git para Windows:
O instalador geralmente começa a ser baixado automaticamente quando você abre a página. Após a conclusão do download, clique duas vezes no instalador e siga o assistente de configuração.
Durante a instalação, o passo mais importante é ajustar a variável de ambiente PATH. Escolha:
Git from the command line and also from 3rd-party software
Para as outras opções, os valores padrão geralmente são suficientes. Apenas continue clicando em Next.

Aguarde até que a instalação termine.
Após a instalação, feche todas as janelas atuais do PowerShell e terminais do VS Code, depois abra uma nova janela do PowerShell e execute:
& "C:\Program Files\Git\cmd\git.exe" --version

Se um número de versão do Git for exibido, o Git foi instalado com sucesso.
Se o comando git ainda não estiver disponível
Você pode primeiro executar os seguintes comandos no PowerShell para confirmar os caminhos padrão de instalação do Git:
$gitCmd = "C:\Program Files\Git\cmd"
$gitBin = "C:\Program Files\Git\bin"
Write-Host $gitCmd
Write-Host $gitBin

Em seguida, adicione o Git manualmente às variáveis de ambiente do sistema.
Etapas de correção pela interface gráfica (GUI)
- Pressione
Win - Procure por "Edit the system environment variables"
- Abra e clique em Environment Variables
- Encontre
Pathem System variables - Clique em Edit
- Clique em New e adicione os dois caminhos a seguir:
C:\Program Files\Git\cmd
C:\Program Files\Git\bin
- Clique em OK em todas as janelas para salvar

Depois de salvar, você ainda precisa:
- Fechar todas as janelas do PowerShell
- Abrir o PowerShell novamente
Depois execute:
git --version

Se um número de versão aparecer, a instalação está concluída.
No macOS, o Git pode ser instalado de mais de uma forma, mas usar o Homebrew geralmente é a opção mais fácil:
- Instale primeiro as Command Line Tools:
xcode-select --install
- Se o Homebrew ainda não estiver instalado, instale‑o primeiro:
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
- Instale o Git:
brew install git
- Verifique a versão instalada:
git --version
Se o seu terminal já retornar uma versão válida do Git, você não precisa instalá‑lo novamente.
Configure sua identidade do Git
Em seguida, configure suas informações de usuário do Git. Substitua os valores de exemplo pelo seu próprio nome e endereço de e‑mail:
git config --global user.name "your name"
git config --global user.email "your [email protected]"
Depois execute:
git config --global --list
para confirmar que a configuração entrou em vigor.
2. Instalar o Python 3
Instalar o Python pela linha de comando
- Windows
- macOS
Execute os seguintes comandos no terminal:
winget search --id Python.Python.3.13 --source winget
winget install -e --id Python.Python.3.13 --source winget
Se o primeiro comando conseguir encontrar o Python, o segundo normalmente deverá instalá‑lo diretamente.
Após a instalação, feche o terminal e abra‑o novamente, depois execute:
python --version
pip --version

Se forem exibidos números de versão, o Python e o pip estão prontos para uso.
O macOS muitas vezes já inclui um ambiente Python. Antes de instalar uma nova versão, verifique se python3 e pip3 já estão disponíveis:
python3 --version
pip3 --version
Se eles não estiverem disponíveis, ou se você quiser uma versão mais recente, instale o Python com o Homebrew:
brew install python
Após a instalação, reabra o terminal e execute:
python3 --version
pip3 --version
Se você preferir usar python e pip, pode definir aliases no shell por conta própria. No macOS, porém, usar python3 e pip3 costuma ser a opção mais confiável.
3. Instalar o PlatformIO
O PlatformIO baixa dependências automaticamente durante a instalação, portanto esta etapa pode levar algum tempo. Se ocorrerem erros, analise‑os um por um.
Pesquise por PlatformIO no marketplace de Extensões do VS Code e instale‑o.

Após a instalação, normalmente um ícone em forma de formiga aparece na barra de ferramentas à esquerda.

4. Clonar o repositório do firmware Meshtastic
O repositório oficial do firmware Meshtastic é meshtastic/firmware.
- Windows
- macOS
Execute os seguintes comandos no terminal do seu diretório de trabalho:
git clone https://github.com/meshtastic/firmware.git
cd firmware
git submodule update --init
Se o diretório do seu projeto estiver em uma unidade diferente ou em um caminho diferente, mude para esse local primeiro.


Se a saída for semelhante às capturas de tela acima, o repositório foi clonado com sucesso.
Execute os seguintes comandos no terminal do seu diretório de trabalho:
cd ~/workplace
git clone https://github.com/meshtastic/firmware.git
cd firmware
git submodule update --init
Se ~/workplace ainda não existir, crie‑o primeiro:
mkdir -p ~/workplace
Se os comandos forem concluídos normalmente, o repositório foi clonado com sucesso.
5. Prática prática
Neste estágio, não tenha pressa em editar o código. Primeiro, verifique se o projeto consegue concluir todo o processo de compilação com sucesso.
Recomenda‑se começar com três tarefas:
- Abrir
firmware - Verificar
platformio.ini - Encontrar o ambiente de compilação para sua placa‑alvo
Um detalhe importante: não foque apenas no platformio.ini da raiz. Ele na verdade inclui arquivos de configuração adicionais, por exemplo:
extra_configs =
variants/*/*.ini
variants/*/*/platformio.ini
variants/*/diy/*/platformio.ini
Isso significa que as definições reais de ambiente em nível de placa geralmente estão localizadas em variants/.../platformio.ini.
Ao identificar a placa‑alvo, preste atenção especial a estes dois diretórios:
variants/boards/
Aqui usamos Wio Tracker L1 Pro como exemplo de alvo.

Isso mostra que, no Meshtastic, o alvo de compilação para Wio Tracker L1 / L1 Pro é seeed_wio_tracker_L1.
Etapa 1: Confirmar que o projeto compila com sucesso
Aqui usamos a CLI do PlatformIO Core para compilar.

Para a primeira compilação, recomenda‑se executar o seguinte comando:
- Windows
- macOS
cd D:\workplace\firmware # Adjust to your actual project path
pio run -e seeed_wio_tracker_L1
cd ~/workplace/firmware # Adjust to your actual project path
pio run -e seeed_wio_tracker_L1

Se a interface estiver semelhante à captura de tela acima, o processo de compilação foi iniciado corretamente. A primeira compilação costuma demorar um pouco, portanto tenha paciência.
Se a compilação falhar
Quando uma compilação falhar, você pode primeiro pedir ao PlatformIO para instalar as dependências exigidas pelo ambiente atual:
- Windows
- macOS
cd D:\workplace\firmware # Adjust to your actual project path
pio pkg install -e seeed_wio_tracker_L1
cd ~/workplace/firmware # Adjust to your actual project path
pio pkg install -e seeed_wio_tracker_L1
Esta abordagem traz várias vantagens:
- Instala apenas as dependências, sem iniciar imediatamente uma compilação completa.
- Facilita ver qual pacote está causando o problema.
- As mensagens de erro geralmente são mais focadas e mais fáceis de diagnosticar.
Depois que as dependências forem instaladas, execute:
- Windows
- macOS
pio run -e seeed_wio_tracker_L1 -v
pio run -e seeed_wio_tracker_L1 -v

Quando a instalação das dependências estiver concluída, execute novamente a compilação normal:
- Windows
- macOS
pio run -e seeed_wio_tracker_L1
pio run -e seeed_wio_tracker_L1

Se a compilação for aprovada neste ponto, a saída do firmware foi gerada com sucesso.

Etapa 2: Modificar o código
Prática 1: Modificar a exibição da interface (UI)
Comece rastreando a implementação da tela a partir da configuração em nível de placa. Você pode primeiro verificar:
variants/nrf52840/seeed_wio_tracker_L1/platformio.inivariants/nrf52840/seeed_wio_tracker_L1/variant.h

A partir desses arquivos de configuração, é possível ver que o L1 define HAS_SCREEN e USE_SSD1306. Isso significa que ele usa o pipeline padrão de exibição OLED, não uma configuração sem tela e nem uma solução de E‑Ink.
Se você continuar rastreando a lógica de exibição, a maior parte do código relacionado está localizada em:
src/graphics/src/graphics/draw/
Aqui usamos um exemplo simples: adicionar um rótulo personalizado ao cabeçalho da tela inicial.
Atualize src/graphics/SharedUIDisplay.cpp com as seguintes alterações:
// Track the end of the battery text
int batteryX = 1;
int batteryY = HEADER_OFFSET_Y + 1;
int batteryTextEndX = batteryX - 1;
// Update the boundary while drawing the battery percentage
if (chargePercent != 101) {
char chargeStr[4];
snprintf(chargeStr, sizeof(chargeStr), "%d", chargePercent);
int chargeNumWidth = display->getStringWidth(chargeStr);
int percentWidth = display->getStringWidth("%");
display->drawString(batteryX, textY, chargeStr);
display->drawString(batteryX + chargeNumWidth - 1, textY, "%");
if (isBold) {
display->drawString(batteryX + 1, textY, chargeStr);
display->drawString(batteryX + chargeNumWidth, textY, "%");
}
batteryTextEndX = batteryX + chargeNumWidth + percentWidth - 1 + (isBold ? 1 : 0);
} else {
batteryTextEndX = batteryX - 1;
}
// In the branch that displays time
int iconRightEdge = timeX - 2;
int headerLabelRight = timeX - 4;
#if defined(SEEED_WIO_TRACKER_L1) && !defined(SEEED_WIO_TRACKER_L1_EINK)
if (titleStr && titleStr[0] == '\0') {
static const char *yclLabel = "made by AE";
int labelWidth = display->getStringWidth(yclLabel);
int labelLeft = batteryTextEndX + 4;
if (labelLeft + labelWidth <= headerLabelRight) {
int labelX = labelLeft + ((headerLabelRight - labelLeft) - labelWidth) / 2;
display->drawString(labelX, textY, yclLabel);
if (isBold)
display->drawString(labelX + 1, textY, yclLabel);
}
}
#endif
// In the branch that does not display time
int iconRightEdge = screenW - xOffset;
int headerLabelRight = screenW - xOffset - 2;
#if defined(SEEED_WIO_TRACKER_L1) && !defined(SEEED_WIO_TRACKER_L1_EINK)
if (titleStr && titleStr[0] == '\0') {
static const char *yclLabel = "made by AE";
int labelWidth = display->getStringWidth(yclLabel);
int labelLeft = batteryTextEndX + 4;
if (labelLeft + labelWidth <= headerLabelRight) {
int labelX = labelLeft + ((headerLabelRight - labelLeft) - labelWidth) / 2;
display->drawString(labelX, textY, yclLabel);
if (isBold)
display->drawString(labelX + 1, textY, yclLabel);
}
}
#endif
Essa atualização faz três coisas:
- Registra a borda direita do texto da bateria.
- Reserva espaço entre a área da bateria e os ícones do lado direito.
- Desenha
made by AEsomente emSEEED_WIO_TRACKER_L1quando o título está vazio.
Você pode encontrar o código completo aqui:
Etapa 3: Compilar o seu próprio firmware
Depois de concluir a modificação, volte para o diretório raiz do projeto e compile o mesmo alvo novamente:
- Windows
- macOS
cd D:\workplace\firmware # Adjust to your actual project path
pio run -e seeed_wio_tracker_L1
cd ~/workplace/firmware # Adjust to your actual project path
pio run -e seeed_wio_tracker_L1
A lógica de exibição foi alterada, mas o alvo de compilação ainda é o mesmo:
seeed_wio_tracker_L1
Após uma compilação bem-sucedida, a saída geralmente fica localizada em:
- Windows
- macOS
D:\workplace\firmware\.pio\build\seeed_wio_tracker_L1\
~/workplace/firmware/.pio/build/seeed_wio_tracker_L1/
O arquivo que você deve confirmar que foi atualizado é:
firmware-seeed_wio_tracker_L1-*.uf2
6. Gravar o firmware
Após a conclusão da compilação, abra a página oficial de gravação:
Na maioria dos casos, você deve realizar primeiro uma operação de apagamento.

Em seguida, selecione o arquivo de firmware que você acabou de compilar e grave-o no dispositivo.


Neste ponto, o exercício prático com o código-fonte do Meshtastic está concluído. Você passou por todo o fluxo de trabalho: configuração do ambiente, clonagem do repositório, descoberta da configuração da placa, compilação do firmware, modificação da lógica de exibição e verificação final da gravação.
Se quiser ir além, você pode continuar explorando estas direções:
- Modificar mais elementos na tela inicial
- Ajustar o comportamento dos botões, GPS, Bluetooth e outros módulos
- Adicionar um
variantindependente para a sua própria placa - Continuar rastreando as relações entre
src/,variants/eboards/
Problemas comuns
O comando git não está disponível
- No Windows, primeiro verifique se o Git foi adicionado ao
PATH. - No macOS, execute primeiro
git --version. Se o sistema solicitar que você instale as Command Line Tools, siga a instrução.
python3 ou pip3 não está disponível
- No Windows, confirme se o Python foi adicionado ao
PATHou reabra o terminal e tente novamente. - No macOS, primeiro verifique se
python3/pip3já existem e instale o Python com o Homebrew somente se necessário.
O comando pio não está disponível
- Primeiro, execute
pio --version. - Se o comando ainda não estiver disponível, reinicie o VS Code e o terminal e tente novamente.
- Se necessário, reinstale a extensão PlatformIO e confirme se o PlatformIO Core foi inicializado corretamente.
O código ainda parece incompleto após git submodule update --init
- Primeiro, certifique-se de que você está no diretório raiz do repositório
firmware. - Se a conexão de rede estiver instável, tente novamente com:
git submodule update --init --recursive
A primeira compilação leva muito tempo
- É normal que a primeira compilação faça o download de muitas dependências.
- Se parecer travado por muito tempo, tente instalar os pacotes separadamente primeiro:
pio pkg install -e seeed_wio_tracker_L1
Em seguida, execute a compilação novamente.