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 >>
Sem licença Creative Commons

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

[wpseo_breadcrumb]
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: [email protected]:~$ 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
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 2 meses atrás by José Maurício Alencar FIlho
Talvez você goste:

Nenhum resultado encontrado.

Séries



Outros da Série

Menu
Privacy Settings saved!
Configurações de Privacidade

Entenda quais dados e informações usamos para ter melhor entrega de conteúdo personalizado para você.

These cookies are necessary for the website to function and cannot be switched off in our systems.

Para usar este site, usamos os seguintes cookies tecnicamente exigidos

  • wordpress_test_cookie
  • wordpress_logged_in_
  • wordpress_sec

Decline all Services
Accept all Services