Zephyr RTOS no ESP32 – Primeiros Passos

ESP32 zephyr
Este post faz parte da série Zephyr RTOS no ESP32. Leia também os outros posts da série:

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.

Zephyr no ESP32
Zephyr RTOS no ESP32: ESP32-DevKitC(ESP32-WROVER-E)

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.

2. Instalando as dependências

Use apt para instalar as dependências:

Verifique a versão do cmake instalada no seu host.

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:

  1. Adicione a chave de assinatura da Kitware (empresa desenvolvedora do cmake).

2. Adicione o repositório apt da Kitware para o release do seu SO. No caso do Ubuntu 20.04 LTS:

3. Reinstale o 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:

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:

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.

O arquivo scripts/requirements.txt do Zephyr declara dependências adicionais do Python. Faça a instalação usando pip3.

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:

Execute o instalador, instalando o SDK em ~/zephyr-sdk-0.11.4 :

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:

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:

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.

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:

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.

Para abrir a configuração do minicom digite o seguinte comando:

A comunicação serial deve estar configurada para 115200 8N1. Veja como ficam as configurações no minicom nas figuras abaixo.

Zephyr no ESP32
Zephyr no ESP32

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:

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.

image 3

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

Zephyr, o RTOS para IoT desenvolvido pela Linux Foundation

RTOS: Uso de grupo de eventos para sincronização de tarefas

Outros artigos da série

Blink LED no ESP32 e Zephyr RTOS >>
Veja + conteúdo

Engenheiro eletricista pela UFES e especialista em Sistemas Inteligentes Aplicados à Automação. Tenho atuado nos segmentos de Telecomunicações, Segurança da Informação, Cibersegurança, Workspace Management e Óleo & Gás. Atualmente, trabalho como Engenheiro de Software Embarcado na Espressif.

Sem licença Creative Commons

Receba os melhores conteúdos sobre sistemas eletrônicos embarcados, dicas, tutoriais e promoções.

Comentários:
Notificações
Notificar
guest
6 Comentários
recentes
antigos mais votados
Inline Feedbacks
View all comments
Marcio Montenegro
Marcio Montenegro
19/02/2021 07:57

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

Luis Eduardo
Luis Eduardo
17/02/2021 08:45

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 »

José Maurício Alencar FIlho
José Maurício Alencar FIlho
Membro
07/02/2021 08:59

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

Last edited 5 meses atrás by José Maurício Alencar FIlho
Talvez você goste:

Nenhum resultado encontrado.

Séries



Outros da Série

Menu