O Zephyr é um RTOS mantido pela Linux Foundation, com baixíssimo footprint e portado para diversas arquiteturas. Este RTOS vem ganhando a adesão maciça de fabricantes de semicondutores e, recentemente, Google e Facebook tornaram-se membros Platinum do Zephyr Project [1]. Estes dois gigantes anunciaram que passarão a adotar o Zephyr como RTOS em várias de suas soluções embarcadas, sendo assim, os dois podem vir a contribur ainda mais ativamente para o projeto. Você pode encontrar explicações mais detalhadas sobre o RTOS na documentação oficial do Zephyr Project.
A Espressif vem ampliando o suporte para o Zephyr RTOS no ESP32. O ESP32 é um SoC extremamente popular entre hobbystas mas também já muito utilizado em aplicações comerciais, este SoC é conhecido por já integrar as stacks Wifi e Bluetooth em um só chip e por ser muito competitivo em termos de custo. Neste artigo, vou explicar os passos necessários para preparar o ambiente do seu host para usar o Zephyr no ESP32. Ao final, vamos rodar o clássico “hello world” para validar o seu setup. Neste passo-a-passo usarei a placa ESP32 DevKitC.
A primeira coisa a se fazer é preparar o ambiente de desenvolvimento do Zephyr. Eu listo aqui brevemente os passos necessários para Linux (Ubuntu 20.04.1 LTS), para a documentação de setup mais atualizada e para o suporte a outros SOs você pode ver o Getting Started oficial do Zephyr e, em especial, a seção dedicada especificamente ao ESP32.
1. Atualizando o Linux
Antes de começarmos, atualize a sua lista de repositórios.
sudo apt update sudo apt upgrade
2. Instalando as dependências
Use apt para instalar as dependências:
sudo apt install --no-install-recommends git cmake ninja-build gperf \ ccache dfu-util device-tree-compiler wget \ python3-dev python3-pip python3-setuptools python3-tk python3-wheel xz-utils file \ make gcc gcc-multilib g++-multilib libsdl2-dev
Verifique a versão do cmake instalada no seu host.
cmake --version
Se a versão for superior à 3.13.1 vá para a próxima seção. Do contrário, siga estes passos para atualizar o cmake:
- Adicione a chave de assinatura da Kitware (empresa desenvolvedora do cmake).
wget -O - https://apt.kitware.com/keys/kitware-archive-latest.asc 2>/dev/null | sudo apt-key add -
2. Adicione o repositório apt da Kitware para o release do seu SO. No caso do Ubuntu 20.04 LTS:
sudo apt-add-repository 'deb https://apt.kitware.com/ubuntu/ focal main'
3. Reinstale o cmake.
sudo apt update sudo apt install cmake
3. Obtendo o Zephyr e instalando as dependências Python
Instale o west e garanta que o caminho ~/.local/bin faz parte da sua variável de ambiente PATH:
pip3 install --user -U west echo 'export PATH=~/.local/bin:"$PATH"' >> ~/.bashrc source ~/.bashrc
Aqui cabe uma breve observação: west é a ferramenta que gerencia todo o ciclo de vida de um projeto baseado no Zephyr. Isto fica mais claro a seguir. Agora, obtenha o código-fonte do Zephyr:
west init ~/zephyrproject cd ~/zephyrproject west update
Tenha paciência, estes últimos comandos vão buscar o repositório do Zephyr e todas as camadas HAL já portadas para este RTOS, incluindo a do ESP32. Repare que não chamamos (explicitamente) um comando git para clonar o repositórios, o west se encarrega de tudo. Agora, exporte um Zephyr CMake package. Isto faz com que o CMake carregue automaticamente códigos que facilitam o build das aplicações.
west zephyr-export
O arquivo scripts/requirements.txt do Zephyr declara dependências adicionais do Python. Faça a instalação usando pip3.
pip3 install --user -r ~/zephyrproject/zephyr/scripts/requirements.txt
4. Instalando o Toolchain do Zephyr
O SDK do Zephyr vai adicionar várias ferramentas adicionais para o host. Faça o download do instalador do SDK:
cd ~ wget https://github.com/zephyrproject-rtos/sdk-ng/releases/download/v0.12.2/zephyr-sdk-0.12.2-x86_64-linux-setup.run
Execute o instalador, instalando o SDK em ~/zephyr-sdk-0.11.4 :
chmod +x zephyr-sdk-0.12.2-x86_64-linux-setup.run ./zephyr-sdk-0.12.2-x86_64-linux-setup.run -- -d ~/zephyr-sdk-0.12.2
Este é um dos diretórios padrão recomendados para a instalação do SDK, para instalar em outros locais consulte a documentação do Zephyr.
5. Adicionando o Toolchain do ESP32 ao Projeto
Antes do build, precisamos informar ao Zephyr onde encontrar o toolchain para a arquitetura Xtensa do ESP32. Abra o terminal e digite os seguintes comandos para exportar as variáveis de ambiente necessárias ao build:
export ZEPHYR_TOOLCHAIN_VARIANT="espressif"
export ESPRESSIF_TOOLCHAIN_PATH="${HOME}/.espressif/tools/xtensa-esp32-elf/esp-2020r3-8.4.0/xtensa-esp32-elf"
export PATH=$PATH:$ESPRESSIF_TOOLCHAIN_PATH/bin
Você também pode adicionar os comandos acima ao seu arquivo ~/.bashrc se preferir. Tendo estas variáveis disponíveis a qualquer momento na sua sessão de trabalho. Em seguida, instale o toolchain:
cd ~/zephyrproject west espressif install
Por padrão, o toolchain será adicionado ao diretório $HOME/.espressif
6. Fazendo o Build da Aplicação
Lembra que eu mencionei que o west participa de todas as etapas do ciclo do projeto, pois bem, vamos utilizá-lo agora também. Faça o build do projeto hello_world para o ESP32 na pasta raiz do Zephyr.
cd ~/zephyrproject/zephyr/samples/hello_world west build -p auto -b esp32
No comando de build acima “-p auto” determina a detecção automática da porta serial, enquanto “-b esp32″ seleciona nosso alvo da compilação. Na sequência, o comando busca o CMakeLists.txt presente na pasta samples/hello_world para buildar a aplicação.
Se o build anterior falhar com uma mensagem indicando a falta de algum pacote Python, é possível que a falha seja, na verdade, devido ao uso do python2.x como padrão. Se este for o caso, faça do python3 o padrão do seu sistema com o seguinte comando:
sudo update-alternatives --install /usr/bin/python python /usr/bin/python3 10 && alias pip=pip3
Em seguida, rode o comando de build novamente.
Vamos precisar de um programa que se comunique com a porta serial, use o que você preferir, para ilustrar eu uso o minicom.
sudo apt install minicom
Para abrir a configuração do minicom digite o seguinte comando:
sudo minicom -s
A comunicação serial deve estar configurada para 115200 8N1. Veja como ficam as configurações no minicom nas figuras abaixo.
7. Gravando o Binário da Aplicação
Após a etapa de build a gravação do binário é muito simples, basta o seguinte comando:
west flash; minicom
No caso das placas ESP32 DevKit mais antigas, a placa entra em estado de espera até que você aperte o botão BOOT para iniciar a gravação, as placas mais recentes já começam a gravação imediatamente. No comando anterior eu já chamei o minicom na sequência, o que não é obrigatório. Você pode chamar o minicom depois e resetar a placa via botão EN para ver o resultado. Se você seguiu tudo até aqui, após várias mensagens de boot do ESP32, você deve ver as linhas abaixo.
Pronto, você validou o seu ambiente e rodou a sua primeira aplicação usando o Zephyr no ESP32!
Conclusão
Neste artigo vimos como configurar o ambiente do Zephyr e buildar um projeto de exemplo para o ESP32, em um próximo artigo eu vou cobrir um caso de uso do Zephyr RTOS no ESP32, onde iremos escrever a nossa própria aplicação. Até lá!
Saiba mais
Como instalar o Zephyr no Ubuntu 16.04








Bom dia,
Faz algum tempo que não uso o kernel Zephyr. Poderia me atualizar quais periféricos do ESP32 que funcionam no Zephyr ? E Sobre a pilha Bluetooth ?
Obrigado
Oi Marcio,
Além do Wifi driver, alguns periféricos do ESP32 já suportados no Zephyr são I2C, UART, SPI Master e Timers. Outros estão a caminho.
BLE faz parte do roadmap e você pode acompanhar a evolução de todo o suporte aqui: https://github.com/zephyrproject-rtos/zephyr/issues/29394
Glauber blz? Cara segui os passos da instalação tive alguns erro: pinheiro@ubuntu:~$ sudo apt install --no-install-recommends git cmake ninja-build gperf \ > ccache dfu-util device-tree-compiler wget \ > python3-dev python3-pip python3-setuptools python3-tk python3-wheel xz-utils file \ > make gcc gcc-multilib g++-multilib libsdl2-dev Lendo listas de pacotes... Pronto Construindo árvore de dependências Lendo informação de estado... Pronto file is already the newest version (1:5.38-5). file configurado para instalar manualmente. gcc is already the newest version (4:10.2.0-1ubuntu1). gcc configurado para instalar manualmente. git is already the newest version (1:2.27.0-1ubuntu1). git configurado para instalar manualmente. make is already the newest… Leia mais »
Oi Luis, tem muitos passos do processo de configuração acumulados aí, acaba dificultando a visualização dos erros. Consegue filtrar onde ocorre o primeiro erro? De qualquer maneira, parece que alguns pacotes não foram encontrados ou estão desatualizados, pode ser que você tenha que atualizar a sua lista de repositórios do Ubuntu primeiro.
Otimo artigo Glauber, parabens! Sera que tem uma documentação e get-started pratico assim para instalar todo o SDK com zephyr em windows? ou teria mesmo que partir para uma VM como minigw ou WSL?
Edit: https://docs.zephyrproject.org/latest/getting_started/index.html
Acabei de verificar que no link acima do get-started do Zephyr tem os passos para fazer a config correta do SDK em ambiente Windows
Obrigado José!
Isso mesmo, o link da documentação oficial que deixei como referência no texto mostra como instalar no Windows também. Os passos mudam principalmente na hora de definir as variáveis de ambiente, de resto, são praticamente iguais. Como eu não uso o Windows no meu dia a dia preferi deixar a informação somente dos passos que consegui testar, porém, se encontrar alguma dificuldade com o processo no Windows, por favor, compartilha com a gente também. Abraço!